将2个直方图与卡方比较

时间:2013-05-03 10:55:35

标签: opencv image-processing computer-vision histogram comparator

我想比较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函数中。 但在哪里?

致以最诚挚的问候,

1 个答案:

答案 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);