所以我应该在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, [])
感谢您的帮助!
答案 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, [])