I = imread ("lena.jpg");
%imshow(I);
K = I;
C = conv2(I, K);
imshow(C);
我期望this link中所述类似以下内容。
但是,我的八度输出为空:
可能是什么原因?
然后,如何获得预期的输出?
答案 0 :(得分:3)
imshow()
的期望值为[0-255]。卷积之后,所有值都将超过255。因此,当您使用imshow(C)
时,matlab / octave会使用uint8()
进行类型转换。您的所有值均等于255,结果是白色图像。 (0 =黑色,255 =白色)。
您还应该考虑以下几点:
在卷积中添加选项“相同”以保留图像的原始大小:conv2(I,K,'same')
如果仅像这样应用卷积,则会获得很强的边框效果,因为图像的中心值将比图像边界中的值多倍的时间。您应该添加一个补偿矩阵:
border_compensation = conv2(ones(size(K)),ones(size(K)),'same')
C = conv2(I,K,'same')./border_compensation
归一化最终结果(如果您确实想要问题中指出的那种输出,请不要考虑第2点)
C = uint8(C/max(C(:))*255)