代码之家  ›  专栏  ›  技术社区  ›  daiana05

在倍频程中实现Sobel梯度

  •  1
  • daiana05  · 技术社区  · 7 年前

    因此,我应该在倍频程的图像上应用Sobel滤波器,但我不允许使用图像包中的任何函数。我写了代码,但我的输出只是一个黑色图像。以下是我目前掌握的情况:

    %Sobel Gradient
    
    kx= [1 ,0 ,-1; 2,0,-2; 1, 0 ,-1];
    ky= [1,2,1; 0,0, 0; -1, -2 ,-1];
    
    H = conv2(kx,im2double(my_img),'same');
    V = conv2(ky,im2double(my_img),'same');
    E = sqrtm(H.*H + V.*V);
    figure 4
    imshow(E, [])
    

    谢谢你的帮助!

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ander Biguri    7 年前

    很少有小错误,您的问题已经解决:

    1) 您通过内核来卷积图像,而不是相反。主要是因为您正在使用 'same' 这将输出第一个输入的大小3x3。

    2) 你不想 matrix square root ,只是正常的元素平方根。

    my_img=imread('cameraman.tif') % available in MATLAB, not sure octave
    kx= [1 ,0 ,-1; 2,0,-2; 1, 0 ,-1];
    ky= [1,2,1; 0,0, 0; -1, -2 ,-1];
    
    H = conv2(im2double(my_img),kx,'same');
    V = conv2(im2double(my_img),ky,'same');
    E = sqrt(H.*H + V.*V); % or sqrt(H.^2+V.^2)
    figure
    imshow(E, [])
    

    enter image description here