基于FPGA数字图像处理算法研究
2014-10-16吴明美王妍王晴刘树昌
吴明美++王妍++王晴++刘树昌
摘 要:由于数字图像的广泛应用,人们对于图像处理的实时性要求也越来越高,仅依靠软件方法实现的图像处理已经无法满足要求,因此,FPGA被越来越多的应用于图像处理中。本文对图像处理的算法进行了分析,并利用Matlab软件进行了仿真。并将合适的算法通过Verilog语言进行实现,再利用quartusII软件进行仿真,最后应用于实际的图像处理系统中。
关键词:图像处理 FPGA Matlab
中图分类号:TP391.41 文献标识码:A 文章编号:1672-3791(2014)01(b)-0005-02
The Research of FPGA-based Digital Image Processing Algorithms
Wu Mingmei Wang Yan Wang Qing Liu Shuchang
(College of Electrical and Information Engineering,Changchun University of Science and Technology,Changchun Jilin,130022,China)
Abstract:Due to the extensive application of digital image, the requirements of real-time image processing are also getting higher and higher,the image processing which only to rely on software implementation has been unable to meet the requirements, so FPGA is increasingly used in image processing. In this paper, image processing algorithms are analyzed and simulated through Matlab software.And the appropriate algorithm implemented by verilog language, and then use quartusII simulation software, the last applied to the actual image processing system.
Key Words:Image Processing;FPGA;Matlab
在图像采集和处理过程中,由于存在噪声及干扰,使得获取的图像产生畸变等缺陷。通常采用软件算法对图像进行滤波、去噪,再进行存储和显示。由于图像处理的基本算法已经十分成熟,运算复杂性相对固定,所以在保证精度的条件下对算法进行优化十分困难。因此,对于实时性要求较高的系统,可以利用FPGA技术实现图像处理算法,大幅度提高系统处理速度。针对上述问题,本文通过Matlab进行算法对比和分析,选择合适的处理算法,用硬件实现算法的设计,完成图像的基本处理,实现了数字图像的滤波、去噪。
1 系统总体设计
基于FPGA的数字图像处理系统由数字CCD相机、A/D转换芯片、数据缓存模块、图像处理模块、整体控制模块、D/A转换芯片和图像显示等部分组成,其中数据缓存模块、图像处理模块和整体控制模块在FPGA中实现。(如图1)
本文设计方案是以FPGA图像处理模块为核心,通过它完成图像平滑、滤波等基本操作。由CCD相机对目标成像,经A/D转换芯片将获得的模拟图像信号转化为数字信号,而后送入FPGA中进行滤波去噪处理,在FPGA中完成图像处理工作后,经由D/A转换芯片转化为模拟信号为后续的图像显示做准备。
系统所选CCD相机输出模式为PAL(Phase Alteration Line)制式,A/D转换芯片型号是SAA7113,SAA7113是飞利浦公司视频解码系列芯片的一种,主要作用是把输入的模拟视频信号解码成标准的“VPO”数字信号。经过转换后的数字信号可以直接通过FPGA芯片进行处理,存储过程采取乒乓存储操作,乒乓机制就是由两块SDRAM组成的接收路径,一块进行数据接收时,图像处理模块处理另一块中的数据,而不用等待当前数据接收完后再处理,这样做能够提高数据吞吐量。处理后的数字视频信号送入D/A芯片,D/A芯片型号为ADV7128,这是一款高速、10位视频数模转换芯片。经过转换后的视频信号送入显示模块进行显示。
2 基本算法分析
根据噪声服从的分布进行分类,噪声大致可以分成椒盐噪声,高斯噪声和泊松噪声3类,针对不同的噪声类别有不同的图像滤波方法。常用的滤波方法主要包括均值滤波、中值滤波、维纳滤波和自适应滤波,如针对高斯噪声最常用的是均值滤波,针对椒盐噪声最常用的是中值滤波,此外,还有其他改进滤波法等。
2.1 均值滤波方法
均值滤波方法又称为邻域平均法,是线性滤波中最常用的方法,这种方法的基本思想是对待处理的当前像素,选择一个窗口,该窗口为其近邻的若干像素组成,用窗口中所有像素的均值来代替原像素点灰度值的方法。具体可以表示如下:
(1)
其中,(x,y)为当前像素值,u(x,y)为处理后的灰度值,m为模板中包括当前像素在内的像素个数。
考虑到数据分布的平衡性,滤波窗口可以选取方形、十字形和圆形,实际滤波中,一般选择3×3或5×5的方形窗口。对于用不同尺寸的滤波器模板进行滤波操作的图像进行比较,随着所使用的滤波器尺寸的增大,消除噪声的效果得到了增强;但是,图像的细节锐化程度相应降低,图像变得模糊起来。
2.2 中值滤波方法endprint
中值滤波作为一种常用的图像预处理方法,能够有效地去除噪声,平滑图像,与均值滤波以及其他线性滤波器相比,它能够在去噪的同时不模糊图像的边缘,较好地保持图像的清晰度。它是一种邻域运算,把邻域中的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值,中值滤波可定义为:
g(x,y))=median{f(x-i,y-j}(i,j)∈W (2)
中值滤波与均值滤波的不同之处在于,均值滤波器的输出是由平均值决定的,而中值滤波器的输出像素是由邻域图像的中间值决定的,所以中值滤波对极限像素值远不如平均值那么敏感,从而可以消除孤立的噪声点,又可以让图像产生较少的模糊。
通过以下对比图,可以看到,中值滤波不像均值滤波器那样是图像的边界模糊,它在衰减噪声的同时,使图像的细节清楚。(如图2)
2.3 直方图均衡化
直方图均衡化是常用的灰度数字图像增强方法。该方法在处理时只需要将当前的灰度分布重新均衡地分布于整个灰度区间即可,其通用性较好,对任意图像均可获得不错的处理效果。
在某些应用中,可能只需要对图像的某个部分进行均衡化,为此,可以用对比度自适应函数实现自适应直方图均衡化。(如图3)
3 中值滤波算法的FPGA实现
由上章可以看出,模板中值滤波器具有较好的滤波效果,因此,接下来我们主要来介绍一下3×3模板中值滤波器的实现方法。
3.1 3×3模板的实现
由上述各种算法的对比我们可以看出利用3×3模板实现的图像滤波、边缘检测和图像锐化的效果较好。本文首先介绍一下3×3模板的实现方法。本设计中,其主要由几个模块组成,分别是data_gen,wr_ctr_mdf,line_buffer和rd_ctr_mdf模块。
其具体过程是输入的数据先进入到data_gen模块中,该模块用来将数据转换为3行3列的形式,并形成extra_vde信号,该信号控制下一级wr_ctr_mdf模块,当超过该行所需要的数据时,该模块产生写控制信号,将输入的数据送入line_buffer中缓存,然后当line_buffer内存入的数据为两行两列时,读控制模块能产生读控制信号,从line_buffer内将数据读出,这时3行3列的数据同时输出,产生3×3模块,送入到下级进行处理。
3.2 中值滤波器的实现
中值滤波器能够有效地去除噪声,平滑图像,与均值滤波以及其他线性滤波器相比,它能够在去噪的同时不模糊图像的边缘,较好地保持图像的清晰度。通过FPGA可以实现中值滤波模块,它是对3×3方形窗生成的9个像素值输出数据进行中值滤波处理的模块。正常情况下,经过两两对比挑选出中值要经过30次的比较,也就是对3×3窗生成模块的9个数据输出要经过9个时钟周期的延迟才能得到中值滤波处理后的中值输出。因此为了提高处理速度,减少资源浪费,提出了一种快速中值滤波算法,只需进行19次比较就能求得中值,大大加快了处理的速度。快速中值滤波算法流程图如图4所示。
具体过程为:先通过A1、A2、A3筛选出各自单元输入的三个数据的最大值、中值和最小值,然后将其各自输入到B1、B2、B3中,再输出中值到C内,经过比较,挑选出中值,这就是输入9个数据的中值,这样只需进行19次比较就可的到中值。
4 结论
本文重点讨论了图像处理中常用的几种算法,并利用Matlab对各种算法进行了仿真,通过仿真前后图像的对比,可以看出基于模板的中值滤波的处理效果较好,因此利用FPGA设计了基于3×3窗口的中值滤波算法。(如图5)
由上图可以看出,图像质量有了明显的提升,因此,3×3中值滤波算法对滤除噪声具有较好的效果。
参考文献
[1] 黄艳君.基于FPGA的数字图像预处理算法研究[D].南京理工大学,2009:5-10.
[2] 吴艳.基于FPGA的数字图像处理基本算法研究与实现[D].哈尔滨工业大学,2008:34-43.
[3] 赵海丽,刘艳霞,陈智强,等.数字视频图像传输中基于FPGA的图像去噪方法[J].吉林大学学报:信息科学版,2011(10):2-3.
[4] 王彬.MATLAB数字信号处理[M].北京:机械工业出版社,2010:53-125
[5] 夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2008:20-120.
[6] 高展宏,王强.多媒体处理FPGA实现[M].北京:电子工业出版社,2010:180-228.endprint
中值滤波作为一种常用的图像预处理方法,能够有效地去除噪声,平滑图像,与均值滤波以及其他线性滤波器相比,它能够在去噪的同时不模糊图像的边缘,较好地保持图像的清晰度。它是一种邻域运算,把邻域中的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值,中值滤波可定义为:
g(x,y))=median{f(x-i,y-j}(i,j)∈W (2)
中值滤波与均值滤波的不同之处在于,均值滤波器的输出是由平均值决定的,而中值滤波器的输出像素是由邻域图像的中间值决定的,所以中值滤波对极限像素值远不如平均值那么敏感,从而可以消除孤立的噪声点,又可以让图像产生较少的模糊。
通过以下对比图,可以看到,中值滤波不像均值滤波器那样是图像的边界模糊,它在衰减噪声的同时,使图像的细节清楚。(如图2)
2.3 直方图均衡化
直方图均衡化是常用的灰度数字图像增强方法。该方法在处理时只需要将当前的灰度分布重新均衡地分布于整个灰度区间即可,其通用性较好,对任意图像均可获得不错的处理效果。
在某些应用中,可能只需要对图像的某个部分进行均衡化,为此,可以用对比度自适应函数实现自适应直方图均衡化。(如图3)
3 中值滤波算法的FPGA实现
由上章可以看出,模板中值滤波器具有较好的滤波效果,因此,接下来我们主要来介绍一下3×3模板中值滤波器的实现方法。
3.1 3×3模板的实现
由上述各种算法的对比我们可以看出利用3×3模板实现的图像滤波、边缘检测和图像锐化的效果较好。本文首先介绍一下3×3模板的实现方法。本设计中,其主要由几个模块组成,分别是data_gen,wr_ctr_mdf,line_buffer和rd_ctr_mdf模块。
其具体过程是输入的数据先进入到data_gen模块中,该模块用来将数据转换为3行3列的形式,并形成extra_vde信号,该信号控制下一级wr_ctr_mdf模块,当超过该行所需要的数据时,该模块产生写控制信号,将输入的数据送入line_buffer中缓存,然后当line_buffer内存入的数据为两行两列时,读控制模块能产生读控制信号,从line_buffer内将数据读出,这时3行3列的数据同时输出,产生3×3模块,送入到下级进行处理。
3.2 中值滤波器的实现
中值滤波器能够有效地去除噪声,平滑图像,与均值滤波以及其他线性滤波器相比,它能够在去噪的同时不模糊图像的边缘,较好地保持图像的清晰度。通过FPGA可以实现中值滤波模块,它是对3×3方形窗生成的9个像素值输出数据进行中值滤波处理的模块。正常情况下,经过两两对比挑选出中值要经过30次的比较,也就是对3×3窗生成模块的9个数据输出要经过9个时钟周期的延迟才能得到中值滤波处理后的中值输出。因此为了提高处理速度,减少资源浪费,提出了一种快速中值滤波算法,只需进行19次比较就能求得中值,大大加快了处理的速度。快速中值滤波算法流程图如图4所示。
具体过程为:先通过A1、A2、A3筛选出各自单元输入的三个数据的最大值、中值和最小值,然后将其各自输入到B1、B2、B3中,再输出中值到C内,经过比较,挑选出中值,这就是输入9个数据的中值,这样只需进行19次比较就可的到中值。
4 结论
本文重点讨论了图像处理中常用的几种算法,并利用Matlab对各种算法进行了仿真,通过仿真前后图像的对比,可以看出基于模板的中值滤波的处理效果较好,因此利用FPGA设计了基于3×3窗口的中值滤波算法。(如图5)
由上图可以看出,图像质量有了明显的提升,因此,3×3中值滤波算法对滤除噪声具有较好的效果。
参考文献
[1] 黄艳君.基于FPGA的数字图像预处理算法研究[D].南京理工大学,2009:5-10.
[2] 吴艳.基于FPGA的数字图像处理基本算法研究与实现[D].哈尔滨工业大学,2008:34-43.
[3] 赵海丽,刘艳霞,陈智强,等.数字视频图像传输中基于FPGA的图像去噪方法[J].吉林大学学报:信息科学版,2011(10):2-3.
[4] 王彬.MATLAB数字信号处理[M].北京:机械工业出版社,2010:53-125
[5] 夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2008:20-120.
[6] 高展宏,王强.多媒体处理FPGA实现[M].北京:电子工业出版社,2010:180-228.endprint
中值滤波作为一种常用的图像预处理方法,能够有效地去除噪声,平滑图像,与均值滤波以及其他线性滤波器相比,它能够在去噪的同时不模糊图像的边缘,较好地保持图像的清晰度。它是一种邻域运算,把邻域中的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值,中值滤波可定义为:
g(x,y))=median{f(x-i,y-j}(i,j)∈W (2)
中值滤波与均值滤波的不同之处在于,均值滤波器的输出是由平均值决定的,而中值滤波器的输出像素是由邻域图像的中间值决定的,所以中值滤波对极限像素值远不如平均值那么敏感,从而可以消除孤立的噪声点,又可以让图像产生较少的模糊。
通过以下对比图,可以看到,中值滤波不像均值滤波器那样是图像的边界模糊,它在衰减噪声的同时,使图像的细节清楚。(如图2)
2.3 直方图均衡化
直方图均衡化是常用的灰度数字图像增强方法。该方法在处理时只需要将当前的灰度分布重新均衡地分布于整个灰度区间即可,其通用性较好,对任意图像均可获得不错的处理效果。
在某些应用中,可能只需要对图像的某个部分进行均衡化,为此,可以用对比度自适应函数实现自适应直方图均衡化。(如图3)
3 中值滤波算法的FPGA实现
由上章可以看出,模板中值滤波器具有较好的滤波效果,因此,接下来我们主要来介绍一下3×3模板中值滤波器的实现方法。
3.1 3×3模板的实现
由上述各种算法的对比我们可以看出利用3×3模板实现的图像滤波、边缘检测和图像锐化的效果较好。本文首先介绍一下3×3模板的实现方法。本设计中,其主要由几个模块组成,分别是data_gen,wr_ctr_mdf,line_buffer和rd_ctr_mdf模块。
其具体过程是输入的数据先进入到data_gen模块中,该模块用来将数据转换为3行3列的形式,并形成extra_vde信号,该信号控制下一级wr_ctr_mdf模块,当超过该行所需要的数据时,该模块产生写控制信号,将输入的数据送入line_buffer中缓存,然后当line_buffer内存入的数据为两行两列时,读控制模块能产生读控制信号,从line_buffer内将数据读出,这时3行3列的数据同时输出,产生3×3模块,送入到下级进行处理。
3.2 中值滤波器的实现
中值滤波器能够有效地去除噪声,平滑图像,与均值滤波以及其他线性滤波器相比,它能够在去噪的同时不模糊图像的边缘,较好地保持图像的清晰度。通过FPGA可以实现中值滤波模块,它是对3×3方形窗生成的9个像素值输出数据进行中值滤波处理的模块。正常情况下,经过两两对比挑选出中值要经过30次的比较,也就是对3×3窗生成模块的9个数据输出要经过9个时钟周期的延迟才能得到中值滤波处理后的中值输出。因此为了提高处理速度,减少资源浪费,提出了一种快速中值滤波算法,只需进行19次比较就能求得中值,大大加快了处理的速度。快速中值滤波算法流程图如图4所示。
具体过程为:先通过A1、A2、A3筛选出各自单元输入的三个数据的最大值、中值和最小值,然后将其各自输入到B1、B2、B3中,再输出中值到C内,经过比较,挑选出中值,这就是输入9个数据的中值,这样只需进行19次比较就可的到中值。
4 结论
本文重点讨论了图像处理中常用的几种算法,并利用Matlab对各种算法进行了仿真,通过仿真前后图像的对比,可以看出基于模板的中值滤波的处理效果较好,因此利用FPGA设计了基于3×3窗口的中值滤波算法。(如图5)
由上图可以看出,图像质量有了明显的提升,因此,3×3中值滤波算法对滤除噪声具有较好的效果。
参考文献
[1] 黄艳君.基于FPGA的数字图像预处理算法研究[D].南京理工大学,2009:5-10.
[2] 吴艳.基于FPGA的数字图像处理基本算法研究与实现[D].哈尔滨工业大学,2008:34-43.
[3] 赵海丽,刘艳霞,陈智强,等.数字视频图像传输中基于FPGA的图像去噪方法[J].吉林大学学报:信息科学版,2011(10):2-3.
[4] 王彬.MATLAB数字信号处理[M].北京:机械工业出版社,2010:53-125
[5] 夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2008:20-120.
[6] 高展宏,王强.多媒体处理FPGA实现[M].北京:电子工业出版社,2010:180-228.endprint