边缘检测(英语:Edge detection)是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。 边缘检测是图像处理和计算机视觉中,尤其是特征检测中的一个研究领域。
图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。有许多方法用于边缘检测,它们的绝大部分可以划分为两类:基于查找一类和基于零穿越的一类。基于查找的方法通过寻找图像一阶导数中的最大和最小值来检测边界,通常是将边界定位在梯度最大的方向。基于零穿越的方法通过寻找图像二阶导数零穿越来寻找边界,通常是Laplacian过零点或者非线性差分表示的过零点。
代码调试不易。转载请标明出处,谢谢!
% 日期 2020年12月21日
% 主题 实验三:图像边缘检测
% 要求
% 1)掌握高级语言编程技术;
% 2)对自选图像、加噪图像、去噪图像
% 分别利用一阶微分、二阶微分算子进行边缘检测;
% 3)分析处理结果。
clear;clc;close all
Alfa_canny = 0.31; % 初始化参数 canny阈值
%% 自选图像
% I = imread('cameraman.tif');
I = imread('toyobjects.png');
% I = imread('circuit.tif');
figure,set(gcf,'outerposition',get(0,'screensize')); % figure窗口最大化
subplot(3,4,1),imshow(I),title('Original Image');
try
I=rgb2gray(I); % 如果是RGB图像,转成灰度图
catch
% 否则,不做变换
end
% 使用对导数的Sobel近似,在图像I的梯度最大的点处查找边。
sobelBW=edge(I,'sobel');
subplot(3,4,2)
imshow(sobelBW),title('Sobel Edge');
% 在用拉普拉斯高斯(LoG)滤波器对I进行滤波后,通过寻找零交叉来寻找边缘。
lapluceBW = edge(I,'log');
subplot(3,4,3),imshow(lapluceBW),title('laplacian of Gaussian Edge');
% canny方法通过寻找I的梯度的局部极大值来寻找边缘
cannyBW = edge(I,'canny',Alfa_canny);
subplot(3,4,4),imshow(cannyBW),title('canny Edge');
%% 添加噪声
I=imnoise(I,'salt & pepper',0.04); % 叠加密度为0.04的椒盐噪声
subplot(3,4,5),imshow(I),title('加噪')
% 使用对导数的Sobel近似,在图像I的梯度最大的点处查找边。
sobelBW=edge(I,'sobel');
subplot(3,4,6),imshow(sobelBW),title('Sobel Edge');
% 在用拉普拉斯高斯(LoG)滤波器对I进行滤波后,通过寻找零交叉来寻找边缘。
lapluceBW = edge(I,'log');
subplot(3,4,7),imshow(lapluceBW),title('laplacian of Gaussian Edge');
% canny方法通过寻找I的梯度的局部极大值来寻找边缘
cannyBW = edge(I,'canny',Alfa_canny);
subplot(3,4,8),imshow(cannyBW),title('canny Edge');
%% 图像去噪
I=medfilt2(I,[2 4]); %采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波
subplot(3,4,9),imshow(I),title('去噪图像')
% 使用对导数的Sobel近似,在图像I的梯度最大的点处查找边。
sobelBW=edge(I,'sobel');
subplot(3,4,10),imshow(sobelBW),title('Sobel Edge');
% 在用拉普拉斯高斯(LoG)滤波器对I进行滤波后,通过寻找零交叉来寻找边缘。
lapluceBW = edge(I,'log');
subplot(3,4,11),imshow(lapluceBW),title('laplacian of Gaussian Edge');
% canny方法通过寻找I的梯度的局部极大值来寻找边缘
cannyBW = edge(I,'canny',Alfa_canny);
subplot(3,4,12),imshow(cannyBW),title('canny Edge');
边缘检测是图像预处理中的关键。边缘是指其周围像素灰度发生阶跃变化或屋顶状变化的那些像素的集合,图像的大部分信息都存在于图像的边缘中,主要表现为图像局部特征的不连续性,是图像灰度变化比较剧烈的地方。在一幅图像中,边缘有方向和幅度两个特性。沿边缘走向的灰度变化平缓,而垂直于边缘走向的灰度变化剧烈。边缘检测是对灰度变化的度量与定位,灰度变化的显著程度可以通过导数来度量,即函数导数能够反映图像灰度变化的显著程度,因此边缘检测的一个基本思想就是通过求一阶导数的局部极大值,二阶导数的过零点来体现出来的。实验三在Windows操作系统下的MATLAB2019b应用程序中编写程序,待程序调试完成后,通过对多幅图像、加噪图像、去噪图像分别利用一阶微分、二阶微分算子进行边缘检测来探究Sobel算法、Log算法、Canny算法等三种常用的边缘检测方法的性能和特点。程序运行结果如下图所示:
综合比较图1-1、1-2、1-3可以看出相对于Sobel算法而言,Log算子检测出的噪声点比较多,对噪声比较敏感。通过文献了解到Log算子有一个线性变化条件:沿着平行于边缘的灰度变化是局部线性的。当这个条件满足时候,Log算子的性能比较好:而如果这个条件不满足,则检测结果就不好。但是对于一些小尺度边缘、边缘角落和T形边缘来说这些条件无法满足,所以效果就不好。另外,Log算子对噪声比较敏感,它检测出的是梯度图像具有局部最大值和最小值的点,但实际上边缘只是那些梯度为局部最大的点,所以说Log算子多算了一点,因此导致了Log算子的抗噪性比较差,这从实验的结果也可以看出来。
对于Canny算法通过调整合适大小的阈值,算法检测出的边缘图像较好且抗干扰性强,它比前两种算子能相对好的检测出边缘,并符合一定的规则。由于它利用了双阈值法,非极大抑制,灰度直方图,边缘定位更准确。
算子 | 特点 | 适用范围 |
---|---|---|
Sobel | 采用加权滤波、边缘较宽、间断点较多 | 灰度渐变,低噪声图像 |
Log | 利用旋转对称的Log模板与图像做卷积,确定滤波器输出的零交叉位置,能检测出图像较细的边缘部分 | 噪声较低的图像 |
Canny | 以一阶导数确定边缘点、高定位精度、低误判率、抑制虚假边缘 | 高噪声图像 |
综合比较三幅图像中三种算法的检测结果及查阅文献可以得出以下结论,相比Sobel算法和Log算法,Canny算法检测出来的边缘效果最好,其边缘具有连续性好,噪声小,定位准等优点。三种边缘检测算法的特点及其适用范围总结见上表。
代码调试不易。转载请标明出处,谢谢!
如果感觉本文对您有帮助,请留下您的赞,您的支持是我坚持写作分享的最大动力,谢谢!
References
[1]阮秋琦.数字图像处理学[M].北京:电子工业出版社, 2001.
[2]医学影像处理与分析[M]. 电子工业出版社 , 田捷等编著, 2003
[3]基于MATLAB的系统分析与设计[M]. 西安电子科技大学出版社 , 王晓丹,吴崇明编著, 2000
[4]朱秀昌, 刘峰, 胡栋.数字图像处理与图像通信[M].北京:北京邮电大学出版社, 2002.
[5]贾永红.计算机图像处理与分析[M].武昌:武汉大学出版社, 2001.
[6]何斌, 马天予, 王运坚, 等.Visual c++数字图像处理[M].北京:人民邮电出版社, 2002.
[7]Venkatesan Rajinikanth,E Priya,Hong Lin,Fuhua Lin. Hybrid Image Processing Methods for Medical Image Examination[M].CRC Press:2020-12-17.
[8]Ranjan Parekh. Fundamentals of Image, Audio, and Video Processing Using MATLAB®:With Applications to Pattern Recognition[M].CRC Press:2020-12-17.
[9]Comparison of Edge Detector Performance through Use in an Object Recognition Task[J] . Min C Shin,Dmitry B Goldgof,Kevin W Bowyer. Computer Vision and Image Understanding . 2001 (1)
[10]A novel zero-crossing edge detectionmethod based on multi-scale space theory. Mengmeng Zhang,Xia Li,Zhihui Yang,Yang Yan g. M Signal Processing (ICS P),2010IEEE10th International Conference . 2010
[11]医学图像分割算法研究及其在骨分割中的应用[D]. 黄琴波.西安电子科技大学 2011
[12]刘付桂兰.基于MATLAB图像处理技术及应用[J].科学技术创新,2020(35):64-67.
[13]一阶边缘检测算法的研究[J]. 朱振伟,刘广瑞,刘巧红. 现代电子技术. 2009(24)
[14]孙道辉.基于信息融合的图像边缘检测算法实现[J].电子测试,2018(13):53-54.
[15]李晶晶,王迪,常玲. 基于图像边缘检测算法的应用研究与实现[A]. 中共沈阳市委、沈阳市人民政府、中国农学会.第十三届沈阳科学学术年会论文集(理工农医)[C].中共沈阳市委、沈阳市人民政府、中国农学会:沈阳市科学技术协会,2016:5.
[16]张慧,冯驰.图像边缘检测算法研究及其MATLAB实现[J].佳木斯职业学院学报,2015(09):330.
可以肯定的是学海无涯,这篇文章也会随着对MATLAB的深入学习而持续更新,
欢迎各位在评论区留言进行探讨交流。