2011-03-08 109 views
0

我正在使用matlab進行一些圖像處理。所以在這方面, 我有一個關於Matlab/Octave imwrite()函數的問題。matlab函數在寫入輸出時如何縮放數據imwrite()

當我打電話imwrite爲:

imwrite(img,'file.bmp'); 

其中IMG是類/類型在Matlab雙數據和具有負值以及正值。

Matlab imwrite()函數如何縮放這些數據來寫入一個BMP值在[0,255]之間的BMP圖像。我不明白imwrite.m

它做什麼類型的縮放/調整範圍的代碼,它是: -

1]

img = img - min(min(img)); 

img = img .* ((255)/max(max(img))); 

或任何其他類型的縮放。

謝謝。

-AD。

+0

不是一個答案,而是一個建議。你爲什麼不自己做轉換,並用uint8s提供imwrite? – 2011-03-08 19:41:34

回答

2

看起來你正在寫2D矩陣。該矩陣將被寫爲索引圖像。如果沒有提供色彩地圖,圖像將是灰度。

如果矩陣imguint8類,則IMWRITE將實際值寫入圖像文件。

如果矩陣爲double,則IMWRITE假定所有值都介於0和1之間。所有負值將被截斷爲0,並且所有大於1的值都將爲1.然後,它們被縮放255並轉換爲uint8。

請參閱Class SupportIMWRITE文檔。

編輯

這裏是你如何能重現轉換:

img = (rand(10)-0.5)*3; 
imwrite(img,'test.bmp'); 
IMG = imread('test.bmp'); 

img2 = img; 
img2(img2<0)=0; 
img2(img2>1)=1; 
img2 = uint8(img2*255); 

%# compare imwrite vs. manual conversion 
isequal(IMG,img2) 

ans = 

    1