我想比较 2 个直方图,它们有 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 的 cv::compareHist()
函数的结果进行了比较,结果有所不同。我不知道为什么。
在比较直方图之前,我使用 MINMAX-Norm 对直方图进行规范。我将我的标准化直方图与 openCV 的标准化直方图进行了比较,它们是相等的。所以我认为,问题出在我的 compareHist 函数中。但是哪里?
此致,