在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()
时,我得到一张空的白色图片。我做错了什么?
答案 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],conv2
后double
image
值大致相同。但是,double
使像素(对于{{1}}图像)在1(而不是255)处饱和,这就是您看到的全白图像的原因。
答案 1 :(得分:0)
白色图像是因为您尚未完成归一化。 用C1 = conv2(Im,h)转换图像后,在maplab中,如果检查C1变量,您会发现这些值非常高。
要标准化图像,请将图像除以255,然后执行imshow。 imshow(c1 / 255);