Matlab将矩阵保存为具有不同值的图像

时间:2013-11-02 17:07:55

标签: image matlab matrix pgm

我有一组介于0和1之间的值。我将这些值设置在0到255之间后,我想将它们保存为pgm格式的灰度图像。问题在于,在我将其保存为图像后,我在读取图像时得到的值与之前的矩阵不同,其值介于0和255之间。

这是一个简单的例子:

>> 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 个答案:

答案 0 :(得分:2)

  

发生了什么事?为什么matlab不保存我的价值观?这是一个   转换问题?

是的,这是转换问题,不需要。 MatLab会自动为您进行转换。

因此,请尝试存储a而不是b

imwrite(a, 'test.pgm'); 

引用imwrite

的文档
imwrite(A,filename)
  

如果A是数据类型 double single 的灰度或RGB彩色图像,   然后imwrite假设动态范围自动为[0,1]和   将数据缩放255 ,然后将其作为8位值

写入文件

修改

如果您想坚持手动转换,则需要输入强制转换为uint8

b = uint8(floor(255 * a))

答案 1 :(得分:1)

我认为你写的值应该是整数。

尝试b = uint16(floor(255 * a))