我有以下64x64图像,该图像由颜色随机的8x8正方形组成。
现在,我通过PHP的imagejpg()函数推送此图像,该函数默认情况下的质量为75%,并且收到此结果,并带有可见的伪像:
据我了解JPEG,DCT应用于单独的8x8正方形,它们都是纯色。色度子采样还具有远远超过分辨率的能力,无法提供确切的颜色,因此也不起作用。
我怎么能看到8x8正方形内的伪影?是否有可能使用了16x16 DCT?是否在随机位置而不是从角落选择8x8正方形?还有其他可能导致我的方块与8x8 DCT分区不完全对齐的原因吗?
谢谢!
最佳答案
我相信我已经知道了。 DCT不会应用于原始图像上的8x8块,而是会分别应用于每个Y-Cb-Cr颜色通道。 Y通道未进行二次采样,但Cb和Cr进行了二次采样(4:2:0)。
这意味着一个实心的8x8正方形将只有4个水平Cb样本和4个垂直Cb样本。这不是8x8。因此,当DCT划分Cr和Cb通道时,一个8x8的部分将获取属于相邻正方形的Cb和Cr样本。
我将每个正方形的大小都增加到16x16,并且这些伪像都消失了。
我仍然看到很小的一一对应的值,但是我猜想这可以归因于算法或类似算法中的舍入误差。
关于image - 为什么JPEG编码8x8方格图像的JPEG会产生伪像?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41369338/