2014-10-20 129 views
8

我已經通過imfilter命令將圖像與LOG過濾器進行了關聯。爲什麼LOG過濾器正在返回黑色背景圖像?

z=imfilter(I,fspecial('log',11,1.5)); 
figure 
imshow(z); 

圖片:

enter image description here

+0

展會我們一些代碼和一些結果!我希望我能用一行代碼來理解整個圖像處理過程中的問題:(但是,圖像是否是uint8或double? – 2014-10-20 16:22:01

+0

無法發佈圖像:/因爲落後了10個左右的點,但示例代碼如下所示z = imfilter(I,fspecial('log',11,1.5));%I是圖像11是蒙版大小,1.5是西格瑪的值 figure,imshow(z); – 2014-10-20 16:24:29

+0

將它上傳到某處,我將發佈鏈接。將它放入 – 2014-10-20 16:25:42

回答

4

轉換的圖像double(雙精度)會解決這個問題,因爲imread命令把在默認情況下unit8(無符號整數)格式的圖像。

+0

我會考慮使用'im2double'而不是''double',因爲'im2double'也會使強度標準化,使它們在'[0,1]'之間。只是投擲到「雙」不會做到這一點。另外,'imread'在默認的'uint8'中加載圖像在技術上是不正確的。每個像素的精度在imread解析和檢查的圖像頭部中定義。例如,TIF可以是8,16或24或32位。這只是大部分圖像使用每個強度/顏色8位,所以我們自然會認爲它是「默認」。 – rayryeng 2014-10-22 16:18:16

+1

但im2double在這種情況下不起作用,因爲強度將位於[0,1]中,但我們不希望將強度歸一化,如果我們這樣做,所得到的圖像將是黑色的。我已經嘗試過並得到了準確的結果。 – 2014-11-01 08:48:42

+1

完全廢話。用於'雙'型圖像的'imshow'是**設計**以在[[0,1]'之間獲得強度,其獲得**可視化**爲黑色和白色之間的強度。誰給了你評論+1票,誰也不知道他們在談論什麼。 – rayryeng 2014-12-17 17:09:36

3

你的問題是,你無法正確顯示的結果。

您的結果是在範圍0-31,但您需要將其轉換爲0-255來繪製它!

imshow(mat2gray(z)) 

enter image description here

+1

爲什麼結果在範圍0-31? – 2014-10-20 16:39:41

+0

因爲您正在應用日誌過濾器,並且過濾器沒有標準化結果。 – 2014-10-20 16:43:58

+3

@AnderBiguri - 您還可以執行'imshow(z,[])',這將對比歸一化顯示結果,以顯示最小值和最大值映射到「[0,1]」的位置。否則,好地方! – rayryeng 2014-10-20 17:02:16

2

解決此問題的最佳方法不是更改圖像,而是更改imshow的顯示方式。試試這個:

>> imshow(z, [0, 31]); 

或者,更好的,試試這個:

>> imshow(z, []); 

將重新縮放圖像自動映射最小值爲0,最大值爲255。