几种常用的边缘检测算子:
边缘是图像的最重要的特征,。边缘是指周围像素灰度有阶跃变化或屋顶变化的那些像素的集合。边缘检测主要是灰度变化的度量、检测和定位。有很多种不同的边缘检测方法,同一种方法使用的滤波器也不尽相同。图像边缘检测就是研究更好的边缘检测方法和检测算子。
边缘检测的基本思想:
利用边缘增强算子,突出图像中的局部边缘;然后定义像素的“边缘强度”,通过设置阈值的方法提取边缘点集。由于噪声和模糊的存在,监测到的边界可能会变宽或在某点处发生间断。因此,边界检测包括两个基本内容:i. 用边缘算子提取出反映灰度变化的边缘点集
ii. 在边缘点集合中剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线
常用的检测算子有==拉普拉斯边缘检测算法、Robert边缘检测算子、Sobel边缘检测算子、Prewitt边缘检测算子、Canny边缘检测算子==。
在Matlab图像处理工具箱中,提供了edge函数利用以上算子来检测灰度图像的边缘。
代码:
clear;close all;img=imread('C:甥敳獲lenovoDesktop15.bmp');figure('name','原图和二值化图像');subplot(1,2,1);imshow(img);title('原始图像')img=imbinarize(img); %二值化图像subplot(1,2,2);imshow(img)title('二值化图像')figure('name','五种边缘检测算子实现图'); %edge函数中的图像可以是二值图像也可以是灰度图像,%因为原图为二维图像采用二值算法进行处理更为方便;canny= edge(img,'canny');% 这里采用默认阈值,如果更加复杂的图像可以自定义阈值%canny= edge(img,'canny',0.51); %自定义阈值subplot(2,3,1);imshow(canny);title('Canny算子实现')Roberts= edge(img,'Roberts');subplot(2,3,2);imshow(Roberts);title('Roberts算子实现')Sobel= edge(img,'Sobel');subplot(2,3,3);imshow(Sobel);title('Sobel算子实现')Prewitt= edge(img,'Prewitt');subplot(2,3,4);imshow(Roberts);title('Roberts算子实现')Roberts= edge(img,'Roberts');subplot(2,3,5);imshow(Prewitt);title('Prewitt算子实现')
处理结果:
在这里插入图片描述
在这里插入图片描述
本片博客参考下面两位博主的文章:
基于matlab边缘提取的几种方法的比较edge函数使用