2013-03-12 83 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圖像),這就是看到全白圖像的原因。

相關問題