2015-07-28 31 views
0

我有一個雙值矩陣(例如22.51,23.15,...),其中每個值對應於一個溫度。因此,矩陣是一個熱圖像。熱像儀的軟件產生一個奇怪的輸出格式,只有這個軟件可以讀取。將雙精度矩陣保存爲圖像

因此,我有兩個問題:

  1. 我怎樣寫的雙矩陣圖形文件,使得圖像質量反映了矩陣的真正價值?
  2. 有沒有一種聰明的,有效的記憶方法來存儲圖像中的溫度值(例如,那麼也可以通過Windows輕鬆解釋)?我想這可能是困難的,因爲圖像格式沒有足夠的位像素?否則,我將不得不將溫度存儲在csv文件中,例如。

謝謝!

+0

你的意思是「圖像質量反映真實的價值」?你只是想創建一個值的圖像?這與使用'imagesc'一樣簡單。但我不確定這會回答你的第一個問題。我想圖像只是一個矩陣,可能具有縮放的數據範圍和一些壓縮。那麼,爲什麼不把矩陣存儲爲例如ascii文件? – TheodorBecker

+0

嘿!是的,好的,imagesc在顯示圖像方面做得不錯。但是,我還沒有想出如何保存/寫入(以正確的大小 - 即每個像素對應一個矩陣元素)。 ASCII文件將是一個選項,例如,不幸的是,這不能直接被視爲由Windows的圖像。我想知道是否有一種圖像格式能夠存儲實際溫度值。 – user1809923

回答

1

這種情況下的一種選擇是使用FITS而不是標準圖像格式。 MATLAB不支持讀取(fitsread)和寫入(fitswrite)這些文件,許多其他程序(如ImageJ或GIMP)可以處理(大部分).fits文件。

在最基本的層面上:

I = rand(100) + 20; %100x100 matrix of doubles 
fitswrite(I,'test.fits'); 
I2 = fitsread('test.fits'); % returns the 100 x 100 matrix of doubles 

我個人的偏好,然而,將分離出兩個功能 - 存儲數據準確,和存儲易於觀看的圖像。您可以使用sprintf或簡單字符串連接來構造文件名。可能使用fileparts刪除原始數據文件的名稱(減去擴展名),然後保存更易讀(.csv)數據版本和更易於查看的圖像版本。

[path, name, ext] = fileparts('my_data_file.dat'); 
% returns name = 'my_data_file' 
% if path is important, use "fullfile" function instead of below lines 
fname = [name,'.csv']; % or however you store data 
iname = [name, '.png']; % or preferred image format 
+0

感謝您指向FITS的指針。我不知道這種格式。你能否詳細說明如何將矩陣寫入png(例如保留大小)? – user1809923

+0

只需將矩陣直接傳遞給'imwrite',但您需要先適當調整它(雙倍值應該是0到1或者您會得到奇怪的輸出)。 – nkjt