1、高速 DSP 算法在中值滤波器中的实现高速 DSP 算法在中值滤波器中的实现王双(解放军电子工程学院)摘要:文章首先介绍了中值滤波器算法理论,并分!析了硬件结构的总体设计和处理单元的基本设计,然后利用 xilinx 公司提供的 ISE5.2 集成开发环境,对两种结构的中值滤波器采用 VHDL 语言进行了设计实现,提出的基于编:码查询结构的中值滤波器设计方法,充分显示了其优势,有着巨大应用价值.i关键词:中值滤波,数字图象处理,编码查询,开 i窗,灰度 iIImplementat0nintheHighSpeedDSPIAlg0rithms0fMedianFilter!WangShuangE1ec
2、troniCEngineeringInstitute,PLAAbstract:ThisarticlefirstlyintroducesMedianFiiteralgorithmstheory,andhasanalyzedthehardwarearchitecturesystedesignandprocessedunitbasicdesign,thenusesintegrateddevelopentenvironmentoftheISE5.2ofXilinxCorporationtocarryontwokindofMedianFiiterdesignrealizationbyVHDLlangua
3、ge,proposedMedianFiiterdesignethodbasedonthecodeinquirywhichisenabledMedianFiiterfullytousetheLUTresourcesinFPGA.TheclockcycleiSless.ThespeediSquicker.Thesehasfullydeonstrateditssuperioritywhichhasthehugeapplicationvalue.Keyword:RankOrderFilter,MedianFilter,Digitalimageprocessing,Thecodeinquiry0.引言序
4、列滤波运算是一种非线性滤波,它是数字图像处理领域中的一个非常重要的运算.中值滤波就是序列滤波的一个典型实现,它是一种局部图像平滑技术,属于非线性滤波,将每一象素点的灰度值设置为该点某邻域窗口内的所有象素点灰度值的中值.实现方法:1.通过从图像中的某个采样窗口取出奇数个数据进行排序2.用排序后的中值取代要处理的数据即可中值滤波在保持图像边缘特征的同时,可以有效的去除非高斯类和冲击类噪声,例如椒盐噪声.对图像进行中值滤波运算一般是采用开窗处理的方式,对窗内的像素按照灰度值升序或者降序进行排列,然后以位于该排列中间的值(即中值) 取代窗中心的值(如图 1 所示).如果所采用的窗的尺寸是 2n+l,窗
5、中的像素灰度值依次为,p(O,0),p(1,0)p(O,2n),p(1,0),.P(2n,2n),按照灰度升序排列后依次为,m(0),m(1),m(2),m(4n+4n),则窗内像素灰度中值为 m(2n(n+1).滤洼窗口囊序捧列的囊值出圈l220263642526o.496图 1 中值滤波处理不例1.开窗操作在数字图像处理领域中很多算法都要用到开窗操作,即根据某一个像素及其周围像素灰度值来计算输出.例如,开窗操作可以对环绕在某一像素周围的像素灰度求取平均值.为叙述方便起见将被环绕的像素称作原始像素(origin).如图 2.1 所示:幽 2.1 像素固和原始像素本文选择 3X3 的方形窗进行
6、相关算法的研究设计工作,原因在于,3X3 的窗对于大部分算法来讲都足以说明问题,同时它是最小的窗,不仅简单易行,而且对于硬件实现来讲效率最高.在硬件中实现开窗操作的结构如图 2.2 所示:输出 3X3 窗lll2l】w21w22wMw32w33lIilIL=IillI-l1-,-lw2l“?基-1l-鼙 will图 2.2 实现开窗操作的结构从图中可以看出,在硬件中实现开窗操作,需要用到寄存器和 FIFO,FIFO 主要用来进行图像的行缓冲,显然,如果窗的尺寸选的越大,消耗的 FIFO 和寄存器就越多,硬件资源的消耗也会显着增加.2.硬件结构2.1 总体设计以 3X3 的窗为基础,硬件实现结构
7、如图 3.1a 所示.甲甲甲甲处理基元处理基元 l 处理基元日)l,删_1 处理基元处理基元 l 处理基元d眦 lmnI/;mlnl4mlnlj/处理基元Medi 蚺图 3.1a 中值滤波实现结构在上述处理中,首先将 9 个像素(PII-P33)分成三组,每组都是同一列中的 3 个像素.整个滤波处理分作 3级进行.第一级,对每一组的三个像素按照灰度值升序进行排序以确定灰度最小值,中值,最大值像素;第二级,分别对第一级排序后得到的三个像素灰度最大值,中值,最小值进行排序,得到如图 3.1b 所示的阵列.大小大小maxIIm 娃 I2medIImedI3.minI2minI3图 3.1b 第二级中
8、值滤波结果阵列结构该阵列中行,列均按像素灰度值升序排列.可以证明,这 9 个像素的中值必存在于该阵列的反对角线上的三个值之中;第三级,对这三个值进行排序以确定整个窗内像素的中值.2.2 处理基元设计这里的处理基元本质上是对三个像素灰度值进行排序,传统上对三个数值进行排序是按照冒泡法进行处理的,结构如图 3.2a 所示,每一组数据中任意取两个数据首先进行比较,取比较结果中较小值(可选)与第三个数据进行比较,第二次比较结果中较小值即为三个数据中的最小值,第二次比较的结果中较大值与第一次比较结果中较大值进行比较,即可得到最大值和中值,完成一次排序需要 3 个时钟周期,而完成整个窗内像素灰度值的中值滤
9、波处理则需要 9 个时钟周期;由于对实时性的要求日益提高 ,本文提出了另一种基于查询表的结构,如图 3.2b 所示.a 基于胃泡法的结构 b 基于查询衰的结构图 3.2 处理基元结构示意图(圆圈表示比较器)这种方法在每一组数据中同时对三个数据进行两两比较,对比较结果进行编码,根据编码结果查询排序表,直接获得排序结果,完成一次排序只需二个时钟周期,完成整个滤波过程只要 6 个时钟周期,完成一次滤波时间减少了三分之一.同时,这种方法的提出充分利用了基于查找表 FPGA 的结构优势,有效的利用了 FPGA 中的 LUT 资源.该方法实现的关键是需要正确编码,剔除非法编码状态,并制定相应的排序表,本文
10、根据输入像素数量 n=3 时给出编码方法如下所述:假设输入的三个像素灰度值分别为 a,b,C,Mabc三者的大小关系共有 6 种情况,因此采用二进制的编码寄存器 reg 需要三位,最高位纪录 a 与 b 的比较结果,次高位纪录 a 与 c 的比较结果,最低位记录 b 与 C 的比较结果,即:ab=,.2】1,elsereg2=0a=c=reg1】=1,elsereg1 】=0b=C=regO】=1,elseregO=0编码如下:表 3.2c 处理基元的一组编码IG0RDER111abc110acb101illegall 帅 cab011bac010iUegal帅 lbca0 帅 cba当输入三个数字 abc 时,同时进行 ab,be 和 aC 之间的大小比较,比较的结果形成编码寄存器 reg 的记录值 ,即输出一个三位的码,然后将该码按表 1 进行查询译码,译码的结果就是 abc 三个数字的降序排列 .3.实现分析本文在 xilin公司提供的 ISE5.2 集成开发环境下,对两种结构的中值滤波器采用 VHDL 语言进行了设计实现,结果详见表 4:器件规模资源开时钟最小所需方案选择开窗位宽销 LUT 周期 ns 周期数综合工具器件尺寸传统方法 3383926.7209synplifyxc2vl000新方法 3x383806.2416synplifyxc2vl000