一种图像预处理结构及典型算法的 FPGA

更新时间:2023-06-08 15:26:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一种图像预处理结构及典型算法的FPGA实现

商尔科,李健,安向京,匡政文 (国防科学技术大学,湖南 长沙 410073)

摘要:图像滤波和边缘检测等预处理算法是视觉导航系统中道路检测和车辆检测等复杂视觉处理的前提,其性能和处理时间直接影响了后续图像处理的性能及视觉系统的整体响应时间。本文给出了一种基于FPGA的流水线图像预处理结构,该结构具有良好的扩展性,并能克服因级联而产生的时序问题。基于这种结构,在FPGA中实现了典型的LoG边缘检测算法与中值滤波算法。实验表明了这种预处理结构的有效性和算法的可行性, 并能满足视觉处理的实时性要求。 关键词:现场可编程逻辑门阵列;图像预处理结构;中值滤波;边缘检测 中图分类号: TP391 文献标识码: A

An Image Pre-processing Structure and the FPGA Implement of the Typical Algorithms

SHANG Er-ke,LI Jian,AN Xiang-jing,Kuang Zheng-wen

(National University of Defense Technology, Changsha Hunan 410072, China)

Abstract: Image pre-processing such as image filtering and edge detection is an important stage in complex vision tasks, such as land mark and vehicle detection in vision navigation systems. The performance and processing time will directly affect the subsequent processing and the total response time of a vision system. This paper presents a pipelined image pre-processing structure based on FPGA. The proposed structure is scalable and can eliminate the effect of the timing problem. A typical Median Filter and a LoG edge detection algorithm are implemented in FPGA with a convolution structure based on this structure. Experiment shows that the presented structure and the typical algorithms are effective in real-time image preprocessing applications. Keywords: FPGA; Image Preprocessing Structure; Median filtering; Edge detection 1引言

基于模板滤波的图像预处理在视觉导航、机器视觉等方面都有着非常重要的作用,其性能和处理时间直接影响了后续图像处理的性能及视觉处理系统的整体响应时间。模板滤波分为线性滤波与非线性滤波两种:线性滤波是一种卷积运算,使用大小为nxm的模板掩模图片中的所有像素,其中涉及了大量的乘法与加法运算,这种卷积运算是一般图像处理系统中的实现瓶颈;非线性滤波是在模板卷积遍历整幅图像的基础上还要进行多值排序运算。

对于冯.诺依曼结构的计算机,属于单指令单数据(SISD)的计算机体系结构,实现卷积结构的线性或非线性滤波器效率都不高。由于视觉导航系统中实时性要求较高,采用什么样的结构、如何更快速有效并且稳定的实现图像预处理在视觉导航系统中就变得至关重要。

现场可编程逻辑门阵列(Field Programmable Gate Arrays,FPGA)技术由于其设计灵活性、大规模并行运算等特点,在数字信号处理领域尤其是图像处理领域被越来越广泛的使用。

本文设计了一种基于FPGA的流水线图像预处理结构,能够实时实现图像预处理。该结构具有良好的扩展性,并能克服因级联而产生的时序问题。基于这种结构,在FPGA上设计并实现了典型的预处理算法边缘检测和中值滤波算法。 2 一种流水线图像预处理结构

图像预处理有着数据密集度高、数据吞吐量大、运算规整以及可并行度高等特点。同时预处理也是一般图像处理系统或视觉处理系统的瓶颈。事实上,一般的图像预处理的整个流程可以拆分为几个相对独立的运算模块。比如,基于卷积模板的图像预处理过程一般先进行非线性滤波如中值滤波,然后进行线性滤波如LoG算子边缘检测等。这些模块涉及了大量的乘法与加法运算,运算量很大。因此,对于一个图像预处理任务,我们可以考虑将其分为几个相对独立的模块,然后在FPGA上设计流水线结构来实现图像预处理[1]。然而,当把这些预处理过程依次级联时,容易产生延时误差级联传递而导致工作时钟或者数据传输的不稳定。

本文设计了一种基于FPGA的流水线图像预处理结构:该结构可以实现流水线图像预处理,并具有良好的扩展性,而且可以改善因级联而产生的时序问题。如图1所示,把图像预处理过程中的各个模块按照一定的顺序组合,在时间上进行流水线并行处理,降低了运算时间复杂度。模块与模块之间通过添加一个异步时钟FIFO实现了时钟的解耦,使时钟与数据在流水

线过程中稳定传输。

图1 图像预处理的流水线结构

2.1 功能模块化与扩展性

当预处理被分成几个相对独立的模块之后,预处理算法的实现就可以像调用函数进行不同的组合一样方便,其扩展性

变的非常灵活。

时序解耦功能将与每个独立的模块结合在一起,做成类似IP core的模块,那么,图1的图像预处理流水线结构就可以简

