基于FPGA的千兆以太网的实现(2)

MATLAB读取txt文件转化成图片

  • 项目简述
  • 转换代码
  • 实验结果
  • 总结

项目简述

我们千兆以太网的项目是上位机通过千兆网发送一副图片经过DDR3缓存然后分别经过USB3.0、千兆网发送给电脑,但是因为我们没有千兆网接受的上位机,所以我们利用NetAssist接收转存进txt文件中。那么,我们为了验证我们实验的正确性,必须得将txt文件转换成图片直观地验证我们实验的正确性。

转换代码

因为本次论文没有太多的理论支撑,那么我们直接给出代码。但是注意我们的代码转换的txt文件必须是1行,我们一开始接收的txt文件进行了换行处理,所以我们先利用了Notepad++对txt文件进行了预处理,将多行数据行合并成一行新的数据。合并成一行数据之后,才方便我们在MATLAB中的处理,程序如下:


clc;
clear all;
close all;
%%确定所要读取的文件名以及方式
fileID = fopen('aaa.txt','r');
%%确定所读取数据的格式(这里是整数,所以用%d,也可以用%f,表示浮点型数据)
formatSpec = '%x';
%%确定数据矩阵的大小。需要注意的是,读取时是行优先,在保存时是列优先,所以在最后需要进行转置。
%%下面的4主要是指一行有四个数据。
%%这里的Inf也可以写具体的值,不过只要确定矩阵的一维,另一维就随之而定了。这里选择了Inf。
size = [1 Inf];
%%读取数据并保存在A中。
A = fscanf(fileID,formatSpec,size);
%%文件读取关闭
fclose(fileID);
image_r1 = zeros(1,768*1024);
image_g1 = zeros(1,768*1024);
image_b1 = zeros(1,768*1024);
j = 1;
m = 1;
n = 1;
for i = 1:2359296
    if mod(i,3) == 1
        image_r1(1,j) = uint8(A(1,i));
        j = j + 1;
    end
    if mod(i,3) == 2
        image_g1(1,m) = uint8(A(1,i));
        m = m + 1; 
    end
    if mod(i,3) == 0
        image_b1(1,n) = uint8(A(1,i));
        n = n + 1;
    end
end
image_r = uint8(reshape(image_r1,1024,768)');
image_g = uint8(reshape(image_g1,1024,768)');
image_b = uint8(reshape(image_b1,1024,768)');

image_rgb(:,:,1) = uint8(image_b);
image_rgb(:,:,2) = uint8(image_g);
image_rgb(:,:,3) = uint8(image_r);


figure,imshow(image_rgb)
pic_data    = imread('./aaa.bmp');    %R:8bit
pic_red     = pic_data(:,:,1);
pic_green   = pic_data(:,:,2);
pic_blue    = pic_data(:,:,3);
figure,imshow(pic_data)

上面的代码关键部分我们已经注释,同学们可以从上面进行学习。

实验结果

接下来,我们利用千兆网传来的数据进行画图,并且给出原图像进行对比,如下:
千兆网接收的图片,


原图像:

通过以上两幅图像的对比,可以验证我们的实验基本正确,至于具体的瑕疵是我们使用千兆网上位机的问题。

总结

创作不易,认为文章有帮助的同学们可以关注、点赞、转发支持。(txt文件、图片文件在群中)对文章有什么看法或者需要更近一步交流的同学,可以加入下面的群:
在这里插入图片描述

你可能感兴趣的:(FPGA)