FPGA在缘检测中的应用.docx

上传人:b****5 文档编号:29745729 上传时间:2023-07-26 格式:DOCX 页数:14 大小:260.30KB
下载 相关 举报
FPGA在缘检测中的应用.docx_第1页
第1页 / 共14页
FPGA在缘检测中的应用.docx_第2页
第2页 / 共14页
FPGA在缘检测中的应用.docx_第3页
第3页 / 共14页
FPGA在缘检测中的应用.docx_第4页
第4页 / 共14页
FPGA在缘检测中的应用.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

FPGA在缘检测中的应用.docx

《FPGA在缘检测中的应用.docx》由会员分享,可在线阅读,更多相关《FPGA在缘检测中的应用.docx(14页珍藏版)》请在冰豆网上搜索。

FPGA在缘检测中的应用.docx

FPGA在缘检测中的应用

FPGA在边缘检测中的应用

摘要:

目前,FPGA以其算法硬件处理速度快、可编程、可重配置等特性,非常适合图像处理系统。

本文针对边缘检测算法实现方法的研究,利用FPGA这一平台进行了实现。

文章分析了FPGA在边缘检测中的应用,主要是Sobel边缘检测算子、Prewitt边缘检测算子。

在论文中,根据FPGA的并行流水线性,对Sobel、Prewitt边缘检测算子分别进行了FPGA设计与实现,并进行了仿真,并且利用两种边缘检测算子对图像进行了处理比较。

最后,从时间和效果与软件处理的结果方面,对两种边缘检测算子进行了比较。

关键词数字图像处理Sobel边缘检测法Prewitt边缘检测算法现场可编程逻辑门阵列(FPGA)

0引言

所谓的数字图像处理技术,就是我们利用计算机对图像进行加工处理,并从中获取一些对我们来说有用的信息。

在现实生活中,我们也亲身体会到我们是通过图像获取视觉信息的。

伴随着计算机信息技术、集成电路技术的飞速发展,数字图像处理技术也得到了很大的发展,并且也出现了许多与数字图像处理技术相关的新理论、新技术、新设备。

这些新理论、新技术、新技术在工业生产、科学研究、医疗卫生等领域得到了广泛应用,也对人类社会的发展以及人类生活水平的提高做出了巨大的贡献。

我们知道边缘一般是指图像灰度变化率最大的位置,图像的边缘是图像最重要的特征,它是由于图像局部特征的不连续形成的。

边缘的表现形式有图像灰度级与纹理结构的突变、彩色变化等等,在图像的边缘信息里含有许多对图像分析特别重要的特征信息。

在利用计算机进行数字图像处理的过程中,为了使图像的轮廓更加突出,容易辨别,而采取的一种图像处理方法就是边缘检测,有时也称其为边缘增强。

在图像处理的过程中,边缘检测主要运用于图像中的目标与图像的背景、图像中的不同区域之间、图像中的一个目标与另一个目标之间,是人们描述、识别目标以及解释图像的一个非常重要的参数。

边缘包含了图像丰富的信息,它是完实现图像分割、图像配准、图像分类以及图像识别的重要保障,如果边缘检测能够成功,那么图像分析就会变得很方便很简单,并且其精度也会得到相应的提高。

边缘检测算子分为一阶微分算子和二阶微分算子。

常见的一阶微分算子有Prewitt算子,Canny算子、Sobel算子、RobertsCross算子,Kirsch算子,罗盘算子等等。

二阶微分算子包括Laplacian算子和LOG算子等等。

本文主要介绍了Prewitt边缘检测算子的原理以及基于FPGA的Prewitt边缘检测算法的实现。

1边缘检测算子介绍

图像的边缘是图像最基本的特征之一,边缘检测是模式识别、图像分析中非常重要部分,因此在机器人视觉、图像处理、卫星遥感技术等领域中起着很重要的作用。

边缘一般是指图像灰度变化率最大的位置,含有图像中最重要的信息,因此边缘总存在于两个相邻的且具有不同灰度值的区域之间。

