将双精度矩阵保存为图像

问题描述:

我有一个双值矩阵(例如22.51,23.15,...),其中每个值对应于一个温度。因此,矩阵是一个热图像。热像仪的软件产生一个奇怪的输出格式,只有这个软件可以读取。将双精度矩阵保存为图像

因此,我有两个问题:

  1. 我怎样写的双矩阵图形文件,使得图像质量反映了矩阵的真正价值?
  2. 有没有一种聪明的,有效的记忆方法来存储图像中的温度值(例如,那么也可以通过Windows轻松解释)?我想这可能是困难的,因为图像格式没有足够的位像素?否则,我将不得不将温度存储在csv文件中,例如。

谢谢!

+0

你的意思是“图像质量反映真实的价值”?你只是想创建一个值的图像?这与使用'imagesc'一样简单。但我不确定这会回答你的第一个问题。我想图像只是一个矩阵,可能具有缩放的数据范围和一些压缩。那么,为什么不把矩阵存储为例如ascii文件? – TheodorBecker

+0

嘿!是的,好的,imagesc在显示图像方面做得不错。但是,我还没有想出如何保存/写入(以正确的大小 - 即每个像素对应一个矩阵元素)。 ASCII文件将是一个选项,例如,不幸的是,这不能直接被视为由Windows的图像。我想知道是否有一种图像格式能够存储实际温度值。 – user1809923

这种情况下的一种选择是使用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