糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > c语言sobel边缘检测 Sobel图像边沿检测算法的优化设计与实现

c语言sobel边缘检测 Sobel图像边沿检测算法的优化设计与实现

时间:2022-05-08 13:53:02

相关推荐

c语言sobel边缘检测 Sobel图像边沿检测算法的优化设计与实现

0 引言

图像边沿是图像的基本特征,是图像分割、特征提取等图像分析的重要依据,目前已广泛应用于目标识别、机器视觉和运动目标跟踪等领域。现今已有多种边沿检测算法以及一些改进方式,但各种算法都有各自的优缺点和适用领域。在实时图像处理系统中,通常采用Sobel算子来实现图像的边沿检测。然而传统的Sobel边沿检测算法存在抗噪能力弱、边沿信息较粗等问题,不能满足实际工程应用的要求。如何实时地获取清晰的图像边沿对工程实践和科学研究都具有重大意义。

设计中,基于图像处理的相关理论对Sobel边沿检测算法进行了改进,在传统的Sobel算法的基础上增加了快速中值滤波模块,提高了系统的抗噪能力,并采用非极大值抑制的方式对图像边沿进行了细化,既有效地保留了图像边沿,又保证了图像边沿的清晰。

1 Sobel图像边沿检测优化设计

Sobel算法虽然在图像边沿检测方面具有诸多优势,然而对于图像实时处理还是存在抗噪能力弱、边沿信息较粗等问题,所以需进一步改进。优化后的边沿检测模块主要由快速中值滤波模块、边沿检测模块和非极大值抑制模块构成。检测模块总体设计如图1所示。

当图像数据输入时,首先进行快速中值滤波处理,平滑图像噪声,然后通过Sobel算子得到图像的梯度值,最后应用阈值比较和非极大值抑制的方式提取图像边沿,进行二值化处理,从而得到清晰的图像边沿。

1.1 快速中值滤波

在图像采集传输过程中,不可避免地出现各种各样的噪声,这些噪声不仅降低了图像的质量,而且会影响后续图像的处理。中值滤波能够有效滤除椒盐噪声和脉冲噪声,有效地保持图像边沿的细节,是一种比较理想的图像滤波算法。它通过对相邻区域内的像素进行排序,取中间值作为输出像素,以达到滤波的效果。基本的中值滤波算法运算量大,不利于实时图像处理。设计采用快速中值滤波算法,提高了图像处理的效率,实现方法如图2所示,其中MAXi、MIDi、MINi分别代表每行数据的最大值、中间值与最小值。依据图2所示,通过多次比较(CMP)就可以得到最终的滤波结果。

1.2 Sobel边沿检测

Sobel算子是一阶导数的边缘检测算子,包含水平和垂直2组3×3的矩阵,将之与图像中的每个像素点做卷积和运算,即得到图像的水平和垂直梯度值,再根据梯度计算公式算出图像梯度值,将此梯度值与设定的阈值进行比较,若大于阈值,则认为该像素点为边缘部分,把3×3二维图像中央的灰度值设为255,若小于阈值,就不是边缘部分,相应的灰度值设为0。

图3(a)为一帧图像的3×3窗口,Pi为各点的灰度值,图3(b)和图3(c)分别为Sobel算子水平和垂直方向梯度算子。针对图像中3×3的像素空间,Sobel算子采用式(1)和式(2)计算中间像素点P5处的水平梯度Px与垂直梯度Py。

Px=(P6+2P7+P8)-(P0+2P1+P2)(1)

1.3 非极大值抑制

Soble边沿检测算法通过选取合适的阈值能够细化图像边沿,然而阈值的选取往往比较困难。如果阈值过低,则无法达到细化的效果,反之则会丢失部分图像边沿。通常Soble算法检测得到的图像边沿会出现边沿较粗的问题,从而影响图像处理的效果。故优化设计采用非极大值抑制的方式对图像梯度幅值的屋脊带进行了细化,只保留了幅值局部变化的最大的点。在非极大值抑制过程中,使用3×3的移动窗口对图进行处理,中心像素梯度值与邻域内的其他像素梯度值进行比较,如果中心像素值不是邻域像素的极大值,则把该像素点赋值为0,反之则把该像素点视为图像的边缘。其具体的数学表达式如式(3):

非极大值抑制既有效保留了图像边缘的梯度,又达到了图像细化的目的,有效地解决了Sobel算子出现的边沿较粗的问题,有利于图像分割和特征提取等图像后期处理的实现。

2 图像边沿检测硬件设计与实现

2.1 硬件系统结构设计

基于FPGA的实时图像边沿检测系统主要由图像采集单元、数据存储单元、边沿检测单元和图像显示单元四部分组成。具体的硬件系统结构如图4所示。

