System Generator 实施GNR 功能
强度值(即噪声)的随机变化通常会损坏图像质量。这种变化表现为高斯或正态分布,在不同传感器(即 CMOS 摄像头)中较为常见。线性平滑滤波器是消除高斯噪声的最佳方法,在许多情况下,它还可消除其它类型的噪声。为实现该功能,我们可通过使用连续窗口中的像素加权和来实施线性有限脉冲响应 (FIR) 滤波器。 在开始实施 GNR System Generator 模块之前,我们已在 MATLAB 中实现了其行为模型。而这只仅需两行代码即可实现。首先,我们需要计算内核,具体描述掩模尺寸(本例设为 5×5)和高斯的 ∑ 值。然后,我们可以通过卷积过滤输入图像: n_mask = fspecial(gaussian, 5, 0.8);
out_img = conv2(in_img, n_mask, same);
此外,我们还可使用这种行为模型,并通过实际视频数据测试滤波器,进而调节掩模系数。我们还可以通过验证 System Generator for DSP 子系统的输出是否与 MATLAB 函数的输出相等(在规定的误差范围内,这是因为 MATLAB 是以浮点方式工作,而 System Generator 则以固点算法方式工作)来验证硬件。 2-D GNR 模块以流线方式(即逐行方式)对输入图像进行处理。图 3 显示了整个预处理链的 System Generator 顶级方框图以及高斯噪声抑制功能的顶级方框图。 图 3 中的 data_in 和 data_out 端口分别用于接收输入像素流和返回滤波后的像素流,而其余的端口则用于邻接模块间的定时同步与处理控制。 如图中黄色和蓝色模块所示,我们将 GNR 块的内部架构建立在两个主要子系统上。我们将对上述各模块进行深入探讨,详细了解 System Generator 设计。 我们需要第一个主要子系统,即线路缓冲器(如黄色所示),来缓冲四条输入图像流线路,以输出 5 x 5排列的像素。对每个输入像素 I (u,v),线路缓冲器将返回由当前像素及同一行的前四个像素组成的 5x1 矢量,即 [I(u,v-4);I(u,v-3);I(u,v-2);I(u,v-1);I(u,v)]。如图 4 所示,我们可通过串联两个双线缓冲器来实施线路缓冲(line buffer)块,每个缓冲器使用一个双端口块 RAM(寄存于 FPGA 器件上的内存资源)、一个内存寻址计数器、一些简单二进制逻辑以及寄存器来实现适当的延迟。
图 3——顶级预处理与高斯噪声抑制方框图
图 4——System Generator 四线缓冲器的实施
图 5——System Generator FIR(卷积)滤波器的实施
蓝色阴影和赛灵思徽标表示 System Generator 原始块,分别对应精心优化的可同步 HDL 代码。通过这种图形界面,System Generator 使算法开发人员能够轻松地在硬件中实施 DSP 算法,且无需掌握任何 HDL 编码技术。 |