边缘检测的基本步骤是:原始图像经过平滑滤波产生平滑图像,在经过锐化滤波生成锐化图像,然后才是边缘检测生成二值图像,在经过霍夫变换,连接边缘。
通过Matlab运行了几种边缘检测算子,梯度算子(一阶):Roberts,Prewitt,Sobel、高斯-拉普拉斯算子(二阶)和Canny边缘检测算子。
% 练习边缘检测函数,通过青豆的图片,检测出青豆的边缘
% 首先通过rgb2gray 把彩色图像转换成灰度图像
clear all;
I1 = imread('qingdou.jpg');
%I1 = imread('zouxian.jpg');
I = rgb2gray(I1);
subplot(2,3,1);
imshow(I);
% 通过边缘函数进行处理并查看效果
bw1 = edge(I, 'sobel');
bw2 = edge(I, 'prewitt');
bw3 = edge(I, 'roberts');
bw4 = edge(I, 'log');
bw5 = edge(I, 'canny');
subplot(2,3,2);imshow(bw1);title('sobel');
subplot(2,3,3);imshow(bw2);title('prewitt');
subplot(2,3,4);imshow(bw3);title('roberts');
subplot(2,3,5);imshow(bw4);title('log');
subplot(2,3,6);imshow(bw5);title('canny');
直接对青豆图像的处理效果不是很明显,效果如下:
然后对一个走线图进行了试验,效果还可以
总体来看,Canny算子的效果不错