帧间编码的率失真优化
帧间预测利用视频时间域的相关性,使用邻近已编码图像像素预测当前图像像素,达到去除空间冗余的目的。
帧间预测采用基于块的运动补偿技术。这些块的大小种类包括了对称和非对称的情况,即帧间预测模式的情况。3D-HEVC的所需遍历的预测模式的代码在http://blog.csdn.net/u011403803/article/details/42099745总结列出。遍历所有预测模式后,最终选出最优预测模式,并且确定运动矢量的过程即是率失真优化的过程。
帧间预测过程主要的技术
- 运动估计
在运动估计的过程确定当前块与已编码的预测块的匹配程度采用绝对误差和(Sum of Absolute Difference,SAD)。同时为达到率失真代价最小,还需考虑编码运动信息所需的比特数。于是对于每个运动矢量的的代价值,采用如下拉格朗日计算式:
J = SAD(x,y) + lamdamotion***Rmotion
在3D-HEVC测试平台中具体的实现如下,以merge模式为例:
Void TEncCu::xCheckRDCostMerge2Nx2N( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, Bool *earlyDetectionSkipMode )
{ //...
//
m_pcPredSearch->encodeResAndCalcRdInterCU( rpcTempCU, m_ppcOrigYuv[uhDepth], m_ppcPredYuvTemp[uhDepth], m_ppcResiYuvTemp[uhDepth], m_ppcResiYuvBest[uhDepth], m_ppcRecoYuvTemp[uhDepth], false );
//...
}
调用的具体计算函数实现如下:
/** encode residual and calculate rate-distortion for a CU block
* \param pcCU
* \param pcYuvOrg
* \param pcYuvPred
* \param rpcYuvResi
* \param rpcYuvResiBest
* \param rpcYuvRec
* \param bSkipRes
* \returns Void
*/
Void TEncSearch::encodeResAndCalcRdInterCU( TComDataCU* pcCU, TComYuv* pcYuvOrg, TComYuv* pcYuvPred, TComYuv*& rpcYuvResi, TComYuv*& rpcYuvResiBest, TComYuv*& rpcYuvRec, Bool bSkipRes )
{//...
//这里调用函数,最终会得到预测的代价值,失真和码率
xEstimateResidualQT( pcCU, 0, 0, 0, pcYuvOrg, pcYuvPred, rpcYuvResi, pcCU->getDepth(0), dCost, uiBits, uiDistortion, &uiZeroDistortion );
//...
}
-
运动矢量预测
-
多参考图像和加权预测