1

在 Matlab 中,我用fspecial(). 我将内核分配给一个名为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()。我做错了什么?

4

2 回答 2

4

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

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

PS
我不确定,但我认为当Imuint8的值在[0..255]范围内时,conv2你的double值在大致相同的范围内。但是,image饱和像素(对于double图像)为 1(不是 255),这就是您看到全白图像的原因。

于 2013-03-12T14:54:05.310 回答
0

白色图像是因为您没有进行标准化。在您使用 C1 = conv2(Im, h) 对您的图像进行 conv2 后,在 maplab 中,如果您检查 C1 变量,您会发现这些值非常高。

要标准化您的图像,将图像除以 255 并执行 imshow。imshow(c1/255);

于 2019-03-05T17:01:24.603 回答