首页 > 解决方案 > Matlab/Octave 中的二维卷积

问题描述

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

我期待类似于此链接中所示的以下内容。

在此处输入图像描述

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

在此处输入图像描述

可能的原因是什么?

而且,我怎样才能获得预期的输出?

标签: matlaboctaveconvolution

解决方案


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)


推荐阅读