opencv - 将2个直方图与卡方进行比较

标签 opencv image-processing computer-vision histogram comparator

我想比较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);

关于opencv - 将2个直方图与卡方进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16357272/

相关文章:

matlab - 无需工具箱即可在 MATLAB 中实现遗传算法

python - 提高 OpenCV Python 中 findContour 的准确性

opencv - 寻找手部图像中的谷点

ruby - 检测不同分辨率下的图像是否相等

c++ - 像素叠加透明

image-processing - Convert_imageset.cpp 指南

python - 在 Python 中使用 CV2 进行实心圆检测?

c++ - FFMPEG: ‘PIX_FMT_BGR24’ 未在此范围内声明

python - 对 OpenCV FaceRecognizer 预测方法输出的信心

python - OCR 扑克牌