基于FPGA的图像边缘检测系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要:许多关于图像中比较重要的信息都在图像的边缘包含着,图像边缘检测作为图像处理的重要组成部分,在许多领域有着重要的应用。
图像边缘检测在很大程度上减少了数据的量,并且除去了一些并不是特别相关的信息,但是却保留了对于图像来说重要的结构属性,数据量大,重复度高是边缘检测算法最主要的特点。
由于FPGA的算法在硬件处理中速度快、而且可以用来直接编程、可重配置等各种特点,因此它在图像处理中占有很重要的位置,为此文章提出了运用FPGA实现边缘检测的方法,并且根据FPGA的特性,对Sobel算子进行了FPGA设计与实现以及仿真,并且对几种边缘检测算子进行了比较。
仿真中通过改变程序中的阈值可以得到不同的处理效果,这也是利用FPGA的优点,方便容易、速度也得到了提高,并且可编程、可重配置,使得FPGA在数字图像处理方面显得非常优越。
关键词:边缘检测;FPGA;图像处理;Sobel算子;Prewitt算子
The design of image edge detection technology based on FPGA
Abstract:Many important information about the image is contained at the edge of the image,Image edge detection is an important part of image processing,It is important in many fields .Image edge detection greatly reduces the amount of data,And removed some information that is not particularly relevant,But it preserves the structural attributes that are important to the image,Large amount of data,High repetition is the most important feature of edge detection algorithm.Because the FPGA algorithm is fast in hardware processing、And can be used for direct programming, reconfiguration and other characteristics,Therefore, it plays an important role in image processing,For this reason, a method of edge detection using FPGA is proposed,And according to the characteristics of FPGA,FPGA design, implementation and Simulation of Sobel operator are carried out,And several edge detection operators are compared.In simulation, different processing results can be obtained by changing the thresholds in the program,This is also the advantage of using FPGA, which is convenient, easy and fast,And programmable and reconfigurable, enabling FPGA to be very good in digital image processing.
Key Words:Edge detection; FPGA;Image processing;Sobel operator;Prewitt operator
引言
在图像边缘检测系统的图像处理模块中,要处理的源图像往往存在着很多的问题,例如图像内容模糊不清,图像亮度层次不够明显,图像细节看不分明等[1]。
图像内容之间的联系也被这一系列的问题覆盖了,因此图像信息的识别难度也相应的被加大了,但是图像处理的效果却被降低了[2]。
根据我们上面所提到的问题,我们往往需要对原来的图像进行处理,以此突出图像的重要信息。
图像的大量关键信息都被图像的边缘所包含着。
为了突出图像边缘信息需要我们对图像进行适当的处理,这样我们便能起到一定程度的去除干扰、使图像关键细节更加清晰的作用。
应用检测算子,来识别相邻图像灰度差异突出的边缘像素点,进而提高图像细节识别的技术即边缘检测技术。
常需要进行数据量相对比较大的图像处理即边缘检测算法,生活中我们常用的软件处理方式,它的速度是相对比较慢的,但它往往是提高图像处理速度的关键[2]。
FPGA芯片技术在当代我们的生活中越来越被广泛应用,但是它的集成度高,性能稳定,不仅具有高效的硬件并行处理技术,而且还具有良好的可移植性和通用性。
这些特性十分适合进行数据量大、算法简单的数据处理,在图像处理系统中刚好适用。
1. 图像边缘检测技术的发展与研究现状
1.1 边缘检测技术的发展
图像边缘检测技术的系统研究在1965年正式开始,是由L.G.Roberts提出的[3]。
图像边缘我们可以根据两种情况来划分,一种是阶跃性边缘但它变化剧烈,另一种是屋顶状边缘但它变化缓慢,两种边缘的区域都是一样的,因此,它和梯度算子的物理意义也很相似,可以用梯度变化得幅度来表示图像边缘变化的强弱。
先前的边缘检测算法主要用梯度来做铺垫,最早的边缘检测算子便是Roberts算子[4]。
在Roberts算子的基础上,为了降低图像边缘的检测更少的受到外界的影响,接着又提出了Prewitt算子和Sobel算子等。
上面的两种算子在计算它们的梯度时,周围像素的影响也都会考虑进去,减小了外界因素对我们的计算造成的影响[5]。
根据梯度算子计算获得的图像,它的边缘往往会比较宽,因此,另一种二阶导数的算子,Laplacian算子就被提出来了,由此算子得到的图像,它的边缘往往比较窄,但是它的检测质量和之前相比有所改善[6]。
由一阶导数算子获得的图像边缘比其它的较宽,并且一阶导数算子抵抗外界干扰的能力却很弱,因此又提出了Canny边缘检测算法。
Canny算法以信噪比、定位精度、单边响应为三准则进行函数建模[7],得到了较为理想状态的边缘检测方法。
由于二阶导数的Laplacian算子单边响应差,对噪声具有放大作用,因此在此基础上加入了Gauss滤波函数,此函数具有平滑噪声的作用,继而又提出了LoG边缘检测算法[7]。
由于梯度算子作为一种较经典的算子,其算法结构简单,实现方便,因此具有较大的应用价值和改造空间。
随着科学技术的发展,各种技术也进入了融合,在边缘检测中也开始引入大量的新方法。
而且这些算法各有各的特点,在一些特定的场景中有比较好的检测效果。
但经过算法融合后,算法的复杂程度却大大增加了,计算时间也比较长,很难实现图像的实时边缘检测,因此基于算法融合的边缘检测技术具有一定的局限性。
1.2 边缘检测技术的应用
图像的边缘对人的视觉系统以及对数字图像处理技术来说,都有着非常重要的意义,而且它的确定和提取在图像处理中也有着十分重要的位置。
在图像处理技术应用中,边缘检测技术主要体现在以下几个方面:
(1)图像压缩
图像信息的数据量大会给存储器的存储容量、通信干线信道的带宽以及计算机处理平台带来极大的压力。
来解决这个问题显然是很不现实的如果仅仅通过增加存储器容量、提高信道带宽以及计算机硬件配置等方法来解决,因为我们须要
考虑压缩数据以减少信息容量。
因此,图像压缩在图像数据传输和存储的过程中是必不可少的。
(2)图像分割
图像分割[8]是把若干个互不相交、具有一定性质的区域按照一定的规则来划分,只是单纯的把人们关注的部分从图像中提取出来,进一步加以研究分析和处理。
图像分割其实是将像素进行归类整理的过程,归类的依据为:像素间的相似性、非连续性,而边缘检测是进行图像非连续性分割里最基本的步骤之一。
按照边缘检测方法得到的图像分割,为了便于进一步的进行图像处理在分割的子区域的边界上一般具有不连续的灰度值,分割后的子区域内往往是相似属性的像素点的集合。
(3)模式识别
要实现计算机视觉,在人工智能领域中对图像内容的分析必须作为重点内容。
我们最初在进行模式识别时,常常需要对图像边缘、形状及纹理等特征进行提取与分析,即特征抽取[8]。
以模式识别为基础的机器人视觉、图像测量、卫星遥感技术、精确制导等应用领域的工作将无法继续进行,若是没有对图像边缘的精确检测。
图像边缘检测与提取在模式识别中占据着重要的地位,它是模式识别系统的基石,为其他模块所依赖[2]。
1.3 FPGA的发展及其在图像处理中的应用现状
1.3.1 FPGA的发展史
在早期的可编程逻辑器件中,只有可编程只读存贮器(PROM)、紫外线可按除只读存贮器(EPROM)和电可擦除只读存贮器(EEPROM)这三种。
但是由于结构的原因,使很多功能受到了限制,它们仅仅能完成数字逻辑这种简单的功能。
之后,出现了一中可以编程的逻辑器件(PLD),它能够完成具有各种数字逻辑功能的工作,它是一种可编程芯片,但是它的结构相对复杂。
典型的PLD由一个“与”门和一个“或”门阵列组合而成,而且任意一个组合逻辑都可以用“与一或”表达式来描述,所以,PLD能以一种简单的形式完成一种复杂的功能[9]。
这一阶段的产品主要有PAL(可编程阵列逻辑)和GAL(通用阵列逻辑)。
PAL 由一个可编程的“与”平面和一个固定的“或”平面构成,或门的输出可以有选择地被置为寄存状态只是需要通过触发器来实现[9]。
PAL是一种现场可编程的器件,它的实现工艺有反熔丝技术、EPROM技术和EEPROM技术。
还有一类是可编程逻辑阵列(PLA)这种器件结构更为灵活,这两个平面的连接关系是可编程的,它也由一个“与”平面和一个“或”平面构成。
在PAL的基础上,又发展了一种通用阵列逻辑GAL (Generic Array Logic)。
它采用了EEPROM工艺,它的输出结构是可编程的,而且它实现了通电时可以按除而且可以改写的功能,因而它的设计非常的方便,但是直至今天许多人依旧在使用。
这些早期的PLD器件因为其过于简单的结构致使它们只能实现规模较小的电路,但是它们却有一个共同特点即可以实现速度特性较好的逻辑功能[9]。
为了弥补不足之处,20世纪80年代中期。
Altera和Xilinx分别推出了和PAL 结构的扩展型CPLD(Complex Programmab1e Logic Dvice)以及FPGA(Field Programmable Gate Array)非常相似的一种门阵列,它们都具有的特点为构造和逻辑单元较灵活、但集成度高并且在很多时候都比较适用。
这两种器件把PLD和通用门阵列的优点都包含了,而且较大规模的电路也可通过它来实现,它的编程也很灵活的。
与门阵列等其它ASIC(Application Specific IC)相比,它们又具有很多优点例如,设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检验等,因此被广泛应用于产品的原型设计和产品生产(一般在10,000件以下)之中[10]。
几乎所有应用门阵列、PLD和中小规模通用数字集成电路的场合均可应用FPGA和CPLD器件。
1.3.2 FPGA在数字图像处理中的应用
FPGA器件是一种极为广泛的可编程逻辑器件在当今生活中。
FPGA器件在结构上具有逻辑功能块排列,可编程的内部连线连接这些功能模块可以用来实现一定的逻辑功能[6]。
工作时,在片内的SRAM中存着一些配置数据。
所谓的现场编程[11],即使用SRAM的FPGA器件,在工作前从芯片外部加载配置数据,配置数据存储在EPROM或其他存储体上,由设计者控制加载过程,而且设计者在现场可以修改器件的逻辑功能。
FPGA的灵活性是特别强的,可以根据需要进行重
新构造,而且有广泛的应用,适用于模块化的设计中;同时它的开发周期相当短,系统比较容易维护和扩展,适合时间较短的的信号处理,能够大大提高图像数据的处理速度,满足系统的实时性要求。
与此同时,FPGA自身也在迅速发展之中,它的集成度、工作速度不断提高,包含的资源也越来越多,可实现的功能也越来越强。
随着EDA技术的不断发展,使FPGA得到了广泛的应用,依靠其硬件并行性和极大的灵活性,使它能够迅速占领市场。
尤其在视频图像处理中,需要对视频流数据进行实时处理,这时FPGA更能发挥它的优势。
FPGA在以下方面有着独特的优势例如:(1)并行性;(2)可编程性;(3)高集成性。
1.4 论文的主要工作和章节安排
本文的主要工作是在研究图像边缘检测算法的基础之上,设计了基于硬件电路实现的图像边缘检测系统,它是利用Xilinx FPGA芯片设计的。
本论文主要包括如下五部分的内容:
(1) 绪论:介绍了图像边缘检测的发展与现在的发展状况,以及FPGA在图像处理中的应用。
(2) 图像边缘检测的方法:介绍了图像边缘的相关知识,并介绍了几种常用的图像边缘检测方法,分析了这几种常用的边缘检测方法的优点和缺点并选择Sobel算法作为本系统的边缘检测处理方法,为接下来的设计提供了理论基础[2]。
(3)基于FPGA的图像边缘检测系统硬件结构:介绍了系统的硬件平台,重点对设计平台的相关模块进行了介绍,为系统设计提供硬件支持。
(4)基于FPGA的图像边缘检测系统设计:通过对边缘检测模块的仿真结果与实际图像检测进行对比和总结,验证了图像边缘检测系统功能的实现。
(5)结束语:对整个论文设计的总结与展望。
2. 图像边缘检测的方法
2.1 图像边缘检测的基础
图像最基本的特征之一便是图像边缘检测,它包含了图像上目标物体的主要信息。
所谓边缘是指一组相连的像素的集合,这些像素周围灰度具有显著变化的部分,即在灰度级上发生急剧变化(灰度突变)的区域。
根据图像灰度值变化特点,理想的图像边缘可分为阶跃型和脉冲型两类[7],这两种脉冲对应的理想图像边缘数学模型如图1和2所示。
但是在实际的情况下,由于外界的各种原因,图像边缘不会出现理想的状况,而是以逐渐变化的形式出现在图像中。
实际阶跃型图像边缘数学模型如图3所示。
实际脉冲型图像边缘数学模型如图4所示。
实际脉冲型图像边缘因其形状像一个凸起的屋顶而被称为屋顶型图像边缘。
图5是实际阶跃型图像边缘一阶导数数学模型,图6是屋顶型图像边缘一阶导数数学模型。
图7是实际阶跃型图像边缘二阶导数数学模型,图8是屋顶型图像边缘二阶导数数学模型。
通过上述八幅图像我们可以很容易得出下述结论[12]:
我们所说的经过零点,其实就是一阶导数在图像的边缘处存在一个极值点,而它的二阶导数在边缘处与坐标轴有一个交点。
而屋顶型图像它的边缘灰度值的一阶导数在边缘处存在两个极值点,它的二阶导数有两个过零点[2]。
在很早的时候,我们如果确定图像边缘只能通过研究图像灰度值一阶导数的幅值与二阶导数的过零点[12]。
2.2 常用的图像边缘检测方法
2.2.1 基于一阶导数算子的边缘检测方法
图像梯度,和图像灰度值的一阶导数相对,而图像灰度值变化明显的方向就是梯度的方向。
对于一个图像函数,它在点(x,y)处,沿着x 方向、y 方向和θ方向的方向导数分别为[13]:
f x (x,y)=ðf(x,y)ðx (2-1)
f y (x,y )=
ðf(x,y)ðy (2-2) f θ(x,y)=ðf(x,y)ðx cos θ+ðf(x,y)ðf
sinθ (2-3) 它在点(x,y)处的梯度为:
∇f(x,y)
=[ðf(x,y)ðx ,ðf(x,y)ðy ]
(2-4) 梯度的幅值大小为:
|∇f(x,y)|=√f x 2(x,y )+f y 2(x,y)
(2-5) 在实际应用中,为了便于计算与实现,通常将梯度的幅值大小用一阶导数的 绝对值的和或最大值来近似计算:
|∇f(x,y)|=|f x (x,y)|+|f y (x,y)| (2-6) |∇f(x,y)|={|f x (x,y)|,|f y (x,y)|}max (2-7) 梯度的方向角θ,也就是梯度与x 轴方向的夹角为:
θ=arctan (f y (x,y)
f x (x,y)) (2-8)
而在数字图像处理中,对图像函数的一阶导数,可以用下式来近似表示:
f x(x,y)=f(x,y+1)−f(x,y)(2-9)
f y(x,y)=f(x+1,y)−f(x,y)(2-10)综合上述,要检测图像的边缘,只需利用下列公式:
|∇f(x,y)|=|f(x,y+1)|+|f(x+1,y)−f(x,y)|
(2-11)
而在实际的生活中我们计算时,若要检测图像边缘,需要分别对每个图像的像素进行一阶导数的计算,人们常用、2×2、3×3这两种模板,依次与像素点区域的灰度值进行卷积计算得出结果,用得到的结果来表征图像灰度值的梯度[14],这些卷积模板算子就称为边缘检测算子。
(1)Roberts算子
Roberts算子是一种梯度算子,它用交叉的差分表示梯度,是一种利用局部差分算子寻找边缘的算子,对具有陡峭的低噪声的图像效果最好。
(2)Sobel算子
Sobel算子是滤波算子的形式来提取边缘。
X,Y方向各用一个模板,两个模板组合起来构成一个梯度算子。
X方向模板对垂直边缘影响最大,Y方向模板对水平边缘影响最大。
(3)Prewitt算子
Prewitt算子是加权平均算子,对噪声有一定的抑制作用,但是像素平均相当于对图像进行的同滤波,所以Prewitt算子对边缘的定位不如Robert算子精确[6]。
2.2.2 几中边缘检测算子的比较:
Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗糙,因此边缘的定位不是很准确。
Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,sobel算子对边缘定位不是很准确,图像的边缘不止一个像素。
Prewitt算子检测方法对灰度渐变和噪声较多的图像处理效果较好,但边缘较宽,而且间断点多[6]。
2.2.3 基于二阶导数算子的边缘检测方法
人们提出一种更好的边缘检测方法——根据二阶导数而得出的图像边缘检测方法,依据是图像灰度值的二阶导数在边缘处的特点[7]。
下面介绍经典的二阶导数边缘检测算子——Laplacian算子。
拉普拉斯高斯算子是一种二阶导数的算子,它可以在边缘处产生一个非常陡的零交叉点。
在前面介绍的几种梯度都具有方向性,但是却不能适应各种走向的边缘,即在其它走向的边缘不能达到那么好的效果。
而Laplacian算子最大的优点是各向同性的,并且能对任何走向的界线和线条进行锐化,而且无方向性。
拉普拉斯高斯算子的缺点:
(1)拉普拉斯高斯算子具有更强的噪声敏感性,即使是由噪声引起的很小的局部极值,也可能出现二阶导数的过零点。
(2)但是它无法保证完整的图像边缘信息。
它的缺点如:丢失了边缘方向信息;边缘检测结果的连续性不好。
所以,通常不会将Laplacian算子的计算结果直接作为边缘检测结果,而是用它配合其它的算子来进行边缘检测。
2.3 本系统边缘检测算法选用分析
本论文使用可编程逻辑芯片FPGA来实现边缘检测算法。
各种新近发现的边缘检测方法,算法非常繁琐、而且很难实现;根据二阶导数的边缘检测方法对噪声特别灵敏,所以我们目前不考虑用它;根据最优滤波处理的边缘检测算法,它的边缘检测算子模板都是5×5或更高规模,考虑到FPGA芯片资源的现状,且本系统的重点为实现与验证,而不是算法设计,因此对边缘检测性能指标并没有
太高的原则,所以也不选用最优滤波处理的边缘检测算法。
在一阶导数的边缘检测方法中,Roberts算子采用2×2规格的模板,基本能描述出大致的外貌,而且它的计算方法极其简单,但是很容易受噪声干扰,并且它的计算模板存在着一些缺点,致使没有清晰的中心点,因此出现了像素偏移问题;Prewitt算子具有3×3规格模板,如果采用平均权值来计算邻域内的像素点,将对检测结果造成一定的影响;Sobel算子3×3规格算子模板,区分开邻域内像素点对检测结果的影响以距离远近来划分,突出强调了与中心点较近的像素值的作用,抗噪性能较强,定位精度好,在基于一阶导数的边缘检测方法里应用最为广泛。
综合以上结论,本系统采用基于Sobel算子的边缘检测方法来实现系统的边缘检测处理模块[3]。
3. 基于FPGA的图像边缘检测系统硬件结构
3.1 基于硬件设计思想的 C 语言 Sobel 算法边缘检测实现设计
用FPGA 实现Sobel 算法,实现算法的步骤虽然简单,但是工作量很大而且非常繁琐,如果我们要实现算法的逻辑功能模块就可以通过硬件描述语言来达到我们的目的。
Xilinx公司高级综合工具Vivado HLS,采用C语言优化算法实现结构,最终由工具经过C语言编译、逻辑综合与实现生成高质量的算法逻辑功能模块,整个设计优化过程时间短暂。
通过C语言来实现FPGA 的功能模块。
我们只需使用C语言实现算法设计,再通过Vivado HLS转化为硬件描述语言,大大节省了整个算法过程的时间[2]。
Sobel边缘检测算法参与计算的是不在同一行同一列的9个像素点,无法在同一个时钟周期内输入。
因此,要进行该算法时,可以开辟长度均为图像一行像素点个数的三个数组,用来缓存要计算像素点上一行和当前行的所有像素点,以及下一行正在输入的像素点[15]。
3.2 系统框图基于XILINX FPGA的图像边缘检测系统
如图9所示,由CMOS数字摄像头完成原始图像数据的采集,输出数据时需要对数据的时序和曝光进行控制,而且传感器的输出为数字信号;图像数据缓存有大容量的SDRAM模块实现对整个图像数据的存储,边缘检测模块在FPGA 内部实现对图像数据的处理,处理过的图像数据,通过VGA进行实时显示[15]。
图9 系统框图
Sobel 边缘检测算子使用两个方向算子(垂直算子和水平算子),如图10所示。
其原理是分别用这两个算子对图像进行卷积运算,得到两个矩阵,再求这两个矩阵对应位置的两个数的均方根,得到一个新的矩阵,即为灰度图像矩阵中各个像素点的梯度值。
最后将梯度值与门限T进行比较,当梯度值≥T时,规定该点的灰度值为255,反之为0[15]。
图10 Sobel算子
3.3 Sobel硬件实现的系统框图
Sobel边缘检测的硬件实现系统应包含梯度计算模块和门限处理模块,其中梯度计算模块可分为图像行缓冲模块和卷积计算模块。
此外,各个模块功能的实现可通过调用XILINX提供的各种宏功能模块(Mega-functions)来实现。
图11 Sobel 硬件实现的系统框图
4. 仿真结果与图像分析
4.1 仿真结果
边缘检测模块的仿真波形如下图12所示。
由图12可见,对于一幅大小为 1024×1024、像素精度为 8 bit 的图像,在 100 MHz 系统时钟下,边缘检测模块只需要约 10.5 ms 的时间就能完成相应处理,与 Vivado HLS 的实现报告大致相同。
图12 边缘检测模块功能仿真波形
图13 图像边缘检测结果
其中,a 图为原始图像,b 图为由软件处理得到的边缘检测结果,c
图为经
过硬件系统处理得到的边缘检测结果。
通过主观观察,硬件系统处理结果与软件处理结果相同;通过实际图像数据对比,硬件系统处理结果也与软件处理结果相同,验证了本系统图像边缘检测功能的正确性[15]。
将本系统边缘检测模块仿真处理时间与其他系统进行比较,突出本系统较高的图像处理速率,并对边缘检测系统做了实际图像的测试与验证,证明实现的系统功能达到了设计要求。
从右自左依次是脉冲激光光源、定位光阑1、1/2波片、偏振表1输出功率与回波功率效率分束棱镜、定位光阑2、1/2波片、mems扫描振镜以及用于模拟物体回波的反射镜。
图14 mems扫描激光成像系统图15 振镜和回波反射镜原理实验过程如下:脉冲激光光源发出激光脉冲,经过1/2波片调整偏振态后通过偏振分束棱镜,再通过1/4波片后将脉冲光偏振态改变,后通过mems振镜扫描出射,初涉光反射回mems振镜,再次通过1/4波片,两次通过1/4波片后的回波光信号和通过偏振分束棱镜的出射光信号偏振态相差90°,因此被偏振分束棱镜全反射,接收器的位置拟定位于偏振分束棱镜侧面,即实验装置拍照方向,其中,偏振分束棱镜选用thorlabs公司的3毫米规格偏振分束棱镜,其消光比可以达到1000:1[16]。
图16 thorlabs公司3毫米规格偏振分束棱镜
MEMS扫描振镜选择台湾OPUSMicro公司的PE165012型二维MEMS扫描振镜。
图17 PE165012型MEMS。