sobel運算元,matlab實現

澍yeah發表於2018-09-11
轉:https://blog.csdn.net/zhufanqie/article/details/8709910
  1. 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梯度');

     

  2.  

 

  結果為:

可以看出:

Sobel運算元中的垂直模板得到的梯度圖,由於梯度方向與邊緣走向垂直,所以該梯度圖對水平邊緣有較強的響應,從而水平細節資訊非常清晰;

sobel運算元中的水平模板得到的梯度圖,它對垂直邊緣有較強的響應,垂直細節非常清晰。

Sobel運算元水平和垂直方向疊加的梯度圖,水平和垂直細節都非常清晰。

  

相關文章