导言
现代图画处理体系对实时性的要求愈来愈高,但图画的前端收集往往会受器材或环境影响而使取得的图画含有噪声,因此需求在对图画处理前进行去噪声处理。若运用通用的软件办法,由于处理进程需求进行很多的简略核算,因此会耗费不少时刻而影响体系的实时性。跟着现代电子技能的开展,用FPGA来完结中值滤波这类运算简略但数据量巨大的处理,无疑是一种抱负的挑选。
1、中值滤波的原理和快速算法
1.1 中值滤波原理
中值滤波是一种非线性空域滤波办法。它是能够有用按捺图画噪声,进步图画信噪比的非线性滤波技能。中值滤波首要对邻域点的灰度进行排序,然后挑选中心值作为输出灰度值。与均值滤波器和其他线性滤波器比较,中值滤波能够很好的滤除脉冲噪声(Impulsive Noise)和椒盐噪声(Salt and Pepper Noise)。一起能够很好的维护图画边际概括的细节。
中值滤波的公式如下:
其间,g(x,y),f(x,y)为像素灰度值,S为模板窗口。
中值滤波的进程一般为:
(1)挑选一个(2n+1) (2n+1)的窗口(一般是3×3或许5×5),使窗口沿图画数据的行方向和列方向从左至右、从上至下沿每个像素滑动。
(2)每次滑动后,对窗口内的像素灰度进行排序,并用中心值替代窗口中心方位的像素灰度值。
1.2 快速中值滤波算法
中值滤波算法的中心是快速求出中心灰度值。传统的排序法如冒泡法,运算量巨大。而用硬件完结不只需耗费很多的资源,并且运算速度很慢,难以满意图画体系处理的实时性要求。本文针对巨细为3×3的窗口采用了一种快速排序算法,能够在很大程度上削减运算量,且易于用较少的硬件资源完结。
图1所示是一个3×3窗口内的像素摆放办法,该窗口将窗口内的各个像素点从左至右,从上至下顺次界说为D11、D12、D13、D21、D22、D23、D31、D32、D33。
处理时,先分别对每一行的数据进行排序,以得到每一行的最大值、中心值和最小值。其间榜首行得到的最大值为:Max1=max {D11,D12,D13};
中心值为:Med1=med{D11,D12,D13};
最小值为:Min1=min {D11,D12,D13};
相同,也可得到第二行的三个值Max2,Med2,Min2和第三行的三个值Max3,Med3,Min3。
由于在上述这九个数中,三个最大值中的最大值一定是九个像素值的最大值。同理,三个最小值中的最小值一定是九个像素值中的最小值。三个中值中的最大值至少大于五个像素值;即本行的最小值和其他两行中的中值及最小值。而三个中值中的最小值至少小于五个像素值;即本行的最大值和其他两行的中值和最小值。所以,比较三个最大值中的最小值Min_of_max、三个中值中的中心值Med_of_med以及三个最小值中的最大值Max_of_min,所得到的中心值便是终究的滤波成果Meddata。其详细进程如下;
尽管,与传统的排序办法比较,这种办法的比较次数大大削减。由于求出中值只用了19次比较运算,因此非常方便在FPGA上进行并行处理。
2、图画预处理体系和中值滤波器的规划
2.1 图画预处理体系规划
对图画的预处理,一般应在前端收集之后当即进行。图2给出了一个图画预处理体系的体系规划框图。
图2中,图画数据经前端设备收集并通过A/D转化后,可存人双口RAM中的一端。然后在挑选操控模块的操控下将双口RAM中的帧数据供给给中值滤波模块,一起在双口RAM的另一端存人另一帧图画数据。接着将中值滤波处理后的图画数据存入SDRAM中,以供后续的进一步处理。双口RAM的容量只需能够存储两帧图画数据即可。
2.2 3×3窗口模块
中值滤波作为图画预处理的一部分,其实时性是一个要害的要求。它要求滤波器能快速、接连的处理图画数据。中值滤波的榜首个问题是要精确取得3×3窗口中的图画灰度数据。图3给出了该滤波器的规划框图。
图3中的滤波器用到了两个FIFO。这种规划可采用QuartusII中的Megacore完结。规划长度为一行数据(即256)。体系开端作业后,先对FIFO2写榜首行图画数据,写满后再对FIFO1写第二行图画数据,直到FIFO1也写满。在此期间,FIFO1和FIFO2只写不读。当完结两行数据的写人后,将数据输入端和FIFO1、FIFO2如图2所示进行衔接,此刻的FIFO1和FIFO2只读不写,待三个时钟周期后,将FIFO1和FIFO2设为既读又写。这样,在寄存器输出端和两个FIFO的输出端即可取得榜首个3×3模板中的图画灰度数据。尔后,跟着图画数据的输人,模板也沿着图画从左至右、从上至下移动。
2.3 模板中的数据排序
数据排序可分为三步。榜首步是对每行的数据进行排序。第二步是对榜首步所得到的大值组、中值组、小值组进行排序。第三步是对第二步所得到的大值组中的最小值、中值组中的中值、小值组中的最大值进行排序,最终得到中值。
详细用FPGA完结时,为了满意实时性要求,可采用流水线技能和并行处理办法。每一次数据排序的一个比较运算完结后,就把数据赋给下一级寄存器,并在下一个时钟周期做进一步处理。而该级寄存器则一起接纳上一级寄存器传来的数据并进行相应的处理。本规划中共用了8级流水线,一起并行处理三行图画数据的排序。这样,在取得榜首个窗口数据后再通过8个时钟周期后,就可跟着模板的移动接连地取得中值了。
别的,要注意的一点是中值滤波算法不能对图画边际进行处理。而遍及的办法是把边际处的灰度设为0,详细电路设计时应加一个计数模块,以便确认此刻的像素点是在图画边际,这样就不用核算面将其直接设为0即可。这一点是很简单完结的。
3、硬件完结及成果
整个规划可采用VerilogHDL言语编写,并在QuartusII 6.0上完结,也可用Modelsim进行前后仿真。以便得到较高的处理速度。该规划可分别在ALTERA公司的CycloneII,CycloneIII,Stratix,StraTIxII器材上完结。表1列出了在各个器材族上进行全编译后的最大时钟频率。
由表1可见,中值滤波即便在低等级CycloneII器材上,也能够到达163.03MHz的时钟速率。
而在最新的CycloneIII器材上则可到达242.54MHz,在更高档的StraTIxII器材上则高达278.32MHz。这样以最高时钟处理一幅256×256×8bit的灰度图画只需236μs。图4所示是运用该规划在CycloneII平台上对一幅256×256×8bit的灰度图画进行处理的试验成果。
其间,图4 (a)在原图上加了椒盐噪声(saltand pepper noise)。图4(b)是经中值滤波处理后的图画。能够看出,中值滤波器对椒盐噪声有杰出的滤除效果。
4、 结束语
本规划在ALTERA公司的CycloneII系列FPGA上成功完结了一种快速中值滤波算法,并取得了杰出的处理成果。本办法为图画处理体系的前端预处理的滤波供给了一种解决方案,并能够应用于遍及的图画处理体系前端。事实上,本规划只需做细小的修正即可做为5×5、7×7以及更大的滤波模板。