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
的值介于 0
和 255
之间,并且数据类型为 uint8
。卷积后,输出是 double
并且仍然具有 0
和 255
之间的值。
当输入类型为 double
时,imshow
的默认值是缩放色轴,使得 0
为黑色,1
为白色。您的图像几乎完全显示为白色,因为您的大部分值都是 >1
.
要解决此问题(因为您需要 0
到 255
的限制),您可以指定值的范围以用作 imshow
[=39= 的第二个输入]
imshow(C, [0 255])
或者您可以只提供一个空数组作为第二个输入,这样颜色会自动缩放到输入图像的极值
imshow(C, [])
作为旁注,您可以使用 conv2
而不是 convn
,因为您只是在执行 2D 卷积。 conv2
要求所有输入都是浮点数所以我们首先将 M
和 I
转换为 double
.
C = conv2(double(I), double(M), 'same');
或者,如果您有图像处理工具箱(如@rayryeng 所建议的那样),则可以使用 imfilter
,而不必担心将 M
和 I
转换为 double
C = imfilter(I, M);
我不知道为什么当我 运行 下面的代码时我没有得到 '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
的值介于 0
和 255
之间,并且数据类型为 uint8
。卷积后,输出是 double
并且仍然具有 0
和 255
之间的值。
当输入类型为 double
时,imshow
的默认值是缩放色轴,使得 0
为黑色,1
为白色。您的图像几乎完全显示为白色,因为您的大部分值都是 >1
.
要解决此问题(因为您需要 0
到 255
的限制),您可以指定值的范围以用作 imshow
[=39= 的第二个输入]
imshow(C, [0 255])
或者您可以只提供一个空数组作为第二个输入,这样颜色会自动缩放到输入图像的极值
imshow(C, [])
作为旁注,您可以使用 conv2
而不是 convn
,因为您只是在执行 2D 卷积。 conv2
要求所有输入都是浮点数所以我们首先将 M
和 I
转换为 double
.
C = conv2(double(I), double(M), 'same');
或者,如果您有图像处理工具箱(如@rayryeng 所建议的那样),则可以使用 imfilter
,而不必担心将 M
和 I
转换为 double
C = imfilter(I, M);