为什么当我“写”图像时,值会发生变化?

时间:2013-07-30 14:20:27

标签: matlab image-processing binary

我已根据某些标准将图像转换为binary(0& 1)图像。并且,对于某些像素,我将值-1指定为标志。当我运行我的程序时,结果是预期的。但是,当我imwrite结果(图像)时,我得到的值为(0& 255),而值为-1的像素不再存在。这与imwrite有关吗?在编写图像时如何保持我的值?

感谢。

3 个答案:

答案 0 :(得分:1)

当你imwrite每个像素被转换为8位时(取决于文件格式,但通常是这种情况)。这些8位是无符号 int8,因此任何负值都会被截断为0.

要解决此问题,您可能只想使用[0..255]范围内的值来选择特定值从此范围作为您的“旗帜”。

答案 1 :(得分:1)

您不能将-1放入逻辑数组中。 假设我们创建逻辑数组

x = true(2,2);

作业

x(1) = -1;

等于

x(1) = (-1 ~= 0);

因此任何非零值都会转换为true;

对于解决方案,在设置flags之前,将逻辑数组转换为uint8。

img = uint8(255 * img_logical);
img(3,10) = 254; % secret flag
imwrite(img, 'img.jpg');

答案 2 :(得分:1)

您没有提到使用imwrite的参数或您正在使用的文件格式,但我怀疑它是单位格式。这意味着每个像素可以包含的唯一值是01。当您回读图像时,1会转换为255,但您仍然只有两种可能性。当图像在内存中时,您可以根据需要设置值,但在写入文件时它们将再次转换。