2015-11-13 84 views
1

我已經導入了一個圖像。我已經解析了它的雙精度,並對其執行了一些過濾。Matlab imshow不能正確打印,但imshowpair確實是

當我繪製結果imshow時,雙重圖像太暗。但是當我使用​​來繪製原始圖像和最終圖像時,兩幅圖像都能正確顯示。

我試圖使用uint8,im2uint8乘以255然後使用這些函數,但獲得正確圖像的唯一方法是使用​​。

我該怎麼辦?

+1

你試過'imshow(im,[]);'?另外,請向我們展示您編寫的解析圖像數據的代碼。沒有看到你嘗試過的東西,不可能知道發生了什麼。 – rayryeng

+0

爲了解析我剛纔使用的數據I = im2double(I);另外,我嘗試了你所說的,它的工作!爲什麼?如果我想將圖像存儲在矩陣中,我該怎麼辦?謝謝! – Elpiedras

+0

圖像已經存儲爲矩陣,所以沒有任何意義。但是,使用'im2double'只是將圖像轉換爲'double',如果圖像已經是'double',則什麼都不會發生。這可能是因爲你過濾圖像的方式。你在做某種邊緣檢測嗎?你得到黑暗圖像的原因可能是因爲你的大部分強度都是負面的。 'imshow'假定對於'double'類型,強度的動態範圍是[0,1]',所以'imshow(im,[])'移動了範圍,所以最小值被映射爲0,並且最大爲1. – rayryeng

回答

6

這聽起來像是一個問題,其中大部分強度/顏色數據超出imshow在顯示double數據時所接受的動態範圍。

我也看到你正在使用im2double,但im2double只是將圖像轉換爲雙倍圖像,如果圖像已經雙倍,沒有任何反應。這可能是因爲你過濾圖像的方式。你在做某種邊緣檢測嗎?你得到黑暗圖像的原因可能是因爲你的大部分強度都是負值,或者在0左右徘徊。imshow顯示double類型圖像假定強度的動態範圍是[0,1]。

因此,要解決你的問題的一個辦法就是做:

imshow(im,[]); 

這把顯示,使範圍,最小的值映射到0,最大爲1

如果你想更持久的解決方案,可以考慮創建一個新的輸出變量,這是否對你:

out = (im - min(im(:)))/(max(im(:)) - min(im(:))); 

這將執行相同的漂移的imshow爲您顯示數據。你現在可以做:

imshow(out);