1.h.264/AVC中的运动估计 本周开始学习运动估计,在学习之前复习了一下毕厚杰的书,然后看了蓝风车的《运动估计综述》ppt,很多地方可以找到这篇资料,写的很有用。所以在探讨MVC中的运动估计之前,先整理一下关于H.264运动估计的内容。这里摘抄一段《基于H.264的多参考帧运动估计快速算法》(石迎波,吴成柯)论文里对多参考帧运动估计原理的描述作为开头:
求帧间预测的运动矢量的过程可以看做利用匹配准则在参考帧的各图像中寻找匹配区域的过程,一般先进行整数像素块匹配,在进行分数像素匹配,求出当前宏块的运动矢量。最直观的方法是全搜索法,即对参考帧所有区域进行穷尽搜索,此方法可以得到全局最优解,精度高,但是效率慢。因此很多快速搜索算法被设计出来,显著提高运动估计的效率,其中比较有名的有Unsymmetrical-Cross Muti-Hexagon Search(UMHexagonS,JVT-F017)和Enhanced Predictive Zonal Search(EPZS,JVT-E023)。下面将用表格描述这两种算法的特点。
上表仅是从JVT文件学习中记录的,还需要实际的进行代码实验验证。(todo:UMHexagonS和EPZS的代码实验,上表还需要修正) 2.MVC中的运动估计 现在转入分析JMVC中的运动估计模块,从MbEncoder::encodeMacroblock往下看代码,可以追踪到MotionEstimation:: estimateBlockWithStart,在这个函数里,首先处理加权预测事宜,加权预测的目的是利用前向和后向预测的加权总和建立对双向内插宏模块的预测,这样可以提高场景变化时的编码效率,尤其是在衰落情况下。【1】然后根据m_cParams.getSearchMode() ,采取不同的运动搜索,根据编码参数的定义,有 SearchMode 4 # Search mode (0:BlockSearch, 4:FastSearch) 当定义4的时候,会进入一种叫TZSearch的运动搜索,这种算法来源于JSVM的svc代码,目前我没有找到相关的论文,如果有论文资料的朋友情不吝赐教。在这里,我先把自己读代码的一些心得写出来,下周再安排代码调试试验。(todo:运动估计的调试实验) 1. IntTZSearchStrukt cStrukt作为本函数的一个重要变量贯穿始终,它将即时存放当前找到的最低sad的值和相关预测点等上下文信息。 2. 函数xTZSearchHelp()将计算给定点的SAD,并且维护cStrukt的上下文结构。 3. 先后经历(钻石形或正方形)搜索,光栅搜索和星形搜索,这些搜索都由基本的钻石形和正方形区域拼接而成。 本周只是学习了一些基础的JVT文档和进行比较粗浅的代码查看,没有进行真正的调试试验,在下周(2009.6.1-2009.6.7)要进行运动估计实际的代码调试试验,进一步学习相关内容。 参考文献: 【1】 H.264与AVS视频标准核心技术比较 http://www.eeworld.com.cn/szds/2009/0514/article_672_2.html (mvbdser) |