matlab - 使用 JPEG 压缩但没有质量下降 (MATLAB)

标签 matlab image-processing jpeg image-compression

你好,

我试图证明将图像压缩很多次 (极多,如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 次保存之间存在可测量的差异,但与原始和第一次之间的差异相比,它们是微不足道的。

原文:
Original

第一次保存:
First save

第 100 次保存:
100th save

关于matlab - 使用 JPEG 压缩但没有质量下降 (MATLAB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29914749/

相关文章:

matlab - 在 MATLAB 和 OpenCV 之间提取不同的 SURF 特征?

matlab - 循环中的 Common Lisp 暂停命令

java - java中的图像处理和比较

png - 图像从 jpg 转换为 png 时质量会下降吗?

pdf - 使用 Imagemagick 将一系列页面从 pdf 提取到 jpeg 时输出文件名

matlab - 未校准的多 View 重建深度估计

matlab - 如何标准化直方图以使每个 bin 的总和为 1?

python - 使用 OpenCV warpPerspective 时如何显示整个图像

iphone - 仅在 UIImageView 的非透明像素上有效地检测触摸

python-3.x - 遍历文件夹并将 png 转换为 jpg