经过了这段时间对帧间预测部分代码的学习,算是大体上了解了其工作原理。只看理论不看代码,体会不深刻,在看了代码后,有了一种恍然大悟的感觉,很多算法实现和看原理时理解的不一样。下面来整理一下之前写的博客,总结一下运动估计和运动补偿具体的代码实现思路,主要谈一下代码处理的思路,
运动估计
运动估计实际就是当前块在参考图像中搜索找到匹配块的处理过程。在实际代码中入口函数是xMotionEstimation
,然后分为整像素搜索xPatternSearch
,xPatternSearchFast
和亚像素搜索xPatternSearchFracDIF
。
详见http://blog.csdn.net/lin453701006/article/details/70860150。
整体思路:整像素搜索后会得到一个整像素单位的最优MV,这个MV值作为新的起始点进行亚像素搜索。亚像素搜索中先后又进行了1/2像素搜索,找到1/2像素单位的最优MV作为起始点,进行1/4像素搜索,最终得到了1/4像素单位的最优MV。最终得到的有用数据是1/4像素单位的MV和对应的参考帧索引。
在搜索中,由于亚像素位置是没有值的,因此就需要对参考图像进行插值,得到了整像素、1/2、1/4像素位置的图像,存放在了m_filteredBlock[4][4]
中。
详见http://blog.csdn.