我想比较2个直方图,它有2个维度。 为此,我想使用卡方 - Metric。 我的比较器看起来像这个函数:
double Histogram::compareHistogram(Histogram *hist){
double result=0;
double a=0;
double b=0;
for (int y=0 ; y < bins_1 ; y++) {
for (int x=0 ; x < bins_2 ; x++) {
a=getHistogramValue(x,y)-hist->getHistogramValue(x,y);
b=getHistogramValue(x,y)+hist->getHistogramValue(x,y);
if(fabs(b)>0.0){
result+=a*a/b;
}
}
}
return result;
}
我将结果与OpenCv的cv :: compareHist()
函数的结果进行了比较,结果不同。我不知道为什么。
在我比较直方图之前,我将直方图与MINMAX-Norm一致。 我将我的标准直方图与openCV的标准直方图进行了比较,它们是相等的。 所以我认为,问题出在我的compareHist函数中。 但在哪里?
致以最诚挚的问候,
答案 0 :(得分:2)
OpenCV的相关源代码部分如下:
if( method == CV_COMP_CHISQR )
{
for( j = 0; j < len; j++ )
{
double a = h1[j] - h2[j];
double b = h1[j];
if( fabs(b) > DBL_EPSILON )
result += a*a/b;
}
}
所以你可以看到代码中的差异就是这一行
b=getHistogramValue(x,y)+hist->getHistogramValue(x,y);
应该是
b=getHistogramValue(x,y);