我想比较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的源代码的相关部分如下:
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);