【问题标题】:Why does JPEG encoding an 8x8 checkered image produce artifacts?为什么 JPEG 编码 8x8 方格图像会产生伪影?
【发布时间】:2016-12-29 05:22:35
【问题描述】:

我有以下 64x64 图像,由随机颜色的 8x8 正方形组成。

现在,我通过 PHP 的 imagejpg() 函数推送此图像,默认情况下该函数的质量为 75%,我收到此结果,并带有可见的伪影:

据我了解 JPEG,DCT 应用于单个 8x8 正方形,它们都是纯色。色度子采样也有足够的分辨率来提供准确的颜色,所以这也不应该有效果。

我怎么会在 8x8 方格内看到伪影?是否有可能使用 16x16 DCT?是在随机位置而不是从角落选择 8x8 方格吗?是否有其他可能的原因会导致我的方格与 8x8 DCT 分区不完全一致?

谢谢!

【问题讨论】:

  • 使用 16×16 方格或禁用色度二次采样。

标签: image compression jpeg


【解决方案1】:

我相信我已经弄明白了。 DCT 不应用于原始图像上的 8x8 块,而是分别应用于每个 Y-Cb-Cr 颜色通道。 Y 通道没有二次采样,但 Cb 和 Cr 被二次采样一半(4:2:0)。

这意味着一个实心的 8x8 正方形将只有 4 个水平 Cb 样本和 4 个垂直 Cb 样本。这不是 8x8。因此,当 DCT 对 Cr 和 Cb 通道进行分区时,一个 8x8 的部分将获取属于相邻方格的 Cb 和 Cr 样本。

我已将每个正方形的大小增加到 16x16,并且伪影消失了。

我仍然看到小的非一值,但我猜这可能归因于算法中的舍入错误或类似的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-07
    • 2011-05-06
    • 2015-01-26
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多