我正在开发一种新技术,它使用来自预编码视频的已编码H264运动矢量。
我需要知道运动矢量和残差是如何相关的。我需要一些非常具体的答案,我在其他地方找不到答案:
运动矢量是向前还是向后?我的意思是,向量是否指示当前4x4或8x8,8x4 ....块将在下一帧(向前)中的位置。还是相反? (在块中指示该块来自哪里),(向后)。
如果一个块有多个引用(我不知道是否可以)。这些参考是如何加在一起的?意思?加权?
每块(4x8,8x4等)如何补偿残留误差?忽略子块,只是将图像分成8x8块?
我的最终目标是从视频输入中了解每个运动矢量的“准确度”。我只能使用向后预测,如果DCT残差是每块。在那种情况下,我可以通过测量该块的残余误差量来测量运动矢量估计的准确度。
提前致谢!! PD:阅读H264的800页并不容易......
答案 0 :(得分:0)
H264标准是你的朋友。还可以获得Ian Richardson的书籍,比标准书更具可读性(但只有一点点):
“运动向量是向前还是向后?” - 他们落后了。块的MV指向该块的来源。
“如果一个块有多个引用(我不知道这是否可能)。这些引用是如何一起添加的?” - 有可能,请查看x264的weightb和weightp选项。最多可以有两个引用,显式权重在流中编码(我认为作为来自邻居权重的增量,所以通常为零 - 但不引用我的内容;我也认为是否权重如果不使用,则使用的是某个标志,默认情况下权重相等)
“如何补偿剩余误差” - 取决于宏块分区模式和变换大小。 MV用于每个分区,残差用于平铺到分区中的变换大小(因此,如果16x16被分区为两个16x8并且变换是8x8,则每个分区获得两个变换;如果变换是4x4,则每个分区获得(16 / 4)x(8/4)= 8变换)。
对于实验,您可以更改编码器设置以关闭B帧和加权P帧,还可以将分区模式限制为不分区(即仅限16x16)。这样可以更轻松地尝试不同的运动矢量:)