MATLAB 中的卷积误差

Convolution Error in MATLAB

我不知道为什么当我 运行 下面的代码时我没有得到 'ada.jpg' 的相同图像:

clear;
I = rgb2gray(imread('ada.jpg'));
figure(1)
imshow(I)
M = int8([0 0 0 ; 0 1 0 ; 0 0 0]);
C = convn(M, I);
figure(2)
imshow(C)

这是两张图片: input image - figure (1) 和 output image - figure (2)

问题是您的输入图像数据 I 的值介于 0255 之间,并且数据类型为 uint8。卷积后,输出是 double 并且仍然具有 0255 之间的值。

当输入类型为 double 时,imshow 的默认值是缩放色轴,使得 0 为黑色,1 为白色。您的图像几乎完全显示为白色,因为您的大部分值都是 >1.

要解决此问题(因为您需要 0255 的限制),您可以指定值的范围以用作 imshow[=39= 的第二个输入]

imshow(C, [0 255])

或者您可以只提供一个空数组作为第二个输入,这样颜色会自动缩放到输入图像的极值

imshow(C, [])

作为旁注,您可以使用 conv2 而不是 convn,因为您只是在执行 2D 卷积。 conv2 要求所有输入都是浮点数所以我们首先将 MI 转换为 double.

C = conv2(double(I), double(M), 'same');

或者,如果您有图像处理工具箱(如@rayryeng 所建议的那样),则可以使用 imfilter,而不必担心将 MI 转换为 double

C = imfilter(I, M);