0

我想比较2个直方图,其中有2个维度。 为此,我想使用Chi-Square-Metric。 我比较像这样的功能:比较2个直方图与卡方

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的的简历:: compareHist()函数的结果的结果,它是不同的。我不知道为什么。

在比较直方图之前,我用MINMAX-Norm规范直方图。 我比较了我的直方图和openCV的直方图,他们是相等的。 所以我认为,问题出在我的compareHist函数中。 但是哪里?

最好的问候,

回答

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); 
+0

噢,你是对的。我已经在这个代码的旧版本中显示(https://code.ros.org/trac/opencv/browser/trunk/opencv/modules/imgproc/src/histogram.cpp?rev=4885)谢谢 – 2013-05-05 16:18:34