在Octave中实现Sobel梯度

时间:2018-04-06 15:01:29

标签: matlab image-processing octave sobel

所以我应该在Octave中对图像应用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 个答案:

答案 0 :(得分:2)

几个小错误,你的问题得到解决:

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