图像相似度--直方图方法
来源:互联网 发布:ios 无网络提示页面 编辑:程序博客网 时间:2024/06/05 16:54
目标
本文档尝试解答如下问题:
- 如何使用OpenCV函数 compareHist 产生一个表达两个直方图的相似度的数值。
- 如何使用不同的对比标准来对直方图进行比较。
原理
要比较两个直方图( and ), 首先必须要选择一个衡量直方图相似度的 对比标准 () 。
OpenCV 函数 compareHist 执行了具体的直方图对比的任务。该函数提供了4种对比标准来计算相似度:
Correlation ( CV_COMP_CORREL )
其中
是直方图中bin的数目。
Chi-Square ( CV_COMP_CHISQR )
Intersection ( CV_COMP_INTERSECT )
Bhattacharyya 距离( CV_COMP_BHATTACHARYYA )
源码
本程序做什么?
- 装载一张 基准图像 和 两张 测试图像 进行对比。
- 产生一张取自 基准图像 下半部的图像。
- 将图像转换到HSV格式。
- 计算所有图像的H-S直方图,并归一化以便对比。
- 将 基准图像 直方图与 两张测试图像直方图,基准图像半身像直方图,以及基准图像本身的直方图分别作对比。
- 显示计算所得的直方图相似度数值。
下载代码: 点击 这里
代码一瞥:
解释
声明储存基准图像和另外两张对比图像的矩阵( RGB 和 HSV )
装载基准图像(src_base) 和两张测试图像:
将图像转化到HSV格式:
同时创建包含基准图像下半部的半身图像(HSV格式):
初始化计算直方图需要的实参(bins, 范围,通道 H 和 S ).
创建储存直方图的 MatND 实例:
计算基准图像,两张测试图像,半身基准图像的直方图:
按顺序使用4种对比标准将基准图像(hist_base)的直方图与其余各直方图进行对比:
结果
使用下列输入图像:
第一张为基准图像,其余两张为测试图像。同时我们会将基准图像与它自身及其半身图像进行对比。
我们应该会预料到当将基准图像直方图及其自身进行对比时会产生完美的匹配, 当与来源于同一样的背景环境的半身图对比时应该会有比较高的相似度, 当与来自不同亮度光照条件的其余两张测试图像对比时匹配度应该不是很好:
下面显示的是结果数值:
对比标准 基准 - 基准 基准 - 半身 基准 - 测试1 基准 - 测试2 Correlation1.0000000.9307660.1820730.120447Chi-square0.0000004.94046621.18453649.273437Intersection24.39154814.9598093.8890295.775088Bhattacharyya0.0000000.2226090.6465760.801869对于 Correlation 和 Intersection 标准, 值越大相似度越大。因此可以看到对于采用这两个方法的对比,*基准 - 基准* 的对比结果值是最大的, 而 基准 - 半身 的匹配则是第二好(跟我们预测的一致)。而另外两种对比标准,则是结果越小相似度越大。 我们可以观察到基准图像直方图与两张测试图像直方图的匹配是最差的,这再一次印证了我们的预测。
转载来自:http://blog.csdn.net/zhuiqiuk/article/details/54945607
学习参考:http://blog.csdn.net/cxf7394373/article/details/6955530
- 图像相似度--直方图方法
- 图像相似度计算之直方图方法OpenCV实现
- 图像相似度计算之直方图方法OpenCV实现
- 图像相似度计算之直方图方法OpenCV实现
- 图像相似度检测之直方图相交
- 使用直方图比较图像的相似度
- 使用直方图比较图像的相似度
- 图像相似度检测之直方图相交
- 通过直方图比较图像相似度
- 基于直方图比较的图像相似度计算
- 直方图相似度算法
- 图像相似度(测试)--基于直方图特征的图像搜索
- 相似图片搜索(直方图相似度)
- 关于图像相似度方法的总结
- 计算图像的梯度及梯度直方图相似度(Matlab代码)
- 图像处理之相似图片识别(直方图应用篇)
- 图像处理之相似图片识别(直方图应用篇)
- 图像处理------相似图片识别(直方图应用篇)
- MySql基础笔记_17-06-28
- DOS命令大全:Findstr命令详解
- JNI遇到error: request for member 'FindClass' in something not a structure or union
- 数据挖掘-kaggle
- JetBrains
- 图像相似度--直方图方法
- 典型的数组处理(Java)
- int float double 最大值,最小值的宏定义
- TensorFlow基础:Graph与Variable
- 101. Symmetric Tree
- 第一个android程序
- 算法题练习系列之(七):福尔摩斯的约会
- Android艺术开发探索第四章——View的工作原理(上)
- Android studio 导入SVN工程文件出现Gradle '' project refresh failed Error:Cause: unknown protocol: c