我正在编写一个视频编解码器,使用JPEG压缩技术对每一帧进行处理。到目前为止,我已经编写了YUV、DCT和量化DCT(编码和解码)的代码。我已经编写了YUV422编码,但是我不知道如何进行反向操作(解码)。
为了计算每个像素的YUV,我使用了以下公式:
编码:
Y = 0.299 * R + 0.587 * G + 0.114 * B
U = -0.1687 * R - 0.4187 * G + 0.5 * B + 128
V = 0.5 * R - 0.4187 * G - 0.0813 * B + 128
解码:
R = Y + 1.402 * (V - 128)
G = Y - 0.34414 * (U - 128) - 0.71414 * (V - 128)
B = Y + 1.772 * (U - 128)
这个方程能够完美地完成工作。
现在,为了进行子采样编码,我取出我的图像在YUV中编码,并计算相邻两个像素的和,然后将结果除以2。该结果被设置为2个像素的值。
例如:
为了简单起见,我会取一个介于0到255之间的像素值(不使用RGB组件)。
下面有两个示例,它们具有相同的结果。
Pixel_1 = 15, Pixel_2 = 5 -> (Pixel_1 + Pixel_2) / 2 = 10
Pixel_3 = 10, Pixel_4 = 10 -> (Pixel_3 + Pixel_4) / 2 = 10
如果我将这个等式应用于YUV图像的所有像素,我会得到一个新的图像,但这次是以YUV422子采样编码的。
因此,我想知道如何从YUV422图像中恢复出原始的YUV图像。上面我的例子说明了不可能恢复原始的YUV图像,因为有很多组合会导致相同的结果(这里是10)。然而,我认为有一种方法可以获得几乎相同的原始YUV像素值。请问有人能帮我吗?我真的很迷茫。非常感谢您的帮助。