VTM1.0代码阅读:xTZ8PointDiamondSearch函数

该博客详细介绍了xTZ8PointDiamondSearch函数在xTZSearch中的作用,主要负责进行8点菱形搜索。根据搜索步长不同,其行为有所变化:步长为1时,搜索特定四个点;步长在1到8之间,执行完整的8点菱形搜索;而当步长大于8时,则进行16点菱形搜索,每边包含5个点。
摘要由CSDN通过智能技术生成

xTZ8PointDiamondSearch函数在xTZSearch函数中被调用,实现8点菱形搜索
搜索步长为1时,搜索2,4,5,7四个点;
搜索步长大于1,小于等于8时,8点菱形搜索;
搜索步长大于8时,16点菱形搜索,每条菱形边上5个点。

inline Void InterSearch::xTZ8PointDiamondSearch( IntTZSearchStruct& rcStruct,
                                                 const Int iStartX,
                                                 const Int iStartY,
                                                 const Int iDist,
                                                 const Bool bCheckCornersAtDist1 )
{
   
  const SearchRange& sr = rcStruct.searchRange;		//搜索范围
  // 8 point search,                   //   1 2 3
  // search around the start point     //   4 0 5
  // with the required  distance       //   6 7 8
  CHECK( iDist == 0, "Invalid distance" );		//这些0到8所标注的位置,就是IntTZSearchStruct中的ucPointNr
  const Int iTop        = iStartY - iDist;		//菱形顶点	2
  const Int iBottom     = iStartY + iDist;		//菱形底点	7
  const Int iLeft       = iStartX - iDist;		//菱形左点	4
  const Int iRight      = iStartX + iDist;		//菱形右点	5
  rcStruct.uiBestRound += 1;		//搜索圈数+1

  if ( iDist == 1 )					//搜索步长为1时,搜索2,4,5,7四个点
  {
   
    if ( iTop >= sr.top ) // check top			//菱形顶点在搜索范围内
    {
   
      if (bCheckCornersAtDist1)
      {
   
        if ( iLeft >= sr.left) // check top-left
        {
   
          xTZSearchHelp( rcStruct, iLeft, iTop, 1, iDist );
        }
        xTZSearchHelp( rcStruct, iStartX, iTop, 2, iDist );
        if ( iRight <= sr.right ) // check middle right
        {
   
          xTZSearchHelp( rcStruct, iRight, iTop, 3, iDist );
        }
      }
      else
      {
   
        xTZSearchHelp( rcStruct, iStartX, iTop, 2, iDist );		//2
      }
    }
    if ( iLeft >= sr.left ) // check middle left	//菱形左点在搜索范围内
    {
   
      xTZSearchHelp( rcStruct, iLeft, iStartY, 4, iDist );		//4
    }
    if ( iRight <= sr.right ) // check middle right		//菱形右点在搜索范围内
    {
   
      xTZSearchHelp( rcStruct, iRight, iStartY, 5, iDist );		//5
    }
    if ( iBottom <= sr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值