在 Octave 中实现 Sobel 梯度
Implementing Sobel Gradient in Octave
所以我应该在 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) 你用内核对你的图像进行卷积,而不是相反。主要是因为您正在使用 '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, [])
所以我应该在 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) 你用内核对你的图像进行卷积,而不是相反。主要是因为您正在使用 '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, [])