Matlab / Octave中的2D卷积

时间:2018-07-10 09:05:46

标签: matlab octave convolution

I = imread ("lena.jpg");
%imshow(I);
K = I;
C = conv2(I, K);
imshow(C);

我期望this link中所述类似以下内容。

enter image description here

但是,我的八度输出为空:

enter image description here

可能是什么原因?

然后,如何获得预期的输出?

1 个答案:

答案 0 :(得分:3)

imshow()的期望值为[0-255]。卷积之后,所有值都将超过255。因此,当您使用imshow(C)时,matlab / octave会使用uint8()进行类型转换。您的所有值均等于255,结果是白色图像。 (0 =黑色,255 =白色)。

您还应该考虑以下几点:

  1. 在卷积中添加选项“相同”以保留图像的原始大小:conv2(I,K,'same')

  2. 如果仅像这样应用卷积,则会获得很强的边框效果,因为图像的中心值将比图像边界中的值多倍的时间。您应该添加一个补偿矩阵:

    border_compensation = conv2(ones(size(K)),ones(size(K)),'same') C = conv2(I,K,'same')./border_compensation

  3. 归一化最终结果(如果您确实想要问题中指出的那种输出,请不要考虑第2点)

    C = uint8(C/max(C(:))*255)