中值滤波器在FPGA实现中的数据读取设计

2015-05-30 16:26李勇袁林
软件工程 2015年4期

李勇 袁林

摘 要:以Altera的QuartusⅡ为开发平台,在FPGA芯片中设计实现3×3窗口中值滤波器,结合选定的中值滤波算法,主要针对在进入比较单元前的数据读取部分进行优化设计,提出了构建双极随机存储器BRAM实现数据读取和构建D触发器实现数据串入并出两种数据读取设计。

关键词:FPGA;中值滤波;数据读取;BRAM;D触发器

中图分类号:TN919 文献标识码:A

Abstract:Based on the FPGA- platform for application software design and implementation QuartusⅡ made the 3×3 window median filter.The design combined with selected median filtering algorithm, mainly for the data read section before entering the compare unit to optimize the design,proposed to explain the two kinds of data read design which build a bipolar random BRAM memory data read and build data string into the D flip-flop.

Keywords:FPGA;median filtering;data read;BRAM;D flip-flop

1 引言(Introduction)

非线性对自然界的描述更接近于实物的本原,因而其处理效果更加准确[1]。中值滤波是一种非线性滤波,中值滤波器在应用于去除脉冲噪声方面具有独特的优势,中值滤波算法也在向运算次数更少、运算时间更短、更高效的目标迈进。FPGA也正因为它的高集成,高性能,高灵活性,低功耗和低价格被广泛应用在科技产品的开发上。本文基于Cyclone EP1C6Q240C8的FPGA硬件平台,应用Altera公司的Quartus II开发软件来对滤波器设计实现,主要结合改进的中值滤波算法研究在比较单元处理之前图像数据读取的微观设计。

2 中值滤波器的中值滤波算法(The median filtering algorithm of median filter)

传统中值滤波算法的实现是对窗口内像素点值进行全排序,排序的过程是对像素作比较和交换的过程,比较次数是影响排序速度的重要原因[2]。例如对包含m(奇数)个像素数的窗口数列需要经过m(m-1)/2次比较,而第(m+1)/2比较的得值即为中值,整个过程的时间复杂度是O(m2)。假若处理一副352×288的灰度图像,采用3×3方形窗口得出一个中值需比较36次,这对于将要处理的101376个像素值来讲从运算量和处理时间方面都将是很大的负担。

改进的中值滤波算法有三步:第一步,对3×3窗口每行采取由小到大比较排列,因每行进行三次比较,共需比较九次,记录出每行的小、中、大值;第二步,再对各列采取纵向由小到大比较排列,也需比较九次得出行最小值中的最大值,行中间值中的中值,和行最大值中的最小值;第三步,对前一步得出的三个值比较得出的中间值就是整个窗口数列的中值。

如表1所示结果,实验在windows环境下(intel i5-3470 4G内存)采用Borland C++ Builder6.0编程验证常规中值滤波算法和改进的中值滤波算法,改进中值滤波算法在处理速度上较常规中值滤波算法具有较大优势。本文中值滤波器根据实时性要求等综合考虑采取改进的中值滤波算法,有利于精简比较次数,减少处理时间和资源消耗。

3 基于FPGA的中值滤波器的设计综述(Summary of median filter design based on FPGA)

首先编制中值滤波器的HDL或原理图输入,并使用行为级仿真及时纠错;其次,综合分析成本、处理速度、实现效果和功耗等因素生成数字逻辑连接;再次,进行逻辑布线,进一步使用Modelsim进行仿真修正,若仍无法修改的则可返回上一步再次综合,反复修正直至得出较满意的布局布线;然后,时序分析,为各器件分配适合的时序,采用时序仿真,并反复校正已达到逼近时序的理想设置,确保时序分配不冲突;最后,以PS或JTAG方式把bit文件载入FPGA芯片。中值滤波器的工作分为三大块,第一部分为读取数据,读入数据到3×3滑动窗口中,再将数据分别放入寄存器中,这部分涉及到BRAM、D触发器、计数器和SRAM等逻辑部件;第二部分为比较单元,主要有行比较、列比较和对角线比较,它主要涉及三点比较器、触发器等;第三部分为记录中值并输出。

4 中值滤波器在FPGA实现中的数据读取设计 (The design of median filter data read in FPGA implementations)

4.1 构建双极随机存储器BRAM实现数据读取

因滤波器使用3×3窗口,所以在EP1C6Q240C8板上扩展构建32×25344的大BRAM一块(将在VGA显示器上呈现一帧352×288像素大小的图像)和8×352的小BRAM三块。从大BRAM到小BRAM每次仅读出1个数据,待所有数据都读完会消耗大量时序,因此为实现高效利用,将数据在小BRAM中寄于蓄势待发的状态,即第一行BRAM1、第二行BRAM2的数据全部读入,同时第三行BRAM3的前两个数据输入的状态。只要BRAM3的第三个数据一到位,立刻使3×3窗口“充满”,使寄存器的九个数据同时送入数据比较单元。类推下去,当BRAM3的第4个数据读入时,此时已“充满”的窗口等同于向右侧滑动了一个数据单位。以此类推,BRAM3读满以后再次从BRAM1开始读入数据,用新的数据覆盖旧数据,BRAM1的前两个数据输入后即进入准备状态。当BRAM1的第三个数据一到位,立刻使3×3窗口“充满”,使寄存器的九个数据同时送入数据比较单元。三个小BRAM送左往右同一位置数据纵向合为一个数据组送入对应顺序的三个寄存器中,为了使控制器清楚工作的三个寄存器的位置,可以设置计数器进行0、1、2的循环将九个寄存器的三组进行对应。如此反复,周而复始。

4.2 构建D触发器实现数据从SRAM的串入并出

SRAM具有处理时间快、工作效率高等特点,在与FPGA配设时存取了待处理的图像数据。FPGA因一个时钟周期仅读取一个数据,采用串入并出不失为一副良策。如图3所示,设计了12个D触发器与一个三进制计数器,计数器可以0—2计数,当记录读取了三个值后D触发器工作,相当于移位寄存器第一列推入第二列,层层递推,以致第二、三、四列D触发器形成的3×3窗口的九个数据输出,进入比较单元。另当有新的一列三个数据输入后,相当于窗口靠右滑动了一个单位。这种数据串行输入、并行输出有助于缩短数据的处理时间,特别能够满足实时图像的处理的需要。

5 结论(Conclusion)

基于FPGA实现对中值滤波器的设计开发需要考虑算法、软硬件资源条件等复杂因素,结合工程实践情况在对比较单元前的数据读取部分,因地制宜提出了构建双极随机存储器BRAM实现数据读取和构建D触发器实现数据串入并出两种数据读取设计,数据读取的质量和速度都较为理想。本设计较为实用,适宜相互学习、交流和研究。

参考文献(References)

[1] 程卓.基于采样的非线性滤波方法综述[J].软件工程师,2010(6):45-47.

[2] 李新春,赵璐.基于中值滤波算法滤波器的FPGA实现[J].计算机系统应用,2011,20(9):82-83.

[3] Suil K P,Mahapatra K K.A lossless image compress techniqueusing simple arithmetic operations and its FPGA implementation[C].ICIT 2006 IEEE International conference,America,2006:2211-2216.

作者简介:

李 勇(1982-),男,硕士,讲师,技师.研究领域:电子与通信工程.

袁 林(1978-),女,硕士,讲师,技师.研究领域:计算机应用.