因此,我应该在倍频程的图像上应用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。
'same'
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, [])