wangdaling

一:读取灰度图像

实验结果出来为什么会有从影呢,目前还没有解决,还是先贴图吧

(1)simulink下新建 一个 blank Model即可利用各个功能模块来构建自己的大功能系统,下图左边红色图标内点击弹出一个窗口,即可搜索选择自己需要的功能模块

 

(2)采集图像需要解决的问题

Image From File可以读取图片格式的文件;Image From Workspace 可以从工作区读取数据。Video Viewer可以输入图像并显示(类似于Scope观察信号波形一样)。

但是Image From File一次读出的便是完整的图片信息,是一个向量形式,而Gateway In只能接收标量数据的输入(即单个数据)。如果将两者直接相连,会出现错误。

 图像采集实现

 (3)Image From File读取一个512*512大小的图像,读出数据为一个512*512的数据,这个数据不能直接输入到FPGA中。

我们需要利用Simulink提供的功能丰富的block完成数据之间的转换。

(4)在写记录的过程中惊喜的发现错误所在处,,立马改正

原来是原先测试彩色图像时所用的图像像素大小与这个灰度图像像素大小不一样,没有随即修改所以导致第一幅图中显示结果的重影。

(5)Image From File:读取图像:

 

若读取的是彩色图像,则在image signal处选择下面一个选项

“File name”设置图片文件路径;“Sample time”设置为512*512即只做一次完整的图像采集;“Image signal”设置为one multidimensional signal只需输出一个通道,为512*512大小。

●Math Function:该block可以运行一些基本的数学函数(如指数、对数、平方等),这里设置为Transpose,计算图像的转置矩阵。

●Convert 2-D to 1-D:该block可以将二维数组重新按一维数组的顺序排列,从矩阵的列开始转换,如下图例子所示:


由于图像处理算法大多都是以行为单位,因此在前面加了一个Math Function模块求转置矩阵,这样在转换后的一维数组中便是按图像的每一行依次排列。

●Frame Conversion和Unbuffer:这两个block配合使用,将一维数组(向量)转换为Gateway In可以接收的标量形式。示例如下:

 

注意,Gateway In模块需要设置参数如下,应选择浮点型

 

 图像输出实现

图像输出的流程恰好与图像采集相反,是为了将FPGA处理后的标量数据重新转换组织成图片的数组形式。在Simulink中添加block按下图连接:

 

 

 

 下面以列表的形式给出每个block的作用(以输出512*512的灰度图像为例,可在工作空间中设置变量ImSize=512):

●Data Type Conversion:Simulink从Gateway Out读出的数据会默认转换为double,这里加入该block将数据转换为图像的uint8格式。

●Buffer:与Unbuffer作用相反,将标量数据重新组织为指定帧格式输出。示例如下:

双击配置该block,将“Output buffer size”设置为ImSize*ImSize,即每幅图像的数据为一帧。

Convert 1-D to 2-D:将一维数组重新整理为指定格式的二维数组,示例如下:

双击配置该block,将“Number of output rows”和“Number of output columns”都设置为ImSize,即以256*256的格式输出。

●Math Function:由上图可知,整形为二维数组后,原本图像的每一行数据变成了矩阵的每一列。因此需要加入此模块再求一此转置矩阵,得到原图像的数据排列方式。

打包子系统

可以看到上面的整个模型已经很庞大,因此将图像采集部分和图像输出部分分别打包为子系统。选中对应部分,右键->Create Subsystem from selection。打开子系统,修改IN/OUT管脚的名称。此时系统整体连接如下图:

 

二:同理彩色图像读取显示原理类似

选中需要打包的模块右键->Create Subsystem from selection;或如下图所示

 

 

 

Video Viewer:双击打开,点击File->Image Signal->Separate Color Signals,即可分别输入R、G、B三个通道的数据。

 

分类:

技术点:

相关文章: