2013-11-02 39 views
2

我有一組介於0和1之間的值。將這些值置於0和255之間後,我想將它們保存爲pgm格式的灰度圖像。問題是,當我將其保存爲圖像,當我讀到像我得到的值從值0和255Matlab將矩陣保存爲具有不同值的圖像

之間。在此之前的矩陣不同的是一個簡單的例子:

>> a=[0.5,1,0.3]   

a = 

0.5000 1.0000 0.3000 


>> b=single(floor(255 * a)) 

%these are the values I want in the image 
b = 

127 255 76 

imwrite(b, 'test.pgm'); 

% i don't want these values!!! 
c=imread('test.pgm')  

c = 

255 255 255 

發生了什麼事?爲什麼matlab不保存我的值?這是一個轉換問題嗎?

回答

2

發生了什麼?爲什麼matlab不保存我的值?這是一個 轉換問題?

是的,這是轉換問題,不需要。 MatLab自動爲您做轉換。

因此,嘗試存儲a代替b

imwrite(a, 'test.pgm'); 

imwrite

imwrite(A,filename) 

文檔引用如果A是一個灰度或數據類型的RGB彩色圖像single, 然後imwrite假定動態範圍爲[0,1]和自動 作爲8位值它寫入文件之前由縮放255數據


EDIT

如果你想堅持到手動轉換,就需要強制類型轉換爲uint8

b = uint8(floor(255 * a)) 
+0

感謝您提供此信息。我知道這一點,但是當我通過將值乘以255並將其與matlab縮放比較將[0,255]中縮放的值保存在文件中時,這些值之間存在一些差異。發生這種情況是因爲我使用floor()來保存值,Matlab使用ceil()。也謝謝你! – mad

+1

@mad Gosh!這是你的電話。更新我的編輯。 – jkshah

1

我認爲你寫的值應該是整數。

嘗試b = uint16(floor(255 * a))

+0

謝謝,這有助於很多! – mad