VTM1.0代码阅读:xTZSearch函数

xTZSearch是运动估计过程中的一种整像素搜索模式,比起全搜索虽然精度下降一点,但是时间复杂度会降低太多,所以运动估计过程中的整像素搜索一般都使用TZSearch。

TZSearch的搜过流程如下:

  1. 确定起始搜索点。
  2. 以步长1开始,以菱形模板在搜索范围内进行搜索,其中步长以2的整数次幂的形式递增,选出率失真代价最小的点作为该步骤的搜索结果。
  3. 若步骤2选出的最优点对应的步长为1,则需要在该点周围进行两点搜索
  4. 若步骤2选出的最优点对应的步长大于某个阈值,则以该最优点为中心,在一定范围内做全搜索,选择率失真代价最小的作为最优点。
  5. 以步骤4得到的最优点为起始点,重复步骤2-4。直到相邻两次细化搜索得到的最优点一致时停止。此时得到最优匹配点和mv

cStruct存储了匹配模板像素和搜索区域像素,rcMv是AMVP选择的最优mvp

Void InterSearch::xTZSearch( const PredictionUnit& pu,
                             IntTZSearchStruct&    cStruct,
                             Mv&                   rcMv,
                             Distortion&           ruiSAD,
                             const Mv* const       pIntegerMv2Nx2NPred,
                             const Bool            bExtendedSettings,
                             const Bool            bFastSettings)
{
   
  const bool bUseRasterInFastMode                    = true; //toggle this to further reduce runtime

  const Bool bUseAdaptiveRaster                      = bExtendedSettings;
  const Int  iRaster                                 = (bFastSettings && bUseRasterInFastMode) ? 8 : 5;
  const Bool bTestZeroVector                         = true && !bFastSettings;
  const Bool bTestZeroVectorStart                    = bExtendedSettings;
  const Bool bTestZeroVectorStop                     = false;
  const Bool bFirstSearchDiamond                     = true;  // 1 = xTZ8PointDiamondSearch   0 = xTZ8PointSquareSearch
  const Bool bFirstCornersForDiamondDist1            = bExtendedSettings;
  const Bool bFirstSearchStop                        = m_pcEncCfg->getFastMEAssumingSmootherMVEnabled();
  const UInt uiFirstSearchRounds                     = bFastSettings ? (bUseRasterInFastMode?3:2) : 3;     // first search stop X rounds after best match (must be >=1)
  const Bool bEnableRasterSearch                     = bFastSettings ? bUseRasterInFastMode : true;
  const Bool bAlwaysRasterSearch                     = bExtendedSettings;  // true: BETTER but factor 2 slower
  const Bool bRasterRefinementEnable                 = false; // enable either raster refinement or star refinement
  const Bool bRasterRefinementDiamond                = false; // 1 = xTZ8PointDiamondSearch   0 = xTZ8PointSquareSearch
  const Bool bRasterRefinementCornersForDiamondDist1 = bExtendedSettings;
  const Bool bStarRefinementEnable                   = true;  // enable either star refinement or raster refinement
  const Bool bStarRefinementDiamond                  = true;  // 1 = xTZ8PointDiamondSearch   0 = xTZ8PointSquareSearch
  const Bool bStarRefinementCornersForDiamondDist1   = bExtendedSettings;
  const Bool bStarRefinementStop                     = false || bFastSettings;
  const UInt uiStarRefinementRounds                  = 2;  // star refinement stop X rounds after best match (must be >=1)
  const Bool bNewZeroNeighbourhoodTest               = bExtendedSettings;
																//一些参数的初始化
  Int iSearchRange = m_iSearchRange;

  clipMv( rcMv, pu.cu->lumaPos(), *pu.cs->sps );
  rcMv.divideByPowerOf2(2);							//rcMv右移两位

  // init TZSearchStruct
  cStruct.uiBestSad   = MAX_UINT;		//最优失真设为最大

  //
  m_cDistParam.maximumDistortionForEarlyExit = cStruct.uiBestSad;
  m_pcRdCost->setDistParam( m_cDistParam
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值