在MATLAB中进行imwrite后,像素值发生了变化

时间:2013-10-20 04:51:30

标签: matlab image-processing

imwrite函数表现得很奇怪。我修改了图像的单个像素值。但是,在执行imwrite之后,像素值要么变为全新值,要么保持不变。

function imwriteCheck(input_image,output_image)
a=imread(input_image);
fprintf('\nBefore modification a(1,1,1)=%d\n',a(1,1,1));
a(1,1,1)=50;
fprintf('\nAfter modification a(1,1,1)=%d\n',a(1,1,1));
imwrite(a,output_image);
b=imread(output_image);
fprintf('\nValue at b(1,1,1)=%d\n',b(1,1,1));
end

我用两个图像测试了这个功能,输出如下:

>> imwriteCheck('MOM.jpg','MOMout.jpg')

Before modification a(1,1,1)=206

After modification a(1,1,1)=50

Value at b(1,1,1)=170

>> imwriteCheck('durga.jpg','durgaout.jpg')

Before modification a(1,1,1)=63

After modification a(1,1,1)=50

Value at b(1,1,1)=63

我无法理解为什么会这样。谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

如果您写入jpg文件,由于有损压缩技术,像素值会发生变化。您可以使用无损模式写入jpg文件,但之后您将无法在其他任何位置查看图像。 尝试写入bmp或png文件,你会看到像素值没有改变。