11

JPEG 压缩编码过程将给定的图像分割成 8x8 像素的块,在未来的有损和无损压缩中使用这些块。[来源]

还提到,如果图像是多个 1MCU 块(定义为最小编码单元,“通常在两个方向上 16 个像素”),则可以对 JPEG 进行无损更改。[来源]

我正在处理产品图片,并且想知道在我的最终图片尺寸中使用 16 的倍数(例如,使用尺寸为 480 像素 x 360 像素的图片)与非16(例如 484x362)。在此示例中,我对最终图像的进一步更改、编辑或重新压缩不感兴趣。

为了更接近一个我知道必须有很大普遍性的特定答案:给定一个 64k 的 480x360 图像,并在 Photoshop [示例]中以最高质量保存:

  • 我可以预期 484x362 的图像会有任何质量损失吗
  • 我可以期望增加多少文件大小(对于这个例子,额外的空间是白色像素)
  • 比 8px 网格更大还有其他缺点吗?

我知道使用该特定示例是任意的,但它仍然会有所帮助(对于我和可能任何其他考虑图像大小的人)了解我在打破非 8px 网格时要处理的妥协程度。

这里的关键问题是我曾经争论过的问题是 8 像素可分割图像是否比不能被 8 像素整除的图像质量更高。

4

5 回答 5

21

8 像素是截止值。原因是 JPEG 图像只是一个 8x8 DCT 块的数组;如果图像分辨率在两个方向上都不是 mod8,则编码器必须将两侧填充到下一个 mod8 分辨率。这在实践中并不是很昂贵。更糟糕的是图像具有不位于块边界上的清晰黑线(例如带有信箱的图像)的情况。这在视频编码中尤其成问题。这是一个问题的原因是锐线的频率变换是系数的高斯分布 - 导致要编码的位数巨大。

对于那些好奇的人来说,在帧内压缩(例如 JPEG 图像)中填充边缘的最常见方法是镜像边缘之前的像素线。例如,如果你需要填充三行,X线是边缘,X+1线等于X线,X+2线等于X-1线,X+3线等于X-线2. 这非常有效地最小化了额外行的变换系数的成本。

然而,在帧间编码中,填充算法通常只是简单地复制最后一行,因为镜像方法不适用于帧间压缩,例如视频压缩。

于 2008-09-16T17:57:30.070 回答
4

有时由于二次采样,您需要使用 16 个像素边界而不是 8 个;在编码过程中,每第二个像素都会被丢弃,这些 8x8 DCT 块以 16x16 开始,并将解码回 16x16。在最高质量设置下这不会是问题。

于 2008-09-22T19:57:56.727 回答
3

大小为 8 倍的 JPG 也可以在没有质量损失的情况下旋转/翻转。例如 gthumb 可以在 Linux 上执行此操作。

于 2008-09-17T15:04:41.867 回答
2

图像尺寸为 8 或 16 的倍数不会对磁盘​​大小产生太大影响,但如果您可以将视觉内容排列到 8x8 像素网格(例如,如果存在重复图案或图像中的纹理。

于 2008-09-16T17:57:56.047 回答
1

托梅茨基所说的。如果您没有正确的倍数,则无损翻转和旋转算法将不起作用。那是因为可以安全忽略的右侧/底部的填充现在最终在左侧/顶部,它不能。

于 2008-09-22T19:52:42.153 回答