sobel算子,matlab实现

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

  

你可能感兴趣的:(图像相关)