杜翠兰
摘要:本文提出了图像处理并行快速统计排序滤波算法。该算法基于FPGA进行设计,首先采用全并行比较方式实现滤波窗内数据排序,然后通过流水线方式实现滤波输出。根据此算法可进行最大值滤波、中值滤波等统计排序滤波处理,提高了处理速度。经过仿真试验,与传统的统计排序滤波相比,该快速统计排序滤波算法的实时性好,可实现性强。
关键词:图像处理 排序 滤波 FPGA
中图分类号:TP911.73 文献标识码:A 文章编号:1007-9416(2016)06-0171-03
1 引言
由于图像采集、传输等过程中产生了各种噪声,图像的质量变差。要消除这些图像噪声,首先需要对图像进行预处理,为后续图像处理、运动目标检测、运动目标跟踪等奠定良好的基础。但是传统硬件处理速度慢,难以满足系统的实时性要求,采用大规模可编程逻辑器件FPGA,可实现复杂的数字逻辑系统设计,在实时性处理要求高的场合具有独特优势。
统计排序滤波(OSF)在图像预处理过程中一种非线性空间滤波方式,既可以消除随机噪声和脉冲干扰,又可以很大程度的保留图像的边缘信息,在图像平滑和数据分析处理等多个领域中得到广泛的应用。统计排序滤波中最常见的例子是中值滤波,另外常用的还有最大值滤波和最小值滤波等。
2 图像统计排序滤波原理
2.1 传统的统计排序滤波算法
统计排序滤波器响应基于图像滤波器包围的图像区域中像素的排序,然后用统计排序结果决定的值代替中心像素的值。以统计排序滤波器中最常见的中值滤波为例,它是将某像素邻域内的像素灰度从大到小排序的中间值代替该像素的值。传统的中值滤波定义如下:
G(x,y)=median{F(s,t)}
其中,G(x,y) 为输出像素灰度值,F(s,t)为邻域内像素的灰度值。传统的中值滤波算法需要对邻域内的所有像素进行排序,跟据排序结果输出相应灰度值。例如,像素值为34的5×5邻域内有一系列像素值(10,11,12,13,14,20,21,22,23,24,31,30,34,33,32,40,41,42,43,44,50,51,52,53,54),对这些值排序后为(10,11,12,13,14,20,21,22,23,24,30,31,32,33,34,40,41,42,43,44,50,51,52,53,54),那么其中值就是32,中值滤波后就用32代替原像素值34。
传统的统计排序滤波多采用软件方式通过冒泡法实现数据排序,时间复杂度为n(n-1)/2,算法执行过程需要大量的处理时间,很难满足实时性要求。
2.2 快速排序滤波算法
冒泡排序是以两两之间的串行比较为基础,进行数据排序。本方案也是以两两之间的比较为基础,但采用同时并行比较得出排序结果的方式进行排序。这种数据同时比较的排序方法可称为并行全比较排序法。
进行全比较排序时,待排序的数据,每两个数进行比较后,都会得到一个比较结果。可将比较的结果定义输出为0或1。然后对比较结果进行相加,即可得到该数在序列中的排序值。由于所有数的两两之间的比较都在硬件内同时进行,因此只需一个FPGA时钟的时间即可得到两个相邻数据的比较结果,再加上各数比较结果的和的计算时间和排序的处理时间,即4个FPGA时钟实现了数字序列的排序。
3 统计排序滤波器设计实现
图像快速统计排序滤波器主要有2部分组成:滤波窗口生成模块、统计算法模块。
3.1 滤波窗口生成模块设计
对图像的中值滤波首先要生成5×5的滤波窗口,为了使5×5模板中的5行5列共25个数据能够在同一时刻同时输出,便于后续算法进行流水线处理。5×5窗口模板由五组寄存器和四个FIFO组成,滤波窗口生成模块实现了数据的串入并出,在FPGA中定义五组25个寄存器,寄存器中存储的数据分别为dat11、dat12、dat13、dat14、dat15,dat21、dat22、dat23、dat24、dat25,dat31、dat32、dat33、dat34、dat35,dat41、dat42、dat43、dat44、dat 45,dat 51、dat52、dat53、dat54、dat55。其硬件实现结构如图1所示:在进行统计滤波时,先从数据端口读入四行图像数据保存在寄存器和FIFO中,在第五行数据到来后,从第五个数据开始滤波,从数据端口不断读入数据,第一个作统计滤波的像素数据为第三行的第三个数据,此时图像输入端到来的数据为第五行的第五个数据。
3.2 统计滤波算法模块设计
本文采用5×5滤波窗口,一次采集5×5邻域内25个数。对这25个数进行并行排序处理,并行排序采用基于FPGA的全比较排序方式,在4个时钟周期内即可实现排序结果,其中包括三个过程,第一个时钟周期内,实现所有数据的并行比较结果,第二个周期,实现数据排序;第三个周期,实现滤波算法。在并行排序处理结束后,根据得出排序结果,把所需要的值输出。若为中值滤波,则把25个数的排序第13的值输出;若为最大值滤波,则把排序第1的值输出。如图2所示。
4 基于FPGA实现及实际效果
排序算法在FPGA内进行,采用ALTERA公司CycloneIII系列FPGA,内部时钟周期为20ns。
在QUARTUS II平台环境下,原理图设计文件作为主文件,内部模块采用Verilog语言设计,内部主要模块包括滤波窗口生成模块和统计滤波算法模块。
工程编译完成后,对工程文件进行仿真,观察仿真结果,与实际值对照,确认算法的正确性。图3为设计仿真效果图。
图3中,in13为某点的像素值,in0~in24(包括本像素值)为该点邻域内的25个数据,采用的时钟频率50M,时钟延时约三个周期后,输出滤波结果,out2和outm分别为该像素5×5邻域内的第三大值和中值。
图4为云的原始图像和在FPGA内经过5×5中值滤波处理后的图像,前一幅为原始图像,后一幅为处理后的图像。
5 结语
本文主要介绍了图像统计滤波排序算法,先介绍了传统的统计滤波,在此基础上提出基于FPGA实现的图像统计排序滤波算法,采用并行全比较方式,对于5×5的滤波窗口,进行了仿真验证,在4个时钟周期即求出统计排序要求值,采用流水线方式,满足图像统计排序滤波处理的实时性要求。
参考文献
[1]侯发柱,彭楚武.图像中值滤波算法及其FPGA的实现.嵌入式与SOC,2011(1),69-71.
[2]胡斌,殷瑞祥.数字图像中值滤波算法的FPGA实现.微计算机,2010(4),10-11.