目录
一、边缘检测算法介绍
1.Sobel边缘算子
2.Prewitt边缘算子
3.Log边缘算子
4.Canny边缘算子
二、比较
三、代码(不理解的可以看前几次的文章)
四、效果
1.原图
2.Canny处理
3.Robel处理
4. Prewitt处理
5.log处理
Sobel边缘算子的卷积核(Sobel模板)如图4-4所示,图像中的每个像素都用这两个核作卷积。这两个核分别对垂直边缘和水平边缘响应最大,两个卷积的最大值作为该点的输出位。运算结果是一幅边缘幅度图像。
Prewitt边缘算子是一种边缘样板算子,利用像素点上下、左右邻点灰度差,在边缘处达到极值检测边缘,对噪声具有平滑作用,对灰度和噪声较多的图像处理得较好。
Log算子对噪声比较敏感,Log算子有一个缺点是它对图像中的某些边缘产生双边响应。所以图像一般先经过平滑处理,通常把Log算子和平滑算子结合起来生成一个新的模板。
Canny边缘算子是一种既能滤去噪声,又能保持边缘特性的边缘检测最优滤波器。采用二维高斯函数任意方向上的一阶方向导数为噪声滤波器,通过与图像卷积进行滤波;然后对滤波后的图像寻找图像梯度的局部最大值,以此来确定图像边缘。根据对信噪比与定位乘积进行测度,得到最优化逼近算子。Canny算子检测方法的优点:①低误码率,很少把边缘点误认为非边缘点;②高定位精度,即精确地把边缘点定位在灰度变化最大的像素上;③抑制虚假边缘。
Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高,图像的边缘不止一个像素。当对精度要求不是很高时,是一种较为常用的边缘检测方法。
Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用Roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。
Prewitt算子检测方法对灰度渐变和噪声较多的图像处理效果较好。但边缘较宽,而且间断点多。
Laplacian算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素是图像的明区还是暗区。(不推荐,效果差)
Canny方法不容易受噪声干扰,能够检测到真正的弱边缘。优点在于,使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。
a1=imread('E:\photo\3.jpg'); %读入图像文件
%[thr,sorh,keepapp]=ddencmp('den','wv',a1); %求取对信号进行小波消噪处理的默认
%阈值、软阈值,并且保留低频系数
%c=wdencmp('gbl',a1,'sym4',2,thr,sorh,keepapp); % 全局阈值设置去噪
% figure,imshow(c),title('消噪后图像 ');
%d=medfilt2(a1,[2,2]); %进行二维中值滤波
% figure,imshow(d),title('中值滤波');
isuo=imresize(a1,1);
%sobel、robert、prewitt、Log、canny算子检测图像边缘
es=edge(isuo,'sobel',0.2);
er=edge(isuo,'roberts',0.2);
ep=edge(isuo,'prewitt',0.2);
el=edge(isuo,'log');
ec=edge(isuo,'canny',0.2);
figure,imshow(isuo);
%title('前期处理图像');
imwrite(isuo,'前期图像.jpg')
figure,imshow(es);
% title('sobel算子');
imwrite(es,'E:\photo\Sobel.jpg')
figure,imshow(er);
%title('roberts算子');
imwrite(er,'E:\photo\roberts.jpg')
figure,imshow(ep);
%title('prewitt算子');
imwrite(ep,'E:\photo\prewitt.jpg')
figure,imshow(el);
%title('log算子');
imwrite(el,'E:\photo\log.jpg')
figure,imshow(ec);
%title('canny算子');
imwrite(ec,'E:\photo\canny.jpg')