【问题标题】:compare 2 histograms with Chi-Square将 2 个直方图与卡方进行比较
【发布时间】:2013-04-27 18:14:55
【问题描述】:

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

最好的问候,

【问题讨论】:

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


    【解决方案1】:

    来自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);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 2013-10-13
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多