通常情况下,信号中的边缘点有两种,一种是突变点,再者就是奇异点,边缘点附近灰度的变换可以由相邻象素灰度分布的梯度反映出来。

1.1Sobel边缘检测算子

索贝尔算子(SobelOperator)是数字图像处理中的常用算子之一,主要应用于边缘检测。

在技术上,它是一离散型差分算子,用来运算图像亮度函数的梯度近似值。

在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量。

现在假设在图像平面上有一个9个点的小区域:

(1-1)

现用一个二次曲面

来拟合这9个点的灰度值,即用

(1-2)

来近似图像灰度函数

,并使均方误差

(1-3)

最小。

分别为零,联立解得各系数。

将二次曲面

求偏导数,得到梯度的幅值为:

(1-4)

它的两个卷积模板为:

(1-5)

(1-6)

1.2Prewitt边缘检测算子

Prewitt算子是一种边缘模板算子,这种算法是利用局部差分平均方法来寻找边缘的,该算法体现了三对像素点像素值之差的平均概念。

首先这些算子的模板是由理想的边缘算子图像构成的,然后依次用边缘模板去检测待检测的图像,再由与被检测区域最为相似的模板给出检测的最大值,并且用这个最大值代替算子的输出值,这样边缘像素就被检测出来了。

在这里我们假设在图像平面上有一个9个点的小区域:

(1-7)

Prewitt算子是通过对平面上9个点进行曲面拟合进而求拟合曲面偏导数,最后再计算梯度的幅值。

根据Prewitt的定义可以得到Prewitt算子:

(1-8)

其中两个卷积为:

(1-9)

(1-10)

2.基于FPGA的设计思路

 

FPGA设计流程如图2-1所示:

图2-1FPGA典型设计流

2.1设计思路介绍

由于sobel算子和Prewitt算子的实现思路是类似的,他们的区别只是在于算子的不同。

这里我们以sobel算子为例介绍,Prewitt算子是一样的。

Sobel边缘检测的算法基本原理如图2-2所示:

图2-2Sobel边缘检测算法原理图

首先分别计算水平梯度和垂直梯度,然后将两个方向的梯度值结合起来,接着通过一个门限值后,最后输出二值图像。

通过前面的分析可知,假设输入的像素点分别为

那么x方向的梯度和y方向的梯度分别为:

(2-1)

梯度结合后的梯度值G为:

(2-2)

门限处理函数:

(2-3)

其中

为门限处理的阈值。

综上分析Sobel算子在空间域上比较容易实现,而且可以有效的滤除图像噪声的影响,比较适合处理有害噪声较多的图像。

欲在FPGA中实现Sobel边缘检测首先需要生成3*3的窗口,窗口的生成办法已经在前面中值滤波一节中做了介绍,在此不再重复介绍。

此处重点介绍如何完成Sobel算子运算。

Sobel算法的关键在于计算梯度值G。

由前面分析可知

(2-4)

设计中避免使用乘法和除法运算从而减小系统的面积。

其具体的算法实现框图如图2-3所示:

图2-3Sobel算法实现框图

在上面框图中

表示对应的像素点。

主要的操作是加法操作和减法操作,其中abs为取绝对值操作。

编译综合之后生成的RTL级框图如下图所示,图中最左侧的模块是3*3窗口生成模块,接着是水平梯度和垂直梯度计算模块,后面是绝对值计算模块,最后一个是梯度整合模块和阈值计算模块。

图2-4Sobel算法的RTL级原理图

从上面这个图能清晰的看出Sobel的内部结构设计,而从下面这个Sobel端口图则能清楚的看出这个模块部分的输入输出关系。

图2-5Sobel算法模块的端口

上图中的clk为时钟信号,rst是复位信号。

median_out_flag则是输出使能信号,median_data_in是输入的像素灰度信息,其为8位无符号数,取值范围是0~255。

输出信号包括:

输出结果sobel_data。

已开始输出指示信号sobel_en。

x和y是从内部行计数器输出的像素点的x,y坐标。

