您现在的位置:首页 > 教案格式 > 正文

【特征匹配】SIFT原理与C源代码剖析(5)

2019-07-13 08:08 网络整理 教案网

每一个维度上bin值累加方法,即计算一个像素的幅值对于相邻的方向,以及位置的贡献,dr,dc为相邻位置,do为相邻方向

,这就是128维向量的数据,计算方法

static void interp_hist_entry( double*** hist, double rbin, double cbin,
			       double obin, double mag, int d, int n )
{
  double d_r, d_c, d_o, v_r, v_c, v_o;
  double** row, * h;
  int r0, c0, o0, rb, cb, ob, r, c, o;
  r0 = cvFloor( rbin );
  c0 = cvFloor( cbin );
  o0 = cvFloor( obin );
  d_r = rbin - r0;
  d_c = cbin - c0;
  d_o = obin - o0;
  /*
    The entry is distributed into up to 8 bins.  Each entry into a bin
    is multiplied by a weight of 1 - d for each dimension, where d is the
    distance from the center value of the bin measured in bin units.
  */
  for( r = 0; r <= 1; r++ )
    {
      rb = r0 + r;
      if( rb >= 0  &&  rb < d )
	{
	  v_r = mag * ( ( r == 0 )? 1.0 - d_r : d_r );
	  row = hist[rb];
	  for( c = 0; c <= 1; c++ )
	    {
	      cb = c0 + c;
	      if( cb >= 0  &&  cb < d )
		{
		  v_c = v_r * ( ( c == 0 )? 1.0 - d_c : d_c );
		  h = row[cb];
		  for( o = 0; o <= 1; o++ )
		    {
		      ob = ( o0 + o ) % n;
		      v_o = v_c * ( ( o == 0 )? 1.0 - d_o : d_o );
		      h[ob] += v_o;
		    }
		}
	    }
	}
    }
}
最后为了去除光照的影响。对128维向量进行归一化处理。同一时候设置门限,大于0.2的梯度幅值截断
static void hist_to_descr( double*** hist, int d, int n, struct feature* feat )
{
  int int_val, i, r, c, o, k = 0;
  for( r = 0; r < d; r++ )
    for( c = 0; c < d; c++ )
      for( o = 0; o < n; o++ )
	feat->descr[k++] = hist[r][c][o];
  feat->d = k;
  normalize_descr( feat );          //向量归一化
  for( i = 0; i < k; i++ )
    if( feat->descr[i] > SIFT_DESCR_MAG_THR )   //设置门限,门限为0.2
      feat->descr[i] = SIFT_DESCR_MAG_THR;
  normalize_descr( feat );      //向量归一化
  /* convert floating-point descriptor to integer valued descriptor */
  for( i = 0; i < k; i++ )              //换成整形值
    {
      int_val = SIFT_INT_DESCR_FCTR * feat->descr[i];    
      feat->descr[i] = MIN( 255, int_val );
    }
}

最后对特征点按尺度大小进行排序,强特征点放在前面;

这样每一个特征点就相应一个128维的向量,接下来能够用能够用向量做以后的匹配工作了。

特征点匹配原理后序文章会更新~

------------------------------------------------------------------------------------

在此很感谢CSDN上几位图像上的大牛,我也是通过他们的文章去学习研究的,本文也是參考了他们的文章才写成!

推荐看大牛们的文章。原理写的非常好!