Canny算子边缘检测算子模板求边缘点具体算法

边缘检测:利用Roberts、Prewitt、Sobel、Log、Canny算子对图像中不同区域的边缘(边界)进行检测,达到检测的目的。常见的一阶微分边缘检测算子模板包括 Roberts、Prewitt 和 Sobel 算子。这些算子利用边缘处梯度最大的性质进行边缘检测,即利用灰度图像的拐点为边缘的性质。

(1) 索贝尔算子

以待增强图像的任意像素为中心log算子边缘检测原理,取一个3*3像素的窗口,分别计算窗口中心像素在和方向上的梯度。增强后图像在处的灰度值

表示为:

p>

(2)Prewitt 算子

表示为模板

图片[1]-Canny算子边缘检测算子模板求边缘点具体算法-老王博客

(3)罗伯茨算子

罗伯茨模板由对角向上4个像素的交叉差定义,即

(4)LOG 运算符

先对图像进行高斯函数的平滑滤波,再通过拉普拉斯算子进行边缘检测,有效克服了拉普拉斯算子抗噪能力差的缺点。一些锐利边缘被平滑,导致无法检测到锐利边缘。此外,高斯函数中参数的选择尤为关键。通带越大,通带越窄,对高频噪声的抑制作用越大,但同时信号图像的边缘也被平滑掉,导致部分边缘点丢失;反之log算子边缘检测原理,通带越小,通带越宽,可以检测到图像的高频细节,但抑制噪声的能力相对降低,容易出现假边缘。

(5)Canny算子

Canny算子寻找边缘点的具体算法步骤如下:

使用高斯滤波器平滑图像。梯度大小和方向使用有限差分导数计算。梯度幅度的非最大抑制。双阈值算法的边缘检测与连接。

clc;clear;close all;
I = imread('实验图片素材\lena.bmp');
K1 = double(imnoise(I,'gaussian',0.01));
subplot(231);imshow(K1,[]);title('高斯噪声图像');
%  Roberts算子边缘检测
BW1 = edge(K1,'roberts',0.2);
subplot(232);imshow(BW1,[]);title('Roberts算子图像');
% Prewitt算子边缘检测
BW2 = edge(K1,'prewitt',0.05);
subplot(233);imshow(BW2,[]);title('Prewitt算子图像');
% Sobel算子边缘检测
BW3 = edge(K1,'sobel',0.04);
subplot(234);imshow(BW3,[]);title('Sobel算子图像');
% Log算子边缘检测
BW4 = edge(K1,'log',0.02);
subplot(235);imshow(BW4,[]);title('Log算子图像');
% Canny算子边缘检测
BW5 = edge(K1,'canny',0.04);
subplot(236);imshow(BW5,[]);title('Canny算子图像');

图片[2]-Canny算子边缘检测算子模板求边缘点具体算法-老王博客

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论