学会System Generator(21)——图像采集与输出(文件方法)

本文是该系列的第21篇。前几篇介绍的音频信号处理本质上属于一维信号,直接采样与输出即可。但图像属于二维信号,如果想在Simulink中采集和输出图像,进行图像处理算法的仿真时会遇到一些问题。本文将介绍如何搭建图像的采集与输出模型。

采集图像需要解决的问题

Computer Vision System Toolbox中包含两个模块:Image From File可以读取图片格式的文件;Video Viewer可以输入图像并显示(类似于Scope观察信号波形一样)。

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

Image From File读取一个256*256大小的图像,读出数据为一个256*256*3的数据(RGB三个通道),这个数据不能直接输入到FPGA中。我们需要利用Simulink提供的功能丰富的block完成数据之间的转换。

图像采集实现

在Simulink中添加block按下图连接:

下面以列表的形式给出每个block的作用(以读取256*256的RGB图像为例,工作空间中设置变量ImSize=256):

●Image From File:读取图像:

“File name”设置图片文件路径;“Sample time”设置为ImSize*ImSize即只做一次完整的图像采集;“Image signal”设置为Separate color signals可以独立输出图像的R、G、B三个通道,每个通道都是256*256大小。

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

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

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

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

Unbuffer将帧格式(frame)转换为标量数据;Frame Conversion的作用便是将一维数组以帧格式采样输出,即将一副图像共(256*256=)65536个数据打包为一帧,再由Unbuffer转换为标量。

●Data Type Conversion:目前的RGB图像每个通道大多都是uint8格式,该模块将数据格式转换为uint8。

●Unit Delay:延时一个单位,数据缓存。

●Gateway In:读取uint8格式的图像数据,数据格式设置为UFix_8_0。

图像输出实现

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

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

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

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

打包子系统

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

在System Generator和Gateway In中将采样时间设置为1S;Simulink仿真时长设置为256*256,即保证采集完一幅图像。再添加一个Video Viewer观察原始图片。运行仿真,结果如下:

输入与输出图片相同,表明结果正确。如果需要进行数字图像处理算法的仿真验证,在其中加入其它block实现算法即可。本系统实现了图像的采集与输出,使仿真时的结果更直观,更容易观察算法效果,大大提升了仿真效率。

文章来源:FPGADesigner的博客
*本文由作者授权转发,如需转载请联系作者本人

推荐阅读