算子实际上是用来对图像进行卷积处理,其本质是用变分法来处理梯度问题,用途就是边缘检测。45度和135度效果一般,水平检测加垂直检测效果还可以。
function Sobel(name,Threshold)
f = imread(name);
f = rgb2gray(f);
f = im2double(f);
subplot(231);
imshow(f),title('rawpicture');
a45 = [-2 -1 0;
-1 0 1;
0 1 2];
Sobel45 = imfilter(f,a45,'replicate');
Sobel45 = Sobel45>=Threshold;
subplot(232);
imshow(Sobel45),title('45 Sobel edge detect');
a135 = [0 -1 -2;
1 0 -1;
2 1 0];
Sobel135 = imfilter(f,a135,'replicate');
Sobel135 = Sobel135>=Threshold;
subplot(233);
imshow(Sobel135),title('135 Sobel edge detect');
[Vertical,Threshold] = edge(f,'sobel', 'vertical');
subplot(234);
imshow(Vertical),title('Vertical Sobel edge detect')
[Horizontal,Threshold] = edge(f,'sobel','horizontal');
subplot(235);
imshow(Horizontal),title('Horizontal Sobel edge detect');
HandV = edge(f,'sobel',Threshold);
subplot(236);
imshow(HandV),title('Horizontal and Vertical Sobel edge detect');
sobell=edge(f,'sobel');
figure(2),subplot(121),imshow(HandV);
subplot(122),imshow(sobell);
end