1、FPGA在缘检测中的应用FPGA在边缘检测中的应用摘 要:目前,FPGA以其算法硬件处理速度快、可编程、可重配置等特性,非常适合图像处理系统。本文针对边缘检测算法实现方法的研究,利用FPGA这一平台进行了实现。文章分析了FPGA在边缘检测中的应用,主要是Sobel边缘检测算子、Prewitt边缘检测算子。在论文中,根据FPGA的并行流水线性,对Sobel、Prewitt边缘检测算子分别进行了FPGA设计与实现,并进行了仿真,并且利用两种边缘检测算子对图像进行了处理比较。最后,从时间和效果与软件处理的结果方面,对两种边缘检测算子进行了比较。关键词 数字图像处理 Sobel边缘检测法 Prewit
2、t边缘检测算法 现场可编程逻辑门阵列(FPGA)0 引言所谓的数字图像处理技术,就是我们利用计算机对图像进行加工处理,并从中获取一些对我们来说有用的信息。在现实生活中,我们也亲身体会到我们是通过图像获取视觉信息的。伴随着计算机信息技术、集成电路技术的飞速发展,数字图像处理技术也得到了很大的发展,并且也出现了许多与数字图像处理技术相关的新理论、新技术、新设备。这些新理论、新技术、新技术在工业生产、科学研究、医疗卫生等领域得到了广泛应用,也对人类社会的发展以及人类生活水平的提高做出了巨大的贡献。我们知道边缘一般是指图像灰度变化率最大的位置,图像的边缘是图像最重要的特征,它是由于图像局部特征的不连续
3、形成的。边缘的表现形式有图像灰度级与纹理结构的突变、彩色变化等等,在图像的边缘信息里含有许多对图像分析特别重要的特征信息。在利用计算机进行数字图像处理的过程中,为了使图像的轮廓更加突出,容易辨别,而采取的一种图像处理方法就是边缘检测,有时也称其为边缘增强。在图像处理的过程中,边缘检测主要运用于图像中的目标与图像的背景、图像中的不同区域之间、图像中的一个目标与另一个目标之间,是人们描述、识别目标以及解释图像的一个非常重要的参数。边缘包含了图像丰富的信息,它是完实现图像分割、图像配准、图像分类以及图像识别的重要保障,如果边缘检测能够成功,那么图像分析就会变得很方便很简单,并且其精度也会得到相应的提
4、高。边缘检测算子分为一阶微分算子和二阶微分算子。常见的一阶微分算子有Prewitt算子,Canny算子、Sobel算子、Roberts Cross算子,Kirsch算子,罗盘算子等等。二阶微分算子包括Laplacian算子和LOG算子等等。本文主要介绍了Prewitt边缘检测算子的原理以及基于FPGA的Prewitt边缘检测算法的实现。1边缘检测算子介绍图像的边缘是图像最基本的特征之一,边缘检测是模式识别、图像分析中非常重要部分,因此在机器人视觉、图像处理、卫星遥感技术等领域中起着很重要的作用。边缘一般是指图像灰度变化率最大的位置,含有图像中最重要的信息,因此边缘总存在于两个相邻的且具有不同灰
5、度值的区域之间。通常情况下,信号中的边缘点有两种,一种是突变点,再者就是奇异点,边缘点附近灰度的变换可以由相邻象素灰度分布的梯度反映出来。1.1 Sobel边缘检测算子索贝尔算子(Sobel Operator)是数字图像处理中的常用算子之一,主要应用于边缘检测。在技术上,它是一离散型差分算子,用来运算图像亮度函数的梯度近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量。现在假设在图像平面上有一个9个点的小区域: (1-1)现用一个二次曲面来拟合这9个点的灰度值,即用 (1-2)来近似图像灰度函数,并使均方误差 (1-3)最小。令分别为零,联立解得各系数。将二次曲面对,求偏导
6、数,得到梯度的幅值为: (1-4)它的两个卷积模板为: (1-5) (1-6)1.2 Prewitt边缘检测算子Prewitt算子是一种边缘模板算子,这种算法是利用局部差分平均方法来寻找边缘的,该算法体现了三对像素点像素值之差的平均概念。首先这些算子的模板是由理想的边缘算子图像构成的,然后依次用边缘模板去检测待检测的图像,再由与被检测区域最为相似的模板给出检测的最大值,并且用这个最大值代替算子的输出值,这样边缘像素就被检测出来了。在这里我们假设在图像平面上有一个9个点的小区域: (1-7)Prewitt算子是通过对平面上9个点进行曲面拟合进而求拟合曲面偏导数,最后再计算梯度的幅值。根据Prew
7、itt的定义可以得到Prewitt算子:(1-8)其中两个卷积为: (1-9) (1-10)2. 基于FPGA的设计思路FPGA设计流程如图2-1所示:图2-1 FPGA典型设计流2.1设计思路介绍由于sobel算子和Prewitt算子的实现思路是类似的,他们的区别只是在于算子的不同。这里我们以sobel算子为例介绍,Prewitt算子是一样的。Sobel边缘检测的算法基本原理如图2-2所示:图2-2 Sobel边缘检测算法原理图首先分别计算水平梯度和垂直梯度,然后将两个方向的梯度值结合起来,接着通过一个门限值后,最后输出二值图像。通过前面的分析可知,假设输入的像素点分别为,。那么x方向的梯度
8、和y方向的梯度分别为: (2-1)梯度结合后的梯度值G为: (2-2)门限处理函数: (2-3)其中为门限处理的阈值。综上分析Sobel算子在空间域上比较容易实现,而且可以有效的滤除图像噪声的影响,比较适合处理有害噪声较多的图像。欲在FPGA中实现Sobel边缘检测首先需要生成3*3的窗口,窗口的生成办法已经在前面中值滤波一节中做了介绍,在此不再重复介绍。此处重点介绍如何完成Sobel算子运算。Sobel算法的关键在于计算梯度值G。由前面分析可知(2-4)设计中避免使用乘法和除法运算从而减小系统的面积。其具体的算法实现框图如图2-3所示:图2-3 Sobel算法实现框图在上面框图中,表示对应的
9、像素点。主要的操作是加法操作和减法操作,其中abs为取绝对值操作。编译综合之后生成的RTL级框图如下图所示,图中最左侧的模块是3*3窗口生成模块,接着是水平梯度和垂直梯度计算模块,后面是绝对值计算模块,最后一个是梯度整合模块和阈值计算模块。图2-4 Sobel算法的RTL级原理图从上面这个图能清晰的看出Sobel的内部结构设计,而从下面这个Sobel端口图则能清楚的看出这个模块部分的输入输出关系。图2-5 Sobel算法模块的端口上图中的clk为时钟信号,rst是复位信号。median_out_flag则是输出使能信号,median_data_in是输入的像素灰度信息,其为8位无符号数,取值范
10、围是0255。输出信号包括:输出结果sobel_data。已开始输出指示信号sobel_en。x和y是从内部行计数器输出的像素点的x,y坐标。由于sobel算子和Prewitt算子的实现思路是类似的,他们的区别只是在于算子的不同。其算子形式为: (2-5)2.2 FPGA代码解释下面这个语句中:assign sobel_data = en_grads ? (abs_data = 675) ? 8d255 : 8d0) : 8d0;/设定阈值,此时为675修改标红的数据就是更改阈值。另外比较关心的是算子的实现部分该部分是在data_grads.v文件中实现的,具体代码如下所示,重点关注下标红的部
11、分:/产生Gx横向梯度always(posedge clk or negedge rst)begin if(!rst) begin data_x1 = 0; data_x2 = 0; end else begin if(filter_req) begin data_x1 = P9+P8+P8+P7;(Prewitt算子此处是P9+P8 +P7) data_x2 = P1+P2+P2+P3; (Prewitt算子此处是P1+P2 +P3) end else begin data_x1 = 0; data_x2 = 0; end endendalways(posedge clk or negedg
12、e rst)begin if(!rst) begin Gx = 0; end else begin if(flag_reg) Gx = data_x1-data_x2; else Gx = 0; endend/产生Gy纵向梯度always(posedge clk or negedge rst)begin if(!rst) begin data_y1 = 0; data_y2 = 0; end else begin if(filter_req) begin data_y1 = P9+P6+P6+P3; (Prewitt算子此处是P9+P6 +P3) data_y2 = P1+P4+P4+P7;
13、(Prewitt算子此处是P1+P4 +P7) end else begin data_y1 = 0; data_y2 = 0; end endendalways(posedge clk or negedge rst)begin if(!rst) begin Gy = 0; end else begin if(flag_reg) Gy = data_y1-data_y2; else Gy = 0; end end3. 仿真结果以及分析仿真结果如下图所示:图3-1 算法的仿真结果图3-2算法的仿真结果细节图3-1是仿真的整体图,可以看到在这个图中clk时钟信号已经看不清楚,图3-2能清楚的看到s
14、obel_data(Prewitt边缘检测结果数据)的输出变化。图3-2是将仿真图放大之后的效果,在这个图中能看出clk时钟信号和图像信息输入数据median_data_in的变化。可以看到出sobel_data只有两种状态0x00和0xff。当前点如果是在边缘上则通过系统之后该点的数值变为0xff,如果当前点不是在边缘上则该点输出为0x00。仿真结果如下图所示:图3-3 Sobel边缘检测算子的仿真结果(阈值为675)图3-4 Prewitt边缘检测算子的仿真结果(阈值为675)通过以上仿真结果可以看出, Sobel边缘检测算子对噪声具有平滑作用,提供的边缘方向信息也比较精确,但是Sobel
15、边缘检测算子的边缘定位精度不够高,适用于实际应用中对精度要求不高的场合。Prewitt边缘检测算子也具有平滑噪声的作用,但是其定位精度也不够高。5. 结语在文中,主要基于FPGA对Sobel和Prewitt边缘检测算子的实现进行了分析研究。根据两种边缘检测算子的基本原理,利用FPGA平台对其进行了设计仿真分析,研究FPGA在边缘检测中应用,并通过MATLAB的imshow函数实现了图像数据的显示,并且对仿真结果进行了对比分析。参考文献1 张亶,陈刚编.基于偏微分方程的图像处理.北京:高等教育出版社,2004,20-612 章毓晋.图像工程(上册)-图像处理M.北京:清华大学出版社, 2012.
16、 2.3 范培培. 基于FPGA的图像处理方法研究与实现D. 天津:河北工业大学, 2010.12.4 张永军.基于FPGA的图像处理系统设计与算法实现研究:D.重庆:重庆大学,20065 付麦霞,张元,廉飞宇. 基于CPLD 的图像边缘检测器的研究J. 通信技术, 2009, 42(11):6 云霄.可配置FFT/IFFT处理器的设计及其FPGA构造:硕士论文.西安:西安电子科技大学,20097 郑文明.基于FPGA的数字信号处理算法研究与高效实现:硕士论文.黑龙江:哈尔滨工程大学,20098 唐良瑞,马全明,景晓军等 图像处理实用技术 北京:化学工业出版社,2002.19 吴艳.基于FPGA的数字图像处理基本算法研究与实现:D.黑龙江:哈尔滨工业大学,200810 褚镇勇. FPGA设计及应用.西安:西安电子科技大学出版社,2002.7
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1