- 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算子水平和垂直方向叠加的梯度图,水平和垂直细节都非常清晰。
转自 http://blog.youkuaiyun.com/zhufanqie/article/details/8709910