基于FPGA的图像边缘检测Sobel算法的研究与实现

时间:2022-10-03 08:11:26

基于FPGA的图像边缘检测Sobel算法的研究与实现

摘要:图像边缘是图像识别信息最集中的地方,Sobel算法是基于一阶导数的边缘检测,通过逼近导数来找到边缘。fpga(Field Programmable Gate Array)即现场可编程门列阵,是在可编程逻辑器件(Programmable Logic Device)基础上发展的一种产物。该文即是采用FPGA技术实现基于Sobel算子的边缘检测算法。

关键词:图像边缘;FPGA;Sobel算法;边缘检测

中图分类号:TP313 文献标识码:A 文章编号:1009-3044(2014)20-4810-03

Research and Implementation of FPGA Image Edge Detection Based on sobel Algorithm

ZHANG Wei

(School of Electronics and Information, Tianjin University, Tianjin 300000,China)

Abstract: The image edge is the most concentrated place image identification information, Sobel algorithm is a derivative based edge detection, the derivative approximation to find the edge. FPGA (Field Programmable Gate Array) is a field programmable gate array, the programmable logic device (Programmable Logic Device) is a kind of product development based on. This paper is to realize Sobel operator edge detection algorithm based on the FPGA technology.

Key words: image edge; FPGA; Sobel algorithm; edge detection

图像边缘是图像特性(如像素灰度、纹理等)分布不连续处、图像周围特性有阶跃或屋脊变化的那些像素的集合,是图像识别信息最集中的地方[1]。主要表现为图像局部特征不连续,是图像灰度变化较剧烈的地方。由于边缘表示图像信号的突变,因此其中包含了大量的信息,这些信息可以用于图像分析、目标识别以及图像滤波[2]。取决边缘检测的好坏有两个有用的特征是灰度的变化率和方向,它们分别用梯度向量的幅度和方向来表示。图像f(x,y)在位置(x,y)的梯度为下列向量公式:

G(x,y)=[GxGy]=[?f?x?f?y]

这个向量的的方向角和幅度值分别为公式1与公式2:

在实际应用中,通常用绝对值来近似计算梯度幅值,如公式3:

算子运算是将各模板在图像上移动,设图像3×3数据块如下图所示。Sobel算法是基于一阶导数的边缘检测,通过逼近导数来找到边缘。根据Sobel算子模板,水平导数[Gx]和垂直导数[Gy]表示为:

FPGA(Field Programmable Gate Array)即现场可编程门列阵,是在可编程逻辑器件(Programmable Logic Device)基础上发展的一种产物。而可编程逻辑器件是一种数字电路,它可以由用户来进行编程和配置,利用它可以解决不同的逻辑设计问题[3]。FPGA克服了ASIC投资大、灵活性差的缺点,同时又秉承了ASIC的大规模、高集成度的优点,己经逐步成为硬件数字电路设计的首选。FPGA主要具有以下的特点:1) 规模越来越大。2) 开发过程投资小。3) 可以反复的编程、使用和擦除。4) 保密性能好。5) FPGA开发工具智能化,功能强大。6) 新型FPGA内嵌CPU或DSP核,支持软硬件协同设计,可以作为片上可编程系统(SOPC)的硬件平台。FPGA具有较高的时钟频率、运行速度快、集成度高、功耗低、设计费用低、组织形式灵活等诸多优点。

Quartus Ⅱ是Altera公司提供的FPGA开发软件,支持多种设计输入形式。Quartus Ⅱ软件的设计流程如下所示:

1) 设计输入。Quartus Ⅱ具有多种设计输入方法,输入的方式不同,生成的文件格式也不同。如Verilog-HDL文本输入生成.v文件,VHDL文本输入生成.vhd文件,原理图输入方式生成.bdf文件等。

2) 设计编译。编译(Compilation)包括综合(Synthesis)和布局布线

(Place&Route)两个阶段。

3) 仿真。工程编译通过后,就要对其时序和功能进行仿真测试,以了解设计的结果是否满足原设计要求。

4) 硬件配置与验证。在完成设计输入及成功编译、仿真之后,器件配置是Quartus Ⅱ设计流程的最后一步,目的是将设计配置到器件中进行硬件验证。

边缘检测的实现是首先利用3×3方形窗模块并行输出窗口内的9个像素数据,其次再利用梯度运算模块将窗口中的像素值与模板中对应位置的系数进行乘积和运算,最后用得到的运算结果代替3×3方形窗中心位置的像素值。基于Sobel算子的计算方法简便,检测效果比较好,因此本文边缘检测算法的FPGA实现是基于Sobel算子的边缘检测算法。根据FPGA实现sobel边缘检测算法时,根据算法,分为3个功能模块:梯度运算模块,梯度结合模块,门限处理模块。

其实现的原理图如图1所示:

梯度运算模块接口如图2所示:

结构中为避免使用乘法器,用加法器对其进行替代,可以提高处理系统的频率,另外,有数据溢出的问题,采用先扩展位数,再将结果减为8位的方法,保证数据的有效输出。

梯度运算的部分verilog源代码如下:

assign plus_r1 = p1 + p2;

assign plus_r2 = p2 + p3;

assign plus_r3 = p4 + p5;

assign plus_r4 = p5 + p6;

assign plus_rr1 = plus_r1 + plus_r2;

assign plus_rr2 = plus_r3 + plus_r4;

assign edge_tmp = (plus_rr1 > plus_rr2) ? (plus_rr1 - plus_rr2) : (plus_rr2 - plus_rr1);

assign edge_result = (edge_tmp[9 : 8] > 2'b00) ? 8'hff : edge_tmp[7:0];

边缘检测算法有时候会根据算子模板的不同,需要在梯度运算模块之后对运算结果进行简单的处理,如梯度比较、阀值比较等。

梯度比较模块即是对梯度运算模块的结果进行梯度结合,其功能是对水平梯度值和垂直梯度值进行比较,找出最大值。该模块也采用了流水线操作的方式,比较器原理图如图3所示:

其中,a1,a2为输入的水平、垂直梯度值,a_large为将水平、垂直梯度值进行比较后得到的梯度最大值。

计算图像所有像素的灰度平均值k,并以k为阈值对图像进行二值化处理,灰度值小于k的取0,灰度值大于k的取1.边界判别器dege_judge的功能是根据区分阈值和最大梯度值进行边界的判断。其原理图如图4所示:

其中,th_hold为对图像作直方图分析后得到的阈值,max_grand为梯度比较模块中水平、垂直梯度比较后输出的最大梯度值a_large,data_out为检测后的数据输出,edge_flag为边缘检测标志,当检测到边缘时,edge_flag=1。

参考文献:

[1] 张杰.基于FPGA的数字图像处理[D].武汉科技大学,2009.

[2] 夏德深,傅德胜.现代图像处理技术与应用[M].南京东南大学出版社,1997.

[3] 吴艳.基于FPGA的数字图像处理基本算法研究实现[D].哈尔滨工业大学,2008.

上一篇:浅谈WCDMA终端射频一致性之发射功率测试 下一篇:感受大师!让思想放飞