你好,
我试图证明将图像压缩很多次 (极多,如500次),会出现质量下降。从 据我了解,当图像保存多次时会发生这种情况 在 JPEG 中。我尝试编写 MATLAB 代码来执行此操作:
clc;close all;clear;
for i = 1:500
if i==1
a = imread('e:\ismoka_small.jpg');
currFileName = 'e:\multipleJpegs\001.jpg';
else
a = imread(currFileName);
if i <= 10
zeross = '00';
elseif i <= 100
zeross = '0';
elseif i <= 1000
zeross = '';
end
currFileName = ['e:\multipleJpegs\' zeross num2str(i-1) '.jpg'];
end
imwrite(a, currFileName, 'jpeg');
end
然而,最终结果显示没有发生降级,所有 500 张图像的文件大小都相同。我想知道是否有人可以帮助我并解释为什么会这样? 还是我对 JPEG 算法有误?提前致谢:)
最佳答案
JPEG 压缩造成的损失是由于量化,本质上是舍入或截断。如果您始终使用相同的质量设置进行保存,则量化过程很可能每次都会产生相同的结果,尤其是如果您多次这样做 - 像素会退化,直到它们达到它们在往返过程中幸存下来的程度,然后他们就不会再改变了。
如果您在重新保存之前对图像进行任何更改,这些更改将导致进行更改的 8x8 或 16x16 区域质量下降。
如果您每次都以不同的质量设置保存,则每次都会获得不同的量化,并且图像肯定会降级,即使有时您使用更高的设置也是如此。
这里我用自己的图片重复测试,使用Python的PIL打开和保存图片100次。我还打开并保存了一次,看看是否有任何额外的退化 - 没有区别。我已将 JPEG 重新保存为 PNG,以防止 StackOverflow 的图像引擎造成任何进一步的损失。
虽然第一次和第 100 次保存之间存在可测量的差异,但与原始和第一次之间的差异相比,它们是微不足道的。
原文:
第一次保存:
第 100 次保存:
关于matlab - 使用 JPEG 压缩但没有质量下降 (MATLAB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29914749/