|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
摘要∶图像在采集、压缩、传输和接收的过程中,会受到脉冲噪声的影响,给后续的边缘检测、图像分割或目标识别等造成干扰;传统中值滤波将图像的RGB分量转为YCbCr分量进行滤波,该转换方法会损失一定的色度信息,且未将彩色信息完全分离,导致滤波后的图像产生色彩偏移;针对上述问题,利用HSI彩色空间中的I和S色彩分量对椒盐噪声进行检测,并通过自适应中值滤波将椒盐噪声滤除,图像还原度更高;利用FPGA对算法进行了硬件加速,在xc7a100tfg484-2芯片上运行频率达222 MHz,可实现2k@60Hz视频的实时处理。
: x! t2 t, b+ `. \ S( N
0 P+ r* W2 I2 u/ `# K0 引言5 b# H$ x) D1 E, K9 d# T+ d# ^
数字图像在采集、传输和处理的过程中,由于设备工作环境的恶劣,会引入一些随机、离散噪点,降低了图像质量和视觉效果0-21。现实环境中存在多种图像噪声,如高斯噪声、随机噪声、瑞利噪声等3,图像降噪应兼顾降噪效果和细节保留这两方面。
2 k7 U+ y" P& E" I, c/ P3 b" I目前对椒盐噪声的滤除,有加权中值滤波算法**、开关中值滤波算法57、自适应中值滤波算法和改进型中值滤波算法7-101,自适应中值滤波算法运算量大、复杂度高,虽然在PC端可以达到很好的滤波效果,但由于其串行计算的特点,很难满足对高分辨率、高速图像实时滤波的要求。FPGA(Field Programmable Gate Array)为半定制电路,可通过流水线等操作实现面积与速度的互换,可直接将算法映射为电路,从而可极大加快算法执行的效率。目前彩色图像的中值滤波主要是将RGB彩色空间转换到YCbCr彩色空间,然后对Y分量进行滤波。由于YCbCr色彩空间会损失掉色度信息,因此降噪后的图像会产生失真。
5 K9 _8 b0 l7 q8 Q1 H. [/ h# \鉴于此,结合HSI(Hue Saturation Intensity)色彩空间特点设计了一个基于FPGA的实时彩色图像自适应中值滤波系统,极大的增强了滤波的实时性。最终实验结果表明该系统可对2k(2560×1440)@60Hz彩色视频实时处理,且滤波后图像色彩还原度高,具有广阔的应用前景。
5 |4 r- I1 i3 z" Z; l
' Y- N2 g1 r; I1、RGB-HSI模块! H u: @% r5 c0 S+ Q7 o
本节将介绍HSI彩色模型,并将几何推导算法和分段定义算法在FPGA硬件上实现。
2 c" |, R; D. C; C, A/ E1.1 HSI彩色模型4 ]4 t: f: ^) U+ P* @& N4 G
我们观察物体时,用其色调、饱和度和亮度来描述这个物体。HSI彩色模型可从携带彩色信息(色调和饱和度)的图像中去除强度分量的影响。因此,HSI模型是开发基于彩色描述图像算法的理想工具。如图1所示图(a)为基于圆形彩色平面的HSI彩色模型,图(b)为基于三角形彩色平面的HSI彩色模型。以图(a)为例,白色顶点与黑色顶点相连的轴为亮度轴,饱和度为像素点与亮度轴的距离,色调为像素点与红色轴的夹角,在亮度轴上饱和度为0且无色调。常见的RGB-HSI转换算法共有5种,算法的具体推导和公式可查阅文献【14】获得。由于HSI各分量间相对独立,故可以根据具体应用,将不同算法的HSI公式交叉使用。下节分别在FPGA上实现几何推导算法和分段定义算法,通过对两种方法转化后图像的质量进行对比,在转化精度与消耗硬件资源之间进行权衡,选择合适的算法。# m* [- E8 o( m4 t# {
3 H. }; O! H) o8 q& h5 M
( F9 W# o7 S6 ^/ U2 m8 j+ y0 b+ ~3 N8 s1.2 几何推导法硬件实现
( j- Q; `& c0 P3 t# {由于FPGA只能进行整数计算,所以将浮点数转换为整数进行计算,由8位2进制数表示【0,1】,量化精度为0.003 921。给定一幅RGB彩色图像,每个RGB像素的H 分量可由下式得到∶& _$ P& m8 }; I; i6 Z2 n
% a0 F3 ?* _) l1 |0 N
! Y/ r4 Y; r+ M- e
2、滤波窗口和排序模块% v& S+ V' Q7 a* s$ u+ U- C0 d
本节将介绍3×3、5×5和7×7滤波窗口的获取,以及窗口内最小值、最大值和中值的获取,并将其在硬件上实现。
& Z4 @5 }! U" \ L) u4 K2.1 自适应滤波窗口的生成
) ]& n2 b: @$ U' P' H9 s$ b本系统自适应中值滤波支持最大滤波窗口为7×7,为实现实时图像处理,此模块直接生成7×7的滤波窗口,3 ×3、5×5滤波窗口可直接从7×7的滤波窗口得到。为保护图像细节,我们采用扩展邻近像素点的方式对边界进行填充。
1 ~1 l1 b+ i7 v5 V7 t1 ]' V5 G我们采用RAM存储图像前6行的数据,而输入的数据作为第7行,这样可以节省一行RAM硬件资源。由于图像分辨率为400×480,HSI分量需要25 bit来存储,其中H 为9 bit、S为8 bit、I为8 bit,因此我们需要调用6个位宽为25 bit、存储深度为400的SIMple Dual Port RAM。RAM存储时序如图3所示,由于RAM读取数据需要一个时钟周期,所以要将输入像素数据延时一个时钟周期,延时后的像素数据与6个RAM读出的数据构成一个"七行一列”的像素数据。为防止RAM读写冲突,输入的像素数据在RAM1读出数据后写入RAM1中,相应的RAM1读出的数据在RAM2读出数据后写入RAM2中,以此类推。连续缓存7个“七行一列”的像素数据就可以生成7×7的滤波窗口。因为需要等3行像素数据的缓存,所以第一个7×7的滤波窗口与第一个像素相差1200个有效像素时钟。2 k0 V7 S2 C, ]6 C$ Z( i+ b& H F8 o1 b
2 D% m1 P/ `+ s6 p8 `
& I, q, B, J/ K* Q1 F0 {
- H% _2 E! b6 a+ ]) J4 ], L& B |
|