1

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

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), 

我的问题是卡方中的除法器可能为 0,它会使距离变为 NaN。我应该将分隔线设为 1 还是忽略它?或者还有另一种计算 SIFT 特征的卡方算法?

4

2 回答 2

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;
于 2016-02-02T12:26:22.910 回答
-1

检查 0 并在您的计算方法中引发异常。我看不出除以 1 有什么意义?

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

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

于 2014-01-11T04:10:23.650 回答