我正在尝试实现卡方,其算法是:
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特征的卡方算法?
答案 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")
处理调用代码中的异常。 (如果你指明你正在编程的语言,将会有所帮助。)