我有一组介于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不保存我的价值观?这是转换问题吗?
答案 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))