2013-11-02 40 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