2013-03-12 46 views
1

在Matlab中,我创建了一个带有fspecial()的5x5高斯内核。我将内核分配给一个名为h的变量。我通过imread()在图像中读取并将图像分配给一个名为Im的变量。为什么conv2()返回一个白色图像而不是过滤图像?

图像上有一些随机噪声,我的意图是看我如何消除噪音。现在,我想要将图像Im与内核h进行卷积。我试图使用conv2()这个功能:conv2(Im, h);

但事实证明,当我做imshow()时,我得到一个空的白色图片。我预计结果是与内核h卷积后的图像Im的模糊版本。

这是我做过什么:

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

我试着用其他的图片相同的过程,我得到一个空的白色画面,当我做imshow()了。我做错了什么?

+0

试试'imagesc'。此外,Im和C1的内容如何? – 2013-03-12 14:40:05

+1

@Hugues你的意思是'imagesc',对吧? – 2013-03-12 14:44:26

+0

正确的功能是'imfilter'。有了'conv2',你可能需要考虑频道。 – 2013-03-12 14:45:03

回答

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在1(不是255)处使像素饱和(对于double图像),这就是看到全白图像的原因。

相关问题