由于sobel算子和Prewitt算子的实现思路是类似的,他们的区别只是在于算子的不同。

其算子形式为:

(2-5)

2.2FPGA代码解释

下面这个语句中:

assignsobel_data=en_grads?

((abs_data>=675)?

8'd255:

8'd0):

8'd0;//设定阈值,此时为675

修改标红的数据就是更改阈值。

另外比较关心的是算子的实现部分该部分是在data_grads.v文件中实现的,具体代码如下所示,重点关注下标红的部分:

//产生Gx横向梯度

always@(posedgeclkornegedgerst)

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

end

end

always@(posedgeclkornegedgerst)

begin

if(!

rst)

begin

Gx<=0;

end

else

begin

if(flag_reg)

Gx<=data_x1-data_x2;

else

Gx<=0;

end

end

//产生Gy纵向梯度

always@(posedgeclkornegedgerst)

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;(Prewitt算子此处是P1+P4+P7)

end

else

begin

data_y1<=0;

data_y2<=0;

end

end

end

always@(posedgeclkornegedgerst)

begin

if(!

rst)

begin

Gy<=0;

end

else

begin

if(flag_reg)

Gy<=data_y1-data_y2;

else

Gy<=0;

end

end

3.仿真结果以及分析

仿真结果如下图所示:

图3-1算法的仿真结果

图3-2算法的仿真结果细节

图3-1是仿真的整体图,可以看到在这个图中clk时钟信号已经看不清楚,图3-2能清楚的看到sobel_data(Prewitt边缘检测结果数据)的输出变化。

图3-2是将仿真图放大之后的效果,在这个图中能看出clk时钟信号和图像信息输入数据median_data_in的变化。

可以看到出sobel_data只有两种状态0x00和0xff。

当前点如果是在边缘上则通过系统之后该点的数值变为0xff,如果当前点不是在边缘上则该点输出为0x00。

仿真结果如下图所示:

图3-3Sobel边缘检测算子的仿真结果(阈值为675)

图3-4Prewitt边缘检测算子的仿真结果(阈值为675)

通过以上仿真结果可以看出,Sobel边缘检测算子对噪声具有平滑作用,提供的边缘方向信息也比较精确,但是Sobel边缘检测算子的边缘定位精度不够高,适用于实际应用中对精度要求不高的场合。

Prewitt边缘检测算子也具有平滑噪声的作用,但是其定位精度也不够高。

5.结语

在文中,主要基于FPGA对Sobel和Prewitt边缘检测算子的实现进行了分析研究。

根据两种边缘检测算子的基本原理,利用FPGA平台对其进行了设计仿真分析,研究FPGA在边缘检测中应用,并通过MATLAB的imshow函数实现了图像数据的显示,并且对仿真结果进行了对比分析。

参考文献

[1]张亶,陈刚编.基于偏微分方程的图像处理.北京:

高等教育出版社,2004,20-61

[2]章毓晋.图像工程(上册)-图像处理[M].北京:

清华大学出版社,2012.2.

[3]范培培.基于FPGA的图像处理方法研究与实现[D].天津:

河北工业大学,2010.12.

[4]张永军.基于FPGA的图像处理系统设计与算法实现研究:

[D].重庆:

重庆大学,2006

[5]付麦霞,张元,廉飞宇.基于CPLD的图像边缘检测器的研究[J].通信技术,2009,42(11):

[6]云霄.可配置FFT/IFFT处理器的设计及其FPGA构造:

[硕士论文].西安:

西安电子科技大学,2009

[7]郑文明.基于FPGA的数字信号处理算法研究与高效实现:

[硕士论文].黑龙江:

哈尔滨工程大学,2009

[8]唐良瑞,马全明,景晓军等图像处理实用技术北京:

化学工业出版社,2002.1

[9]吴艳.基于FPGA的数字图像处理基本算法研究与实现:

[D].黑龙江:

哈尔滨工业大学,2008

[10]褚镇勇.FPGA设计及应用.西安:

西安电子科技大学出版社,2002.7

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1