主要内容

去噪和图像锐化

这个例子展示了如何使用Vision HDL Toolbox™实现一个基于fpga的图像增强模块。

Vision HDL工具箱提供视频处理算法,用于生成可读的、可合成的VHDL和Verilog代码(使用HDL Coder™)。所生成的HDL代码可以以每秒60帧的速度处理1080p的视频。

计算机视觉工具箱™产品模型具有高抽象级别。块和对象执行全帧处理,每次在一个图像帧上操作。然而,FPGA或ASIC系统执行像素流处理,每次操作一个图像像素。

来自物理系统的输入图像经常包含模糊和噪声等缺陷。对焦不清的物体会使图像模糊。相机或视频传感器上死机或卡住的像素,或硬件组件的热噪声,都会导致图像中的噪声。这个例子去除了噪声并锐化了输入图像,它可以用于处理链的早期阶段,为后续处理提供更好的初始条件。这个例子使用了来自Vision HDL工具箱的两个像素流过滤器块。中值滤波器去除噪声和图像滤波器锐化图像。为了验证像素流设计,将结果与计算机视觉工具箱中的全帧块生成的结果进行比较。

模型概述

NoiseRemovalAndSharpeningHDLExample.slx系统显示。

计算机视觉工具箱模块一次操作整个框架。Vision HDL工具箱块对像素数据流进行操作,每次一个像素。Vision HDL工具箱中的转换块,帧到像素和像素到帧,使您能够模拟流像素设计并与全帧设计进行比较。

提供给Full-Frame行为模型和像素流HDL模型子系统的线条颜色的差异表明了模型流分支上的图像速率的变化。发生这种速率转换是因为像素流与完整视频帧发送的时间相同,因此它以更高的速率传输。要打开颜色并查看示例时间信息,请在左侧调色板中单击样品时间图标并选择颜色

下图显示了Image Source子系统。

Image Source块导入灰度图像,然后使用一个名为Blur and Add Noise的MATLAB函数块来模糊图像并注入椒盐噪声。的imfilter函数使用一个3 × 3的平均内核来模糊图像。椒盐杂音是通过呼叫imnoise命令。噪声密度定义为图像中盐和胡椒像素的组合数量与总像素的比例。这个密度值由Noise density constant块指定,并且它必须在0和1之间。图像源子系统输出全帧图像的二维矩阵。

下图展示了全帧行为模型子系统的结构,该子系统由基于帧的中值滤波器和计算机视觉工具箱中的二维FIR滤波器组成。中值滤波去除噪声,并配置二维FIR滤波器来锐化图像。

下图显示的是一帧模糊带噪声的源视频,经过中值滤波后的去噪版本,以及经过二维FIR滤波后的锐化输出。

像素流HDL模型子系统使用Vision HDL工具箱实现了基于流的中值滤波器和二维FIR滤波器。验证子系统比较了全帧处理和像素流处理的结果。接下来的两部分将描述这两个子系统。

Pixel-Streaming HDL设计

帧到像素块将全帧图像转换为像素流,因为Vision HDL工具箱中的块对FPGA硬件所需的流输入信号进行操作。为了模拟基于fpga或asic的视频系统中水平和垂直消隐周期的影响,使用非图像数据对有源图像进行增强。有关流像素协议的更多信息,请参见流像素接口(视觉HDL工具箱).帧到像素块的配置如下所示:

灰度图像输入时,设置分量数字段为1,视频格式字段为240p,与视频源匹配。

在本例中,有源视频区域对应于来自上游图像源子系统的模糊和噪声图像的240x320矩阵。其他6个参数,即每行总像素、视频总行、开始活动行、结束活动行、前廊和后廊指定将在活动视频的四周添加多少非图像像素。有关更多信息,请参见帧像素(视觉HDL工具箱)块引用页面。

注意,图像源内部视频源的期望采样时间是由每条线的总像素和视频线的总像素的乘积决定的。

像素流HDL模型子系统包含Vision HDL工具箱中的中值滤波器和二维FIR滤波器的流实现,如下图所示。您可以使用HDL Coder™从像素流HDL模型子系统生成HDL代码。

中值滤波器(视觉HDL工具箱)块是用来去除盐和胡椒的噪音。根据滤波系数,图像滤波(视觉HDL工具箱)块可用于模糊、锐化或检测中值滤波后恢复图像的边缘。在本例中,Image Filter被配置为锐化图像。

验证像素流处理设计

为了与计算机视觉工具箱中输出的全帧滤波器进行比较,该模型使用Pixels to frame块将像素流数据转换回全帧。将帧到像素和像素到帧的组件数字段和视频格式字段分别设置为1和240p,以匹配视频源的格式。

像素到帧块的输出是一个完整图像的二维矩阵。这允许我们将HDL模型与全框架域中的行为模型进行比较,如下面的Verification子系统所示。

计算参考图像与经过流处理的图像之间的峰值信噪比(PSNR)。理想情况下,这个比率应该是无穷大的,表明从全帧行为模型输出的图像与从像素流HDL模型生成的图像匹配。

生成HDL代码并验证其行为

要检查和生成本例中引用的HDL代码,您必须具有HDL Coder许可证。

要生成HDL代码,使用以下命令:

makehdl (“NoiseRemovalAndSharpeningHDLExample / Pixel-Stream HDL模型”);

要生成测试台,请使用以下命令:

makehdltb (“NoiseRemovalAndSharpeningHDLExample / Pixel-Stream HDL模型”);