化为图2的形式,这样就可以很方便的对图像预处理的任何一个模块进行添加、删除或者替换。

2.2 时序解耦的实现

在FPGA的设计中,时序是一个很关键的因素,尤其是工作在比较高的频率或者算法规模比较大的时候尤为突出,模块级联的层数和各个模块间的连线的长度都有可能影响数据传输的稳定性,从而影响整个系统的工作状态[2]。如图3所示,

clk

图3 典型的数据延时图

在全局时钟的管理下,把模块A中的数据传递到模块B中,但是在A、B之间会因为布局布线的原因存在一个物理延时,从而导致B模块时钟上升沿的时候,可能A端的数据还没有稳定到达B的数据端口,尤其是在级联了多个模块之后,这种延时的影响就会变得更加明显。

本文提出了使用一个小容量的独立时钟FIFO来解耦前后模块之间的时序关系。FIFO的特点是其读、写时钟可以设置为

独立,即允许任务级流水上的两个模块之间进行异步数据传输,这就给了用户很大的选择空间。设置FIFO的读写时钟为独立,写时钟与前一个模块的工作时钟同步,读时钟与后一个模块的工作时钟同步,这样就把流水线上前后两个模块之间的时序关联性分开,而且数据延时误差将在FIFO这一环节被消除,不再逐级累加。

实验表明,如果没有异步FIFO进行时序解耦,级联了4个中值滤波模块之后出来的图像时序上已经不再稳定(实验工作

时钟为33MHz,全局时钟附加了周期约束),出现了图像数据错误现象,而采用了去耦环节之后,在同样的实验条件下级联8个以上都不会因为时序不稳定而出现图像数据不稳定的现象。 3 预处理中的典型算法实现

基于模板滤波的图像预处理可以分为线性模板滤波和非线性模板滤波两种,基于线性模板滤波的图像预处理典型算法有LoG边缘检测算法等,基于非线性模板滤波的图像预处理算法有中值滤波等。 3.1 基于FPGA的LoG边缘检测算法实现

边缘检测算法有很多,如Sobel算法、Robert算法、LoG算法等,这些算法有一个共同的特点:都是基于nxn的模板卷积运算。

本文在FPGA上使用3x3、3x5、5x3和5x5等不同尺寸的模板设计并实现了如Sobel、LoG等各类线性滤波器,但是其采用的卷积结构和基本原理是一样的。以3x3模板的LoG算法在FPGA中的硬件实现为例。

本文采用的LoG算子如下:

0 1 0

本文采用的窗口为:

1

41

0 1 0

A1A2A3

B1B2B3 C1C2C3

LoG算法在FPGA中通过采用了九个D触发器和两个行移位寄存器(使用BlockRam)来实现,只需要缓存图像的两行加两个数据,当图像第三行的第三个数据进入FPGA后就开始进行LoG运算,当最后一行结束时边缘检测结束,因此只是时延了2*行宽+2个时钟周期。此结构对于采用卷积模板运算的算法具有通用性。用硬件描述语言VHDL编写LoG的算法的核心代码如下:

sumX<= B2(7 downto 0) & "00"; sumY <=B1 + A2 + C2 + B3;

if conv_integer(sumX) - conv_integer(sumY)> threshold then else result_out<=(others=>'0'); result_out<= (others=>'1');

在算法的实现过程中,采用向左移两位的方法来代替x4的操作,提高了算法运算的效率。 3.2 基于FPGA的中值滤波算法实现

中值滤波(Median Filtering) 是基于排序统计理论的一种能有效抑制椒盐噪声的非线性信号处理技术。其核心运算是利用一个含有奇数点的滑动窗口,对窗口中的数据进行排序。如果有一个亮点(暗点) 的噪声,由于噪声点的值与内容点的值会有较大的差距,噪声点就会在排序过程中被排在数据序列的最右侧或者是最左侧。因此,最终选择的数据序列中间位置上的值一般不是噪声点的值, 便可以达到抑制噪声的目的[3]。

2

中值滤波的核心是排序,以3x3的窗口为例,9个数的排序有9!种可能,至少需要做8次比较,最多需要做C9次两两数

据的比较,计算量非常巨大。本文充分利用了FPGA的并行性工作特点,采用原理图的方式设计了一个三位数据排序的功能模块,并通过有选择的数据排序,实现了在一个时钟周期内得到9个数的中值的算法。

卷积结构的窗口如下:

A1A2A3 B1B2B3 C1C2C3

具体算法如下[4]:首先分别对每一行的三个像素分别做一次排序运算,使三个像素按大小排序:

[maxA medA minA]=MED(A1,A2,A3)[maxB medB minB]=MED(B1,B2,B3) [maxC medC minC]=MED(C1,C2,C3)然后在得到的三个最大值中取最小值:

max=MIN(maxA,maxB,maxC);

在得到三个最小值中取最大值:

min=MAX(minA,minB,minC);

