为什么JPEG编码8x8方格图像会产生伪影?

时间:2016-12-28 20:33:55

标签: image compression jpeg

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

enter image description here

现在,我通过PHP的imagejpg()函数推送这个图像,默认情况下它的质量达到了75%,我收到了这个结果,带有可见的文物:

enter image description here

enter image description here

据我了解JPEG,DCT适用于各个8x8正方形,均为纯色。色度子子采样也具有足够的分辨率来提供精确的颜色,因此也不会产生影响。

为什么我看到8x8方块内的文物?是否有可能使用16x16 DCT? 8x8正方形是在随机位置选择的,而不是从角落选择的吗?是否有其他可能的原因会导致我的方块与8x8 DCT分区不完美对齐?

谢谢!

1 个答案:

答案 0 :(得分:2)

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

这意味着固体8x8正方形将只有4个水平Cb样本和4个垂直Cb样本。这不是8x8。因此,当DCT划分Cr和Cb通道时,8x8部分将采用属于相邻正方形的Cb和Cr样本。

我已将每个方块的大小增加到16x16,并且工件已经消失。

我仍然看到一个小的逐个值,但我猜这可以归因于算法中的舍入误差或类似值。