系统基于FPGA(EP3C40F484)开发平台,选用500万像素CMOS摄像头进行图像采集,图像信息经采集、灰度化等处理,再经过优化的基于Sobel图像边缘检测处理,最后由液晶显示器显示。算法采用了可编程宏功能模块与VHDL语言相结合的方法实现。

2.2 快速中值滤波算法硬件实现

中值滤波算法的核心是排序,算法的优劣直接决定求取中间值的效率,从而决定滤波器的性能。快速中值滤波采用并行处理和流水线的设计,避免了大量的比较操作,相比于传统的中值滤波算法,不仅运算量大大减少,在FPGA硬件实现上所占用的硬件资源也更少,因此它对图像数据处理的速度比传统的中值滤波更快。快速中值滤波硬件实现顶层原理图如图5所示,其中移位寄存器(linebuffer)模块能够依次输出3行的图像数据。Compare模块带有锁存功能,能够比较同一行像素的3个数据的大小,Compare3模块比较不同行图像像素的大小,并输出相应的结果。

2.3 Soble边沿检测算法硬件实现

基于Soble算子的边沿检测算法不仅计算简单,而且容易在硬件上实现。算法主要包括梯度计算和阈值比较两个部分,用VHDL代码实现阈值比较相对简单,所以梯度计算算法的实现为本模块的重点。

设计中梯度计算采用3-Line Buffer结构,相邻3行3列的9个图像像素点(P1,P2…P9)利用3个行缓冲器进行缓冲,然后再同步读取3行数据进行分级寄存,利用乘法器实现寄存结果与Sobel算子Xn的相乘,再利用3个加法器实现式(1)或式(2),即得到水平方向或垂直方向的梯度值,最后再利用一个加法器实现梯度计算公式得到梯度值|G|。

2.4 非极大值抑制算法硬件实现

设计中在Soble边沿检测的基础上增加了非极大值抑制功能,非极大值抑制算法RTL级结构如图6所示。

为了实现非极大值抑制算法,需再次构建3×3的移动窗口并确定中心像素梯度值是否为邻域内的最大值,设计中采用LineBuffer_3和sort3来构建3×3移动窗口。LineBuffer_3能够缓存3行480列的像素梯度值,一个时钟周期可以并行输出1列像素梯度值。前两个周期sort3模块接收并缓存LineBuffer_3模块输出的两列像素梯度值,在第三个周期得到第三列像素梯度值时,也同时构成了3×3的梯度窗口,输出如图中的data1~data9,最后在comper模块内对9个像素梯度值进行比较,从而确定中心像素是否为邻域内的最大值。若为最大值就保留并进入阈值模块进行比较,否则将中心梯度值置零。

3 实验结果与分析

为了验证系统优化设计后的性能,采用MT9M001相机对图像进行采集,将优化后得到行的边沿图像与优化前的边沿图像进行比较,得到了不同的检测结果,结果如图7所示。图7(a)为相机采集到的原始图像,图7(b)为传统的Soble边沿检测算法得到的图像,由于受室内日光灯的影响,采集到的图像噪声大且边沿较粗。图7(c)为通过滤波后得到的图像边沿,滤波效果明显。图7(d)为优化后的边沿检测算法得到的图像,图像受噪声影响小,且边沿较细,能够有效地识别图像的边沿。

4 结论

该系统针对Sobel算法用于图像边沿检测时出现的噪声大、边沿较粗等问题,在传统的Sobel算法的基础上增加了快速中值滤波模块和非极大值抑制模块,提高了系统的抗噪能力,保证了图像边沿的清晰度,并在EP3C40F484 FPGA平台上对硬件电路进行了验证。实验结果表明,优化后的边沿检测方案不仅能够有效地抑制噪声,而且得到的图像边沿更细,增强了实时图像处理的效果。

参考文献

[1] 谢凤英.数字图像处理及应用[M].北京:电子工业出版社,.

[2] 朱秀昌,刘峰.数字图像处理与图像通信[M].北京:北京邮电大学出版社,.

[3] 孙敏.图像处理并行算法研究与实现[D].绵阳:西南科技大学,.

[4] 张利平,潘宏侠,黄晋英.智能车辆视觉系统的障碍物边缘检测[J].测试与校准,,26(4):30-31.

[5] 尹业宏,王涛,陈颖.基于FPGA的图像与处理滤波算法[J].光学与光电技术,,2(5):61-63.

[6] 杨新华,寇为刚.基于FPGA的Soble算子图像边缘检测算法[J].仪表技术与传感器,(1):102-104.

[7] 朱伟超,万新军,杨波,等.模糊图像边缘精确定位的滤波算法[J].光学仪器,,37(1):46-48.

如果觉得《c语言sobel边缘检测 Sobel图像边沿检测算法的优化设计与实现》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。