实现卡方以找到2个SIFT特征之间的距离

时间:2014-01-11 03:26:28

标签: sift chi-squared

我正在尝试实现卡方,其算法是:

Distance= 1/2* Ei((Xi-Yi)^2/Xi+Yi)
instead of euclidean distance which algorithm is:
Distance= Sqrt(E(Xi-Yi)^2)
in calculating distance between 2 SIFT feature (128 dimensional vector), 

我的问题是chi- square中的分隔符可能为0,它将使距离变成NaN。我应该将分频器设为1还是忽略它?还是有另一种用于计算SIFT特征的卡方算法?

2 个答案:

答案 0 :(得分:0)

如果值为非负值(如直方图值),则除数为零的唯一方法是Xi == Yi == 0,因此 i 的距离为0。 所以你只需要检查零:

sum = 0;
for( i.... ) {
  auto div = Xi + Yi;
  if( div == 0 ) continue;
  sum += (Xi-Yi)*(Xi-Yi)/div;
}
return sum/2;

答案 1 :(得分:-1)

检查0并在您的calculate方法中抛出异常。我看不出除以1是否有意义?

if ( (Xi+Yi) == 0 )
   throw new Exception("bad divider")

处理调用代码中的异常。 (如果你指明你正在编程的语言,将会有所帮助。)