为什么conv2()会返回白色图像而不是过滤后的图像?

时间:2013-03-12 14:35:17

标签: matlab image-processing

在Matlab中,我使用fspecial()创建了一个5x5高斯内核。我将内核分配给一个名为h的变量。我通过imread()读取图像并将图像分配给名为Im的变量。

图像上有一些随机噪音,我的目的是看看如何消除噪音。现在,我想用内核Im卷积图像h。我尝试以这种方式使用函数conv2()conv2(Im, h);

但事实证明,当我做imshow()时,我得到一张空的白色照片。我预计在使用内核Im进行卷积后,结果将成为图像h的模糊版本。

这就是我所做的:

>> Im = imread('image.jpg');
>> h = fspecial('gaussian', 5, 1.0);
>> C1 = conv2(Im, h);

我尝试了与其他图片相同的过程,当我imshow()时,我得到一张空的白色图片。我做错了什么?

2 个答案:

答案 0 :(得分:4)

您似乎正在处理uint8类型的图片。在这种情况下,过滤可能会使像素的值饱和并导致伪像。试试:

Im = im2double( imread( 'image.jpg' ) );
h = fspecial( 'gaussian', 5, 1.0 );
C1 = imfilter( Im, h );
figure; imshow( C1, [] ); title( 'filtered image' );

PS
我不确定,但我认为在Im作为uint8阅读时,您的值范围为[0..255],conv2double image值大致相同。但是,double使像素(对于{{1}}图像)在1(而不是255)处饱和,这就是您看到的全白图像的原因。

答案 1 :(得分:0)

白色图像是因为您尚未完成归一化。 用C1 = conv2(Im,h)转换图像后,在maplab中,如果检查C1变量,您会发现这些值非常高。

要标准化图像,请将图像除以255,然后执行imshow。 imshow(c1 / 255);