1

所以我应该对 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, [])

感谢您的帮助!

4

1 回答 1

2

几个小错误,你的问题就解决了:

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

2)您不需要矩阵平方根,只需要正常的元素平方根。

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, [])

在此处输入图像描述

于 2018-04-06T15:18:07.580 回答