sobel算子,matlab实现

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

  

猜你喜欢

转载自blog.csdn.net/sinat_39372048/article/details/82626985