重新编码JPEG图像是一种幂等操作吗?

时间:2013-02-12 21:06:37

标签: jpeg codec jpeg-xr

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

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

在视觉质量方面,T是否是幂等操作? 或者,当我重复T时,图像的质量会不断降低? JPEG-XR编解码器也适用吗?

谢谢!

修改: 由于答案存在冲突,如果你能提供参考资料会很棒!

2 个答案:

答案 0 :(得分:3)

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

JPEG编码分几个步骤完成:

  1. RGB到YUV转换
  2. DCT(更改为频域)
  3. 量化(丢弃DCT的位)
  4. 无损压缩
  5. 解码是向后的过程。

    步骤1和2有舍入误差(特别是在使用整数运算的速度优化编码器中),因此对于幂等重新编码,您需要很幸运地将编码和解码舍入误差变小或相互抵消。< / p>

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

    JPEG XR也使用YUV,因此它可能会遇到一些舍入错误,但OTOH而不是DCT它使用不同的变换可以计算而不会出现舍入错误,所以它应该比其他格式更容易往返JPEG-XR

答案 1 :(得分:1)

根据定义,有损操作通过以(理想情况下)最终用户无法察觉的方式简化表示来丢弃数据。然而,编码器没有神奇的方法来确定哪些像素是重要的,哪些不重要,所以它对所有像素进行相同的编码,即使它们是伪像!

换句话说,编码器将丢失压缩的图像视为无损图像。有损图像将进一步简化,在此过程中丢弃其他数据,因为对于所有编码器都知道,用户打算来表示工件。

以下是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