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算子水平和垂直方向叠加的梯度图,水平和垂直细节都非常清晰。