在三个中间值中取中间值:

med=MED(medA,medB,medC);

最后对max med min 三个数进行比较取中间值得到结果:result=MED(max,med,min);

在FPGA的硬件实现过程中,直接采用原理图来搭建中值滤波的算法。首先构造了一个三个数据排序的三值排序器

compare_3模块,三个数排序共有6种可能,总共有6种情况,所以通过查找表就能唯一的确定每一种情况。

其次,利用构造好的三值排序器compare_3,根据文献[4]的中值排序算法,就可以实现在1个时钟周期对9个数据的排序找中值的操作。 4 实验结果与分析

本设计采用了Xilinx公司的Vertex2系列100万门FPGA,使用的软件是ISE 8.2版本。本实验是在使用FPGA实现摄像机数据采集的基础上实现的,工作频率为33MHz,图像大小为400x762的8位灰度图,图4abcde分别为图像原图,原图的局部放大效果图,中值滤波效果图,中值滤波局部放大效果图和LoG

算法边缘增强后的效果图。

a b c d e

图4 实验效果图

时间以及本实验的算法与DSP和Matlab在算法效率上做了一些横向比较情表1列出了各个算法在FPGA中所消耗的资源、

况,中值滤波和LoG算法在FPGA中的处理时间是指其延迟的时间,比如中值滤波的时间是指数据采集加上中值滤波所需要的时间减去单独做数据采集时所需要的时间。对比用的DSP为Ti公司提供的专门用于图像处理的C6414,它的工作频率为

600MHz,可以支持八个运算单元并行工作。Ti公司针对自己的产品专门设计并优化了用于图像处理的汇编级函数库,其中就有3x3卷积和中值滤波函数,实验中的数据即是采用优化了的图像处理函数包所得[5]。Matlab实验参数的条件:使用它自带的库函数,运行在4核的工作站,工作频率为2.33GHz,4G内存。

表1 资源与效率比较表

数据采集 数据采集+中值滤波数据采集+LoG算法数据采集+中值滤波+LoG算法

时间(ms) 9.24 9.28 253

558

9.28 404 383 2 144062

9.32 785 663 4 282729

Flip Flop 239 444 源(BlockRAM 0 2 单位Total equivalent 5538 148339 :个gate count for design FPGA DSP 时间(ms) 中值滤波

Total LUTs

MATLAB 78.1 265.6

0.04 1.14 0.04 0.59

LoG算子 5 结束语

本文设计了一种基于FPGA的流水线图像预处理结构,该结构具有较好的扩展性,能够改善因级联而产生的时序问题。

采用一种卷积结构实现了图像预处理中的两个比较典型的算法:基于LoG算子的边缘检测算法和中值滤波算法。实验证明了本文设计的流水线结构能够满足预处理任务的需求,基于该结构的算法具有良好的实时性,能够满足视觉处理的实时性要求。

本文作者创新点:提出了一种基于FPGA的流水线图像预处理结构,该结构不仅具有良好的扩展性,而且各个相对独立

的运算模块之间通过流水线结构,从而在时间上并行处理,极大的提高了工作效率,最重要的是,该结构能够很好的改善因多级运算模块级联而产生的时序问题,实验证明了该结构的有效性和实时性。 参考文献

[1] 应骏. 实时图像处理系统体系结构研究及系统实现. 博士学位论文[D]. 杭州:浙江大学, 2000

[2] [3] [4] [5]

田耕, 徐文波, 胡彬. Xilinx ISE Design Suite 10.x FPGA开发指南——逻辑设计篇[M]. 北京:人民邮电出版社,2008. 陈镇. 中值滤波器的FPGA实现方案. 红外[J]. 2005,10:17 - 21.

万海军, 何东健, 徐尚中. 基于FPGA的图像中值滤波算法硬件实现. 微计算机信息[J]. 2008.24:7-3,p280-282 任丽香,马淑芬. TMS320C6000系列DSPs的原理与应用[M]. 北京:电子工业出版社,2000

作者简介:

商尔科:(1984- ),男,汉族,浙江嵊州人,在读硕士,主要从事图像处理嵌入式系统开发等方面的研究。

Biography: Shang Er-ke, male, born in October, 1984. Han, graduate student of image processing, the main work is image processing and embedded system.

李健:(1981- ),男,汉族,河南周口人,在读博士,主要研究领域为模式识别与智能系统,图像处理,嵌入式DSP及FPGA的硬件实现等方面的研究。

安向京:(1973- ),男,汉族,新疆库尔勒人,副教授,硕士生导师,主要从事地面移动机器人,视觉导航等方面的研究。

匡政文:(1974- ),男,汉族,湖南益阳人,工程师。

通讯地址:(410073 国防科学技术大学自动化研究所334室 商尔科)

Email:erke1984@

本文来源:https://www.bwwdw.com/article/94f1.html

Top