基于FPGA的图像预处理滤波算法

更新时间:2023-08-07 09:21:01 阅读量: 实用文档 文档下载

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

FPGA图像处理

第2卷 第5期 光 学 与 光 电 技 术 Vol. 2, No. 5 文章编号 1672-3392(2004)05-0061-04

基于FPGA的图像预处理滤波算法

尹业宏 王 涛 陈 颖

(华中科技大学光电子工程系 武汉 430074)

摘 要 论述了现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)在实时数字图像处理中的应用,同时给出了滤波算法的基本原理、系统的组成框图、VHDL程序的流程图等,图像处理的速度能满足实时性的要求。 关键词 现场可编程逻辑门阵列;VHDL;实时图像处理;并行处理 中图分类号 TN911.73 文献标识码 A

括高斯滤波和高通滤波处理。

1  前  言 

对计算机视觉、多媒体应用、通信技术等领域来说,实时的数字图像处理是其中的重点学科之一。传统的前端数字信号处理(Digital Signal Processing,DSP)算法,例如FFT、FIR、IIR滤波器,大多都是利用ASIC或者PDSP来构建的,在硬件的实现中很难满足实时性的要求。现场可编程逻辑门阵列(Field Programmable Gate Arrays,FPGA)技术在数字信号处理中的应用,将逐渐成为前端信号处理的主流。而滤波器算法在信号处理、信号检测、通信领域有着重要的作用,在实时信息处理系统中,对滤波器的性能和处理速度有着严格的要求,特别是在满足系统性能的条件下,处理速度至关重要。

本文论述了采用ALTERA公司的Stratix系列的EP1S25B672C7器件来实现实时图像预处理算法的基本原理及具体实现方法。

图1 系统框图

Fig.1 Block diagram of the system

2.1  高斯(GAUSS)滤波处理 

高斯滤波是一种低通平滑滤波,常用于模糊处理和减少噪声信号,其中模糊处理常用于预处理,即在提取目标之前去除图像中的一些细节等,这有利于高通处理。对于二维的数字图像信号,一般通过线性滤波器和非线性滤波器的模糊处理来减少强噪声信号。平滑滤波器就是用滤波掩模确定的邻域内的像素与加权值相卷积后得到的灰度均值来代替每个像素的值,这就很容易使用硬件实现。 GAUSS滤波算法克服了边界效应,因而滤波后的图像较好。其滤波的数学公式为:

g(i,j)={f(i 1,j 1)+f(i 1,j+1)+ f(i+1,j 1)+f(i+1,j+1)+

[f(i 1,j)+f(i+1,j)+f(i,j 1)+ f(i,j+1)]*2+f(i,j)*4}/16

(1)

其中,f(x,y)为原始图片中1024×1024个点的灰度值;

g(x,y)是经过Gauss滤波后

1024×1024个点的灰度值。

2  滤波算法原理 

由于CCD采集来的图像具有很强的背景噪声,因而必须先对图像进行滤波处理。采用FPGA作为图像的并行处理机来实现图像的滤波处理技术,可满足整个系统的实时性要求,其原理框图如图1所示。

根据系统的要求,对图像进行滤波处理主要包

收稿日期 2004-06-16; 修改稿日期 时间2004-08-20 作者简介 尹业宏(1979-),男。硕士研究生。研究方向:图像处理、FPGA及DSP的应用。

FPGA图像处理

62 光 学 与 光 电 技 术 第2卷

图2所示3×3的模板就是式(1)的结构图。

绍GAUSS滤波算法的FPGA实现过程。

3  算法的硬件实现 

3.1  硬件概述 

图2 3×3的滤波模块 Fig.2 Filter module of 3×3

为了满足实时性的要求以及将多种算法做成模块在FPGA中实现。选用的FPGA是ALTERA公司的Stratix系列的EP1S25B672C7芯片,它具有以下特征:

1)25660个逻辑单元(Logic Element,); 2)672个管脚,可用的I/O脚为473个; 3)944576bits的存储容量(32×18bits的M512 RAM blocks为224个、128×36bits的M4K RAM blocks为138个、4K×144bits的M-RAM blocks为2个); 4)10个DSP blocks及6个PLLs;

