当前位置: 首页 > news >正文

Opencv中的直方图(3)直方图比较函数compareHist()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

比较两个直方图。

函数 cv::compareHist 使用指定的方法比较两个密集或两个稀疏直方图。
该函数返回 d ( H 1 , H 2 ) d(H_1, H_2) d(H1,H2)
虽然该函数在处理一维、二维或三维的密集直方图时效果很好,但它可能不适合高维的稀疏直方图。在这样的直方图中,由于别名(aliasing)和采样问题,非零直方图bin的坐标可能会略微偏移。为了比较这样的直方图或更一般的加权点的稀疏配置,可以考虑使用 EMD 函数。

compareHist 是 OpenCV 中用于比较两个直方图相似性的函数。这个函数可以用来衡量两个直方图之间的差异或相似程度,常用于图像处理和计算机视觉任务中,比如图像检索、图像匹配或特征比较等。

函数原型1

ouble cv::compareHist
(InputArray 	H1,InputArray 	H2,int 	method 
)		

参数1

  • 参数H1 第一个被比较的直方图。
  • 参数H2 第二个被比较的直方图,与 H1 具有相同的尺寸。
  • 参数method 比较方法,参见 HistCompMethods。

函数原型2

这是一个重载的成员函数,为了方便而提供。它与上述函数的不同之处仅在于它接受的参数。

double cv::compareHist
(const SparseMat & 	H1,const SparseMat & 	H2,int 	method 
)		

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 加载两幅图像cv::Mat image1 = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/qiu.jpg", cv::IMREAD_GRAYSCALE );cv::Mat image2 = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/qiu2.png", cv::IMREAD_GRAYSCALE );if ( image1.empty() || image2.empty() ){std::cerr << "Error: Images not found or unable to read." << std::endl;return -1;}// 计算两个图像的直方图int histSize           = 256;float range[]          = { 0, 256 };const float* histRange = { range };bool uniform           = true;bool accumulate        = false;cv::Mat hist1, hist2;calcHist( &image1, 1, 0, cv::Mat(), hist1, 1, &histSize, &histRange, uniform, accumulate );calcHist( &image2, 1, 0, cv::Mat(), hist2, 1, &histSize, &histRange, uniform, accumulate );// 归一化直方图cv::normalize( hist1, hist1, 0, 1, cv::NORM_MINMAX, -1, cv::Mat() );cv::normalize( hist2, hist2, 0, 1, cv::NORM_MINMAX, -1, cv::Mat() );// 比较两个直方图double result_correlation   = compareHist( hist1, hist2, cv::HISTCMP_CORREL );double result_chisqr        = compareHist( hist1, hist2, cv::HISTCMP_CHISQR );double result_intersect     = compareHist( hist1, hist2, cv::HISTCMP_INTERSECT );double result_bhattacharyya = compareHist( hist1, hist2, cv::HISTCMP_BHATTACHARYYA );std::cout << "Correlation: " << result_correlation << std::endl;std::cout << "Chi-Squared: " << result_chisqr << std::endl;std::cout << "Intersection: " << result_intersect << std::endl;std::cout << "Bhattacharyya Distance: " << result_bhattacharyya << std::endl;return 0;
}

运行结果

在这里插入图片描述

输出结果解释

  1. Correlation (相关性):

    • 含义:相关性比较方法衡量两个直方图之间的线性关系。值范围通常在 -1 到 1 之间。
    • 结果:result_correlation 表示两个直方图的相关性得分。
    • 解释:如果结果接近 1,则表示两个直方图高度相关;如果接近 0,则表示没有相关性;如果接近 -1,则表示负相关。
  2. Chi-Squared (卡方):

    • 含义:卡方比较方法衡量两个直方图之间的差异。值范围通常是非负数。
    • 结果:result_chisqr 表示两个直方图的卡方得分。
    • 解释:如果结果接近 0,则表示两个直方图非常相似;如果结果较大,则表示两个直方图差异较大。
  3. Intersection (交集):

    • 含义:交集比较方法衡量两个直方图的交集部分。值范围通常在 0 到 1 之间。
    • 结果:result_intersect 表示两个直方图的交集得分。
    • 解释:如果结果接近 1,则表示两个直方图高度重合;如果接近 0,则表示几乎没有重合。
  4. Bhattacharyya Distance (巴塔查里雅距离):

    • 含义:巴塔查里雅距离衡量两个概率分布之间的相似性。值范围通常是非负数。
    • 结果:result_bhattacharyya 表示两个直方图的巴塔查里雅距离。
    • 解释:如果结果接近 0,则表示两个直方图非常相似;如果结果较大,则表示两个直方图差异较大。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • avi转换成mp4,这6种方法助你快速转换
  • vue3中如何拿到element plus中el-tree多选的值?
  • 飞机制造5G智能工厂数字孪生工业物联平台,推进制造业数字化转型
  • 13、Django Admin创建两个独立的管理站点
  • 项目7-音乐播放器8(自动化测试)
  • datagrip链接sql server2005报错
  • Apache DolphinScheduler在Cisco Webex的应用与优化实践
  • 搭建webRTC cotrun流媒体服务器
  • GCC/G++编译器_attribute__
  • 持续集成与持续部署(CI/CD)的深入探讨
  • 本地Gitblit使用
  • Redis Desktop Manager 0.8.8.384 安装与使用详解
  • Transiting from CUDA to HIP(三)
  • 如何进行谷歌网站外链建设?
  • 获取每个评论下的回复列表[支持定位指定回复ID](基本思路+Go-Gorm实现示例)
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • “大数据应用场景”之隔壁老王(连载四)
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Asm.js的简单介绍
  • canvas绘制圆角头像
  • Mysql数据库的条件查询语句
  • SOFAMosn配置模型
  • web标准化(下)
  • 半理解系列--Promise的进化史
  • 成为一名优秀的Developer的书单
  • 大型网站性能监测、分析与优化常见问题QA
  • 给初学者:JavaScript 中数组操作注意点
  • 计算机在识别图像时“看到”了什么?
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 嵌入式文件系统
  • 使用agvtool更改app version/build
  • 跳前端坑前,先看看这个!!
  • 通过git安装npm私有模块
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 赢得Docker挑战最佳实践
  • Semaphore
  • 从如何停掉 Promise 链说起
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​一些不规范的GTID使用场景
  • #1014 : Trie树
  • #pragma预处理命令
  • (1)常见O(n^2)排序算法解析
  • (152)时序收敛--->(02)时序收敛二
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (八)c52学习之旅-中断实验
  • (备份) esp32 GPIO
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (回溯) LeetCode 40. 组合总和II
  • (理论篇)httpmoudle和httphandler一览
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (论文阅读11/100)Fast R-CNN
  • (实战篇)如何缓存数据
  • (转)大型网站架构演变和知识体系
  • .NET Core引入性能分析引导优化