数字图像中值滤波算法的FPGA实现
- 格式:pdf
- 大小:678.98 KB
- 文档页数:4
微 处 理 机M I CROPROCE SSORS数字图像中值滤波算法的FPGA实现胡 斌,殷瑞祥(华南理工大学电子与信息学院,广州510640)摘 要:针对传统中值滤波算法排序量大的缺点,详细研究了一种改进的中值滤波算法,对一个n n的滤波窗口,先对每一列升排序,再对每一行升排序,最后取对角线上像素中值作为滤波结果。
用V erilog硬件描述语言实现改进的中值滤波算法,并在M odelsi m6.5a中通过时序仿真,最终在A ltera DE2开发板上验证和实现。
关键词:中值滤波;现场可编程逻辑门阵列;V er ilog硬件描述语言;数字图像处理;DE2开发板DO I编码:10.3969/.j issn.1002-2279.2010.02.003中图分类号:TP391 文献标识码:A 文章编号:1002-2279(2010)02-0010-03I m pl e ment ati o n of Med i a n F ilter on FPGAHU B in,Y I N Rui-x i a ng(School of E lectronic and Infor m ation E ngineer i ng,South Chi na Universit y of T echnology,Guangzhou510640,China)Abstract:I n or der to so lve the proble m t h at the speed of classicalm edian filter w as slo w because o f lots o f sorti n g,an i m proved m ed ian filter a l g orithm is descri b ed.Fo r a filter w i n do w,each r ow is so rted up firs,t and then each li n e,the m edian va l u e in the cater corner is the resul.t Verilog HDL code of the i m pr oved m edian filter algor ithm is i m ple m ented and si m u lated i n the M ode lsi m6.5a I D E,validated and realized on the A ltera DE2boar d.K ey w ords:M edian filter;FPGA;Verilog HDL;D i g ital i m age processi n g;DE2Boar d1 引 言在图像生成和采集过程中引入的各种噪声会使图像质量变差,所以必须先对图像信号进行预处理,以达到抑制背景噪声的效果,增加目标强度,从而提高图像信噪比,为后续工作打下良好的基础。
但由于图像预处理的计算量庞大,在需要实时图像处理的应用场合,不能达到实时处理的要求,因此选用硬件来实现。
FPGA是一种大规模的可编程逻辑器件,可以用于任何的数字逻辑系统,特别是在实时处理方面,更有独特的优势。
而FPGA本身具有的高性能、高集成度和低功耗的特点,使其可以灵活、高效的运行和分析各种图像预处理算法。
中值滤波是一种常用的预处理算法,但基于软件思想的冒泡排序算法排序量大,要消耗大量的逻辑资源。
文献[2]提出了一种改进的中值滤波算法,该算法能大大降低排序次数,在用FPGA来实现时可节约大量逻辑资源。
通过用V eril o g硬件描述语言实现该算法,并在FPGA 中验证和实现。
2 中值滤波原理中值滤波器是Turky在1971年提出的。
中值滤波器的使用非常普遍,对于一定类型的随机噪声,它提供了一种优秀的去噪能力,比小尺寸的线性平滑滤波器的模糊程度明显要低,尤其是对处理脉冲噪声(也称椒盐噪声)非常有效。
中值滤波器的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替。
公式[1]表示为: f^(x,y)=m ed i a n(s,t)S x y{g(s,t)},其中f^(x,y),g(s,t)为像素的灰度值,S xy为窗口内数据。
二维中值滤波一般采用一个n n(n通常取奇数)的滑动窗口,从左至右,从上到下逐行移动,其中n为滑动窗口行数和列数。
对滑动窗口内的图像灰度数据进行排序,选择排序后像素的中值作为指定像素点的灰度值。
对于作者简介:胡斌(1985-),男,江西高安人,硕士研究生,主研方向:数字信号处理的FPGA实现。
收稿日期:2009-08-21第2期2010年4月No.2Ap r.,2010胡 斌等:数字图像中值滤波算法的FPGA 实现不同的图像内容和应用场合,采用不同的滤波模板窗口,常用的窗口有3 3模板和5 5模板。
3 中值滤波算法分析中值滤波算法的核心是排序,排序算法的优劣直接决定求中值的效率,从而决定中值滤波器的整体性能。
若中值滤波算法中排序模块使用软件思想中的冒泡排序算法,对滤波窗口中的相邻像素作二值比较排序,则n n 滤波窗口的算法复杂度为n 2(n 2-1)/2,算法复杂度为O (n 4),常用的3 3滤波窗口需要排序次数36次,一张分辨率为256 256的图片,需要处理65536个像素,每个像素经过3 3滤波窗口都要进行36次排序,总共需要的排序次数为2359296次。
针对冒泡排序算法排序数量大的缺点,文献[2]中在冒泡排序的基础上提出了一种改进的中值滤波算法,能大幅降低滤波窗口求中值的排序次数。
以滤波窗口为例,分析说明这种改进的中值滤波算法求取中值的过程。
对于3 3滤波窗口,假设滤波前的窗口数据为W,每列升序排序后的窗口为W !,每行升序排序后的窗口为W ∀。
滤波前的窗口W,对每列按升序排序,第一列的最大值w !11=M ax1=M ax {w11,w 21,w31},第一列的中值为w !21=M ed1=M ed{w11,w21,w 31},第一列的最小值为w !31=M i n 1=M i n {w 11,w 21,w31};依此类推第二列的最大值为w !12=M ax2=M ax {w12,w 22,w 32};第二列中值为w !22=M ed2=M ed{w12,w 22,w 32};第二列最小值为w !32=M i n 2=M in {w12,w 22,w32};第三列的最大值为w !13=M ax3=M ax{w 13,w 23,w 33};第三列中值为w !23=M ed3=M ed {w 13,w 23,w33};第三列最小值为w !33=M i n 3=M in{w 13,w 23,w 33}。
同理,对W !的窗口元素每行按升序排序后得到W ∀,则最后的滤波结果resu lt=M ed{w ∀13,w ∀23,w ∀33}。
每列排序需要3次,每行排序需要3次,3行3列排序次数为3 3 2=18次,最后求窗口对角线元素中值也需要3次排序,所以总共需要的排序次数为21次,与采用冒泡排序的中值滤波算法相比,改进的中值滤波算法排序次数降低了42%。
4 中值滤波算法的硬件实现以3 3窗口处理256 256的8bit 灰度图像为例进行硬件设计,中值滤波模块的硬件结构如图1所示,主要包括3 3窗口模板和中值算法模块,在FPGA 中验证和实现还需要一个逻辑控制模块负责生成读SDRAM 的地址和控制信号,下面分别介绍3 3窗口模板和中值算法模块。
图1 中值滤波硬件结构图4.1 窗口模块为了使3 3模板中的3行3列共9个数据能够在同一时刻同时输出,便于之后的排序算法进行流水线处理,3 3窗口模板由三组寄存器和两个FI FO 组成。
该模块实现了数据的串入并出,在FPGA 中定义了9个寄存器w 11、w 12、w 13、w 21、w22、w 23、w 31、w 32、w33来存放3 3窗口数据,其硬件实现结构如图2所示,图中reg0~reg8为移位寄存器。
由于本设计处理的是分辨率为256 256的8b it 灰度图像,所以一行数据存储在三个寄存器和一个FI FO 中,其中FI FO 存储253个像素数据。
在进行中值滤波时,先从数据端口读入两行图像数据保存在寄存器和FI FO 中,开始滤波后从数据端口不断读入数据,每读入一个图像数据,同时生成一个3 3窗口。
本设计采用的是Quartus II 8.1提供的FI FO,设置FI FO 的宽度为8,深度为256。
图2 3 3窗口硬件结构实现3 3窗口的关键在于何时允许读取两个FI FO 以及何时允许窗口数据有效,当FI FO 中字节数达到252时,允许读FI FO 。
当经过2 256+3=515个时钟周期时,允许窗口数据有效,以后数据流不断进入,每流进一个图像数据就生成一个3 3窗#11# 2期微 处 理 机口。
4.2 改进的中值滤波算法模块中值滤波算法模块的核心是一个三点排序模块,三点排序模块是对三输入进行升序排序,由三级比较器组成。
设三点输入为in1、in2、i n 3,输出为m ax 、m ed 、m i n 。
第一级比较器,比较in1与i n 2,in3寄存一拍到i n 3!;第二级比较器,比较i n 3!与m ax1,m ax1=m ax {i n 1,in2},m in1寄存一拍到m i n 1!,m in1=m i n {i n 1,in2};第三级比较器,比较m in2与m in1!,m i n 2=m in{m ax1,m i n 1!},小值作为三点排序结果的最小值m i n 输出,大值作为三点排序结果的中值m ed 输出,第二级比较器输出的大值m ax2寄存一拍后作为三点排序结果的最大值m ax 输出,m ax2=m ax {m ax1,m i n 1!}。
按照第二节所述的改进中值滤波算法,调用三个三点排序模块对每一列按升序排序,,再调用三个三点排序模块对每行按升序排序,最后调用一个三点排序模块对行列排序后的窗口对角线上的元素排序,中值作为滤波结果输出,所以总共调用7个三点排序模块可实现该改进的中值滤波算法,需要耗费9个时钟周期。
改进的中值滤波模块在QuartusII 8.1综合开发环境通过编译,其资源占用情况如表1,FPGA 芯片选择的是Cyclone II 系列EP2C35F672C6。
表1 改进的中值滤波算法资源占用D ev i ceEP2C35F672C6T o tal l og ic e l e m ents 659/33216(2%)T ota l reg isters591T otal pi ns 18/47(4%)T ota lm e m o ry bits4096/483840(<1%)5 时序仿真本设计用M ode lsi m 6.5a 进行仿真,由M atlab 将256 256的图片转换为测试向量文件,编写Testbench 顶层模块仿真改进的中值算法模块,其仿真结果如图3所示。