除了FPGA内部的存储器外,还需要把处理完的数据送到外部存储器以备后续处理,该部分主要选择IDT公司的IDT70V7339S,它的存储空间为512K×18bits,若需要存储1M数据,也可选择两片芯片进行深度扩展,使其达到1M的存储容量。因此,除了电源外,只需两三片芯片就可对图像进行预处理。

3.2  用FPGA实现图像快速处理的方法 

在一般的处理器中,将9个点的灰度值读进处理器的内部存储单元中至少需要9个时钟周期,因而可得每个点都要进行9次运算。如果不使用内部的寄存器,只读取这些数据就需要1024×1024×9=9437184个时钟周期,这将大大降低处理速度,而从CCD传输到双口RAM的数据速率为40MHZ,由上可知从双口RAM读出的数据速率就应为40×9MHZ,目前来说这几乎不大可能,因而也很难满足实时性的要求。因此,要解决速度这个瓶颈,就应考虑在大容量的处理器内部定义寄存器、FIFO等将相关的缓冲器或存储器进行存储,即采用边处理边丢弃的办法,即只对有用的数据进行保存,而丢掉无用的数据,在满足需要的同时,尽量减少处理器的内部资源。

用硬件实现滤波算法时,可采用流水线方式来实现。在进行GAUSS滤波时,从式(1)可知,在处理第n行灰度值的同时就应该将第n-1、n+1行也保存在内部存储器中,第n行处理完一个就将第

由图2所示可知,处在掩模中心位置的像素比其它的任何像素的权值都要大,因此在均值计算给定的像素显得更为重要,而远离掩模中心的其他像素点就会显得不太重要。由于对角离中心比正交方 向的相邻的像素(参数为2)更远,所以它的重 要性比与中心直接相邻的四个像素要低。将中心点加强为最高,而随着距中心点距离的增加而减少系数值,是为了减少平滑处理中的模糊,当然,也可以采用其它的权重达到相同的目的。

图2中的每个系数刚好是2的整数次幂,且所有系数之和为16,这就便于使用硬件结构的移位来实现其中的乘法运算,达到快速处理的目的。 2.2高通滤波处理 

经过GAUSS滤波抑制噪声后,再通过高通滤波滤除缓慢变化的背景信号,所采用的公式为:

φ(i,j)={32×g(i,j) [∑g(i+p,j)+

p=18

8

p= 8 1

∑g(i+p,j)+∑g(i,j+q)+

q=1

1

q= 8

∑g(i,j+q)]}/32 (2)

其中,g(i,j)是经过Gauss滤波后1024×1024个点的灰度值;φ(i,j)是原始图像经过上述两次滤 波后的值。

从式(1)可看出,如果要对某一点的灰度值进行GAUSS滤波运算,就需要对该点邻域内的上、下、左、右共9个像素点的灰度值进行乘加运算,同理可知进行高通滤波的时候也需要对其上、下、左、右共33个像素点的灰度值进行乘加运算。由于CCD传输来得图像大小为1024×1024,所以要处理的数据量大(1024×1024×12Bits),因此就需要选用大容量的处理器来实时的处理数据。从式(2)中分析可知高通滤波与GAUSS滤波基本类似,下面重点介

FPGA图像处理

第5期 尹业宏 等:图像预处理滤波算法在FPGA中的实现 63

n-1行的前一个丢弃,而在处理第n=1行时,第n行就要变成第n-1行,故需要使用缓冲器将其保存下来,同时通过PE进行流水线的并行处理,这就要求定义三个1024×16bits的FIFO来作为三行数据的缓存,再加上9个寄存器和4个PE(处理单元),实现GAUSS滤波的基本原理框图如图3所示,图4所示是GAUSS滤波模块的内部结构图。

波算法构成的4级流水线结构,即只要在40MHz时钟下工作,能够实时地进行3×3的二维图像处理算法。

因此,分析式(2)可知:对于本系统中17×17的滤波窗口所组成高通滤波算法,共由17个1024×16bits的FIFO、31个加法器、5个移位寄存器(乘法器×2)、1个减法器和1个移位寄存器(除法器)组成,也采用并行的流水线处理的结构形式。 3.3  仿真的VHDL实现 

