【问题标题】:Is re-encoding JPEG images an idempotent operation?重新编码 JPEG 图像是幂等操作吗?
【发布时间】:2015-09-15 22:50:32
【问题描述】:

我知道 JPEG 压缩是有损的。 我有两个问题:

给定一个操作 T:
1. 拍摄 JPEG-80 图像
2. 将其解码为字节缓冲区
3. 将给定的字节缓冲区编码为JPEG-80

就视觉质量而言,T 是幂等运算吗? 或者当我重复 T 时,图像的质量会持续下降吗? JPEG-XR 编解码器也是如此吗?

谢谢!

编辑: 由于存在相互矛盾的答案,如果您能提供参考,那就太好了!

【问题讨论】:

  • 我不确定,但我不会指望它。特别是在不同的引擎之间。即使使用单个引擎,当应用两次时,发生的近似值也可能不会产生相同的区域。
  • 我会说不。每次编码为jpeg后,都会有更多的“损失”。

标签: jpeg codec jpeg-xr


【解决方案1】:

无法保证,但可能会发生。尤其是如果你重复编码 -> 解码 -> 编码 -> 解码过程足够多次,它最终会固定在一个固定点上并停止进一步降低质量(只要你坚持相同的质量和相同的编码器)。

JPEG 编码分几个步骤完成:

  1. RGB 到 YUV 的转换
  2. DCT(转换到频域)
  3. 量化(丢弃 DCT 的位)
  4. 无损压缩

而解码倒过来也是同样的过程。

第 1 步和第 2 步存在舍入误差(尤其是在使用整数数学的速度优化编码器中),因此对于幂等重新编码,您需要幸运地使编码和解码舍入误差较小或相互抵消。

步骤 3 是主要的有损步骤,实际上是幂等的。如果您的解码像素转换为足够相似的 DCT,它将再次量化为相同的数据!

JPEG XR 也使用 YUV,因此它可能会遇到一些舍入错误,但 OTOH 而不是 DCT,它使用不同的变换,可以在没有舍入错误的情况下进行计算,因此往返 JPEG-XR 应该比其他格式更容易.

【讨论】:

  • I did some experiments,在 20 到 50 步后到达固定点。在一种情况下,固定点循环的长度为 2。
【解决方案2】:

根据定义,有损操作通过以一种(理想情况下)最终用户不会注意到的方式简化表示来丢弃数据。但是,编码器没有确定哪些像素重要哪些不重要的神奇方法,因此它对所有像素进行平等编码,即使它们是伪像!

换句话说,编码器会将有损压缩的图像视为无损图像。有损图像将被进一步简化,丢弃过程中的额外数据,因为就编码器所知,用户打算表示工件。

以下是 JPEG 生成丢失的一些示例:

http://vimeo.com/3750507

http://en.wikipedia.org/wiki/File:JPEG_Generarion_Loss_rotating_90_(stitch_of_0,100,200,500,900,2000_times).png

【讨论】:

  • 没那么简单。 JPEG 并不总是丢弃信息,它会量化信息。如果输入数据恰好与量化数据完美匹配,则它根本不会改变。这有点类似于减少图像中的颜色数量 - 如果输入图像已经有很少的颜色,那么它不会改变(除了 JPEG 适用于 DCT 频率而不是颜色)。
  • 这可以解释为什么 Wikipedia 的示例将图像旋转了 90º 您应该将其放入答案中,或者编辑我的。
猜你喜欢
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
相关资源
最近更新 更多