A=imread('D:\image\Body.jpg');
I = rgb2gray(A);
subplot(2,2,1);
imshow(I);
title('原图');
hx=[-1 -2 -1;0 0 0 ;1 2 1];%生产sobel垂直梯度模板
hy=hx'; %生产sobel水平梯度模板
gradx=filter2(hx,I,'same');
gradx=abs(gradx); %计算图像的sobel垂直梯度
subplot(2,2,2);
imshow(gradx,[]);
title('图像的sobel垂直梯度');
grady=filter2(hy,I,'same');
grady=abs(grady); %计算图像的sobel水平梯度
subplot(2,2,3);
imshow(grady,[]);
title('图像的sobel水平梯度');
grad=gradx+grady; %得到图像的sobel梯度
subplot(2,2,4);
imshow(grad,[]);
title('图像的sobel梯度');
结果为:
可以看出:
Sobel算子中的垂直模板得到的梯度图,由于梯度方向与边缘走向垂直,所以该梯度图对水平边缘有较强的响应,从而水平细节信息非常清晰;
sobel算子中的水平模板得到的梯度图,它对垂直边缘有较强的响应,垂直细节非常清晰。
Sobel算子水平和垂直方向叠加的梯度图,水平和垂直细节都非常清晰。