ALTERA公司的QUARTUS3.0有着丰富的元

件库,具有通用性。按照需要,调用它固有的元器件库和编制自己的元件库,根据程序运行来实现滤波算法,图5是实现滤波算法的VHDL程序的流程框图。

图3 GAUSS滤波的基本框图

Fig.3 Block diagram of GAUSS filter

图5 VHDL的流程图 Fig.5 Flow chart of VHDL

图4 GAUSS滤波算法的硬件原理图

Fig.4 Hardware schematic diagram of GAUSS filter

algorithm

其中,Reset表示启动滤波模块的信号,data buffer表示的是从双口RAM读入数据的缓冲器,

(i,j)中的i表示列计数器,j表示行计数器。当程

序开始运行后,Reset信号处于等待启动状态,启 动后就进入数据缓冲区,同时计数器开始计数,若 i=3,j=1024时,开始进行GAUSS滤波,当

从图2和图4可知,4个PE是完全相同的,每个PE都有2个加法器和1个乘法器构成的流水线处理单元,由于移位寄存器的速度比乘法器快,故采用一个移位寄存器来代替乘法器;对于除以16的除法运算,由于16刚好是2的4次幂,在硬件中相当于右移4位,高位补零即可。因此采用移位寄存器来实现,将输出的数据向右移4位即可实现除以16的除法运算。再采用9个抽头(A00、A01……A22),可以看出只要一个时钟周期可以对点(

A11)的灰度值进行运算,对1024×1024大小的图像,所需的时钟为:1024×1024+1024×2+6=1050630个时钟,可以发现大大地降低了处理时间。整个滤

i=1024,j=1024时,说明一帧图像的GAUSS

滤波处理结束。

程序编译后,进行逻辑功能仿真,图6是仿真后的时序图,其中start控制整个一帧图像的信号,reset是复位信号,data是双口RAM的数据总线(输到FPGA的灰度值),address是输出到双口RAM的地址总线,data_cushion是数据缓冲器,start_gauss是自定义模块gausslv的启动信号,outdata是滤波后输出的数据。

FPGA图像处理

图6 仿真后输出的时序波形图

Fig.6 Output chart of sequential waveform after simulation

参考文献

4  结  论 

本文分析了基于FPGA的图像处理算法的基本原理和流水线结构的原理,同时采用模块化设计和流水线技术的思路和方法,并进行试验仿真验证,对于每帧数据量为1024×1024×12bits的数字图像进行GAUSS滤波算法的处理,在时钟频率为50MHZ的情况下,得到处理完一帧图像所需的时间为21.5ms,可以满足系统的实时性要求。

[1] 褚振勇,翁木云. FPGA设计及应用. 西安: 西安电子科技大学出版社, 2002

[2] 刘旨春, 王敬儒. 基于FPGA设计的图像增强预处理器.

光电工程, 2001, 28(3): 48~50

[3] James R Armstrong, F Gail Gray. 李宗伯, 王蓉晖 译. VHDL设计表示与综合. 北京: 机械工业出版社. 2002 [4] M Y Niamat, Prabhu. Logic BIST Architecture for FPGAs. IEEE Midwest Symposium on Circuits and Systems, 2001, 442~445

[5] H Rabah, H Mathlas. Linear array processors with multiple access modes memory for real-time image processing. Proceeding of IEEE, 2002

Implementation of Image Preprocessing Filter Algorithm in FPGA

YIN Ye-hong WANG Tao CHEN Ying

( Department of Optoelectronic Engineering, Huazhong University of Science and Technology, Wuhan 430074,

China ) Abstract This article describes the application of FPGA in real-time digital image processing,and presents the basic principle of filter method, system architecture, some VHDL programs etc. The speed of digital image processing can meet the real-time requirement.

Key words FPGA; VHDL; real-time image processing; parallel processing

收稿日期 2004-06-16; 修改稿日期 时间2004-08-20 作者简介 尹业宏(1979-),男。硕士研究生。研究方向:图像处理、FPGA及DSP的应用。

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

Top