opencv直方图和模板

 

直方图和模板

直方图是揭示数据分布的统计特性的工具,直方图的维度通常比原始数据低

opencv提供一种数据类型来表达直方图

opencv中直方图的表示

opencv使用数组来表示直方图

cv::calcHist():从数据创建直方图

基本直方图操作

直方图归一化

每个区间恰好是该区间内信息占总体的百分比

cv::Mat normalized = my_hist / sum(my_hist)[0] 或 cv::normalized( my_hist,my_hist,1,0,NORM_L1)

直方图二值化

cv::threshold() 使直方图二值化并丢弃所有元素个数少于给定值的空间

找出最显著的空间

cv::minMaxLoc() 找到出现最大值和最小值的位置

找出n维非稀疏数组中的最大值,最小值,使用cv::minMaxIdx()

需要手动分配存放位置的变量

比较两个直方图

cv::compareHist() 通过某些特殊判据对两个直方图的相似性进行度量

相关性方法cv::COMP_CORRL

基于统计相关性,实现皮尔逊(Pearson)相关系数

卡方方法cv::COMP_CHISQR_ALT

基于卡方检验统计量

交集法cv::COMP_INTERSECT

简单基于两直方图的交集,对两直方图共同部分求和

巴氏距离cv::COMP_BHATTACHARYYA

交集法在快速而粗略的匹配中效果好,卡方法和BHA法效果更好但速度慢,EMD给出最符合直觉的匹配效果,但是速度更慢

一些复杂的直方图方法

EMD距离

光照的变化会使颜色值产生大量的偏移–对于两个形状相同,但只是相对平移的两个直方图,距离度量会给出很大的值,EMD对这种平移不敏感

EMD本身是一个线性规划问题

Earth Move翻译过来是搬土,指把P位置的m个坑的土,用最小的代价搬到Q位置的n个坑中,dij是pi到qj两个坑的距离,fij是从pi搬到qj的土量,则WORK工作量就是要最小化的目标。线性规划求解出fij后,再用fij对WORK作个归一化,就得到了EMD