0

2 개의 히스토그램을 비교하고 싶습니다. 이것을 위해 사용하고 싶습니다 Chi-Square -Metric. 내 비교기는이 기능과 같습니다Chi-Square와 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)의 오래된 개정판을 보여 줬어. 고마워. –

관련 문제