OpenCV直方图比较方法

MLM*_*LTL 6 comparison opencv image-processing histogram

查看直方图文档,有4(5)种不同的比较方法:

  1. CV_COMP_CORREL 相关性
  2. CV_COMP_CHISQR 卡方
  3. CV_COMP_INTERSECT 交叉口
  4. CV_COMP_BHATTACHARYYA Bhattacharyya距离
  5. CV_COMP_HELLINGER 同义词 CV_COMP_BHATTACHARYYA

它们都提供不同的输出,如比较直方图文档中所示.但我找不到任何能说明每种方法相互比较的效果的方法.当然每种方法都有优点和缺点,否则为什么有多种方法呢?

甚至OpenCV 2计算机视觉应用程序编程手册也没有什么可说的差异:

对cv :: compareHist的调用很简单.您只需输入两个直方图,该函数将返回测量的距离.要使用的特定测量方法是使用标志指定的.在ImageComparator类中,使用了交集方法(带有标志CV_COMP_INTERSECT).对于每个箱,该方法简单地比较每个直方图中的两个值,并保持最小值.然后,相似性度量就是这些最小值的总和.因此,具有没有共同颜色的直方图的两个图像将获得0的交叉值,而两个相同的直方图将获得等于总像素数的值.

可用的其他方法是卡方(标志CV_COMP_CHISQR) ,它对二进制位之间的归一化方差进行求和,相关方法(标志CV_COMP_CORREL)基于信号处理中使用的归一化互相关算子来测量两者之间的相似性.信号和Bhattacharyya度量(标志CV_COMP_BHATTACHARYYA)在统计中用于估计两个概率分布之间的相似性.

这些方法之间肯定存在差异,所以我的问题是它们是什么?什么情况下他们最好?

Tot*_*oro 1

CV_COMP_INTERSECT 的计算速度很快,因为您只需要每个 bin 的最小值。但它不会告诉您太多有关差异分布的信息。其他方法试图在关于像素分布的不同假设下获得更好、更连续的匹配分数。

您可以在以下位置找到不同方法中使用的公式:

http://docs.opencv.org/doc/tutorials/imgproc/histograms/histogram_comparison/histogram_comparison.html

有关匹配算法的更多详细信息的一些参考可以在以下位置找到:

http://siri.lmao.sk/fiit/DSO/Prednasky/7%20a%20Histogram%20based%20methods/7%20a%20Histogram%20based%20methods.pdf