【个人笔记】OpenCV4 C++ 图像处理与视频分析 09课

个人资料,仅供学习使用
修改时间——2022年2月14日 10:59:22
学习课程:OpenCV4 图像处理与视频分析实战教程
课程讲师:贾志刚

09 图像直方图+直方图均衡化+直方图比较

opencv知识点:

  • 计算直方图数据 - calcHist
  • 四舍五入浮点数 - cvRound
  • 寻找最小/最大值 - minMaxLoc
  • 均衡灰度图像的直方图 - equalizeHist
  • 比较直方图 - compareHist
  • 比较直方图的方法 - HistCompMethods

本课所解决的问题:

  • 什么是图像直方图?
  • 如何绘制彩色图像的一维直方图?
  • 如何绘制HSV图像的二维直方图?
  • 什么是图像直方图均衡化?
  • 如何均衡化灰度图像的直方图?
  • 如何均衡化彩色图像的直方图?
  • 什么是直方图比较?
  • 如何比较直方图?

1.图像直方图

直方图部分地方涉及了归一化,没有归一化基础可以阅读 18 图像像素类型转换与归一化,文章中非常详细。

关于图像直方图以及一维直方图的绘制,可以阅读 24 图像直方图,文章中非常详细。

关于二维直方图的绘制,可以阅读 25 二维直方图,文章中非常详细。

2.直方图均衡化

关于图像直方图的均衡化,可以阅读 26 直方图均衡化,文章中非常详细。

3.直方图比较

引用文章:

直方图比较的应用

当我们计算完两个图像的直方图后,可以对它们进行对比,并通过对比的结果得到一些结论。

比如

  • 图像相似度比较
    如果我们有两张图像,并且这两张图像的直方图一样,或者有极高的相似度,那么在一定程度上,我们可以认为这两幅图是一样的,这就是直方图比较的应用之一。

  • 分析图像之间关系
    两张图像的直方图反映了该图像像素的分布情况,可以利用直方图比较,来分析两张图像的关系。

直方图比较的方法

对输入的两张图像计算得到直方图H1与H2,并归一化到相同的尺度空间
然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度,进而比较图像本身的相似程度。

计算标准不同,则计算所得的相似程度不同。
我们称这个标准为衡量直方图相似度的对比标准(比较方法),这里设其为d(H1,H2)

常用的比较方法有四种:

  • 相关性比较(Correlation)——CV_COMP_CORREL
  • 卡方比较(Chi-Square)——CV_COMP_CHISQR
  • 十字交叉性(Intersection)——CV_COMP_INTERSECT
  • 巴氏距离(Bhattacharyya distance)——CV_COMP_BHATTACHARYYA

更多的比较方法可查阅OpenCV4官方文档

四种方法的原理

相关性比较
相关性比较的公式如下:
在这里插入图片描述

  • 如果H1 = H2,即两个图的直方图一样,分子等于分母,值为1,所以在不严格的情况下,当值为1时,可以认为两个图是一样的。

  • 但是也有可能会出现两个图不一样,而两个图的直方图是一样的情况。
    因为直方图计算的是像素点个数的分布情况,但是不会显示像素点的位置,所以有可能会出现两幅图片不一样,但是相同像素的个数完全一样,那他们的直方图也是一样的。
    不过这种情况,不常有。

相关性比较公式来源于统计学中的相关系数,一般用字母 r 表示。
在这里插入图片描述
其中,Cov(X,Y)为X与Y的协方差,sigma[X]为X的标准差,sigma[Y]为Y的标准差。r取值范围[-1,1]
相关系数适合数值与数值之间的关联性分析。
如果两个变量的相关性越强,相关系数就会越接近±1,相关性越弱,相关系数越接近0。

也就是说:

  • 相关性比较的值越趋近于0,相似度越低
  • 相关性比较的值越趋近于1,相似度越高

卡方比较
卡方比较的公式如下:
在这里插入图片描述
通过这个公式我们能够发现,卡方比较和相关性比较恰恰相反,

  • 卡方比较的值越趋近于1,相似度越低
  • 卡方比较的值越趋近于0,相似度越高

值为0时说明H1= H2,这个时候相似度最高。

卡方比较来源于卡方检验,卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,
实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,

  • 卡方值越大,越不符合
  • 卡方值越小,偏差越小,越趋于符合,
  • 若两个值完全相等时,卡方值就为0,表明理论值完全符合。

十字交叉性
十字交叉性的公式如下:
在这里插入图片描述
这个就比较简单了,对比H1,H2并求出最小值,最后求和。

巴氏距离
巴氏距离的公式如下:
在这里插入图片描述
在直方图相似度计算时,巴氏距离获得的效果最好,但计算是最为复杂的。

巴氏距离和相关性比较类似:

  • 巴氏距离的值越趋近于0,相似度越低
  • 巴氏距离的值越趋近于1,相似度越高

也就是说:巴氏距离的计算结果,其值完全匹配为1,完全不匹配则为0。

直方图比较演示

现在先介绍一下要用到的API

  • compareHist

compareHist

compareHist
	比较两个直方图
		共3个参数
			第1个参数 直方图H1
			第2个参数 直方图H2
					H1和H2大小要相同,要事先归一化
			第3个参数 比较方法(查阅官方文档可知)

比较之前, 一定要先对它们进行归一化处理,因为归一化后的比较才有意义。

本课中演示的直方图比较为BGR色彩空间,采取方式为

  • 计算图像的直方图,并归一化到[0~1]之间
  • 计算图1和图2、图1和图1相关性和巴氏距离

也可以用cvtColor()把图像从BGR转换到HSV等其他色彩空间,转换后其他地方一一对应即可

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

void hist_compare() {
   
   
	Mat src1 = imread("D:/WorkSpace/Opencv/images/h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啦啦啦大赛第大所

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值