matlab中的imwrite改变了实际的图像数据

时间:2018-05-21 13:41:13

标签: matlab

下面是使用imwrite读取和写入(复制)图像的Matlab脚本。我希望新写入的文件与原始文件相同,但图像及其直方图会有所不同。该脚本如下

%=====================================================================%
I = imread('lena.jpg');
I = imnoise(I,'salt & pepper',0.05);
I = im2double(I);

figure, imshow(I);
figure, imhist(I);

[M,N] = size(I);
J = I;
for i = 1 : M
    for j = 1 : N
        J(i,j) = I(i,j);
    end
end
imwrite(J,'I1.png'); %tried with jpg and bmp, but same result
J = imread('I1.jpg');

figure, imhist(J); 

%=====================================================================%

Histogram of expected same images

请帮助我理解为什么这些图片会有所不同

1 个答案:

答案 0 :(得分:1)

我尝试运行Lena.jpg和Lena.png的代码,用于读取输入图像和写入输出图像。 使用 .jpg 时,直方图不同。此压缩格式为lossy,因此预计会丢失一些信息。如果你想防止这种损失,你必须在使用imwrite时指定无损。

imwrite(J,'I1.jpg','Mode','lossless');

使用 .png 时,直方图与此压缩格式lossless相同。

相关问题