Opencv中的直方图(5)计算EMD距离的函数EMD()的使用

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

算法描述

计算两个加权点配置之间的“最小工作量”距离。

该函数计算地球搬运工距离(Earth Mover’s Distance)和/或两个加权点配置之间距离的下界。其中一个应用如文献 225和 226中所述,是在图像检索中进行多维直方图比较。EMD 是一个运输问题,使用某种修改的单纯形算法来求解,因此最坏情况下的复杂度是指数级的,不过平均而言它要快得多。在真实度量的情况下,下界甚至可以用线性时间算法更快地计算出来,并且它可以用来大致确定两个签名是否足够远,以至于它们不可能关联到同一个对象。

函数原型


float cv::EMD
(
	InputArray 	signature1,
	InputArray 	signature2,	
	int 	distType,
	InputArray 	cost = noArray(),
	float * 	lowerBound = 0,
	OutputArray 	flow = noArray() 
)		

参数

  • 参数signature1 第一个签名,一个大小为 size1 × dims + 1 的浮点矩阵。每一行存储点的权重后跟点的坐标。如果使用用户定义的成本矩阵,则允许该矩阵只有一列(仅权重)。权重必须是非负的,并且至少有一个非零值
  • 参数signature2 第二个签名,格式与 signature1 相同,尽管行数可能不同。总权重可以不同。在这种情况下,会在 signature1 或 signature2 中添加一个额外的“虚拟”点。权重必须是非负的,并且至少有一个非零值。
  • 参数distType 使用的度量。见 DistanceTypes
  • 参数cost 用户定义的大小为 size1 × size2 的成本矩阵。另外,如果使用成本矩阵,则无法计算下界 lowerBound,因为它需要一个度量函数。
  • 参数lowerBound 可选的输入/输出参数:两个签名之间的距离的下界,即质心之间的距离。如果使用用户定义的成本矩阵,点配置的总权重不相等,或者签名只包含权重(签名矩阵只有一列),则下界可能不会被计算。你必须初始化 lowerBound。如果计算得到的质心之间的距离大于或等于 lowerBound(这意味着签名之间的距离足够远),则函数不会计算 EMD。无论如何,返回时 lowerBound 都会被设置为计算得到的质心之间的距离。因此,如果你想同时计算质心之间的距离和 EMD,则应将 lowerBound 设置为 0。
  • 参数flow 结果大小为 size1 × size2 的流矩阵:flow[i,j] 是从 signature1 的第 i 个点到 signature2 的第 j 个点的流。

代码示例

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

int main()
{
    // 创建两个加权点配置
    cv::Mat signature1 = ( cv::Mat_< float >( 3, 2 ) << 100, 23, 12,13, 13, 11 );  // 权重和坐标
    cv::Mat signature2 = ( cv::Mat_< float >( 3, 2 ) << 3, 12, 12, 1, 21, 3 );  // 权重和坐标

    // 初始化参数
    int distType = cv::DIST_L2;  // 使用 L2 距离
    cv::Mat flow;                // 流矩阵
    float lowerBound = 0;        // 下界

    // 计算 EMD
    float distance = cv::EMD( signature1, signature2, distType, cv::Mat(), &lowerBound, flow );

    std::cout << "The EMD distance between the two signatures is: " << distance << std::endl;
    std::cout << "The lower bound of the EMD distance is: " << lowerBound << std::endl;
    std::cout << "The flow matrix is: " << std::endl << flow << std::endl;

    return 0;
}

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2100900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微电网管理系统

微电网管理系统 1. 相关概念简介 基本概念及分析意义&#xff1a; 微电网基本概念&#xff1a;微电网&#xff08;MG&#xff09;由分布式电源、用电负荷、能量管理系统等组成&#xff0c;是一个能够基本实现内部电力电量平衡的供用电系统。 通过整合分布式电源、储能、负荷…

libusb在window下,使用vsstudio的初步安装与使用

下载&#xff1a; 首先&#xff0c;访问github官网 https://github.com/libusb/libusb/tree/master 然后&#xff0c;在版本选择里面&#xff0c;选择标签&#xff0c;点击最新的标签&#xff0c;&#xff08;这种一般稳定性最高&#xff09; 选择完后使用自己的方式下载下来…

双轨直销模式:团队互助与业绩倍增的商业策略

双轨直销模式因其操作简单、业绩压力较小、管理方便以及初期爆发力强等特点&#xff0c;受到许多直销公司的喜爱&#xff0c;并促进了多家大型企业的成长。 一、双轨直销模式简介 双轨直销是一种独特的组织架构&#xff0c;其核心在于每个销售代表仅需构建两个独立的销售线&a…

MiniMax 首个文生视频模型发布,可生成 6s,限时免费;阿里 Qwen2-VL 第二代视觉语言模型开源丨RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、…

第七在线携手美国男士内衣品牌Tommy John,共启智能订货新篇章

【喜讯速递】在数字化转型的浪潮中&#xff0c;7thonline第七在线再次以卓越的技术实力和前瞻性的市场洞察&#xff0c;成功签约国际知名男士内衣品牌Tommy John&#xff0c;双方将携手推进智能订货会计划&#xff0c;共同开启零售供应链管理的新纪元。 男士内衣品牌Tommy John…

智慧水利解决方案应该部署哪些设备(近距离走进智慧水利解决方案)

作为一名水利工程技术人员&#xff0c;我深知智慧水利解决方案对于现代水资源管理的重要性。在我多年的工作经验中&#xff0c;我见证了传统水利系统向智能化转变的过程&#xff0c;也深刻理解了部署正确的设备对于实现智慧水利的关键作用。今天&#xff0c;我想分享一下在智慧…

android AccessibilityService合法合规增加小红书曝光阅读量(2024-09-02)

免责任声明: 任何可操作性的内容与本人无关,文章内容仅供参考学习&#xff0c;如有侵权损害贵公司利益&#xff0c;请联系作者&#xff0c;会立刻马上进行删除。 一、分析 目前可增加曝光阅读流量渠道入口&#xff08;完成&#xff09; 1. 发现页 打开小红书app选择顶部发现页&…

Python和MATLAB(Java)及Arduino和Raspberry Pi(树莓派)点扩展函数导图

&#x1f3af;要点 反卷积显微镜图像算法微珠图像获取显微镜分辨率基于像素、小形状、高斯混合等全视野建模基于探测器像素经验建模荧光成像算法模型傅里叶方法计算矢量点扩展函数模型天文空间成像重建二维高斯拟合天体图像伽马射线能量和视场中心偏移角标量矢量模型盲解卷积和…

三、数组————相关概念详解

数组 前言一、数据理论基础二、数组常用操作2.1 初始化数组2.2 访问数组中的元素2.3 插入元素2.4 删除元素 三、数组扩展3.1 遍历数组3.2 数组扩容 总结1、数组的优点2、数组的不足 前言 在数据结构中&#xff0c;数组可以算得上最基本的数据结构。数组可以用于实现栈、队列、…

中资优配:炒股最笨十句口诀?

在出资股票时&#xff0c;出资者假设掌握一些方法技巧等&#xff0c;可以协助出资者更好地在股市进行生意&#xff0c;下面为我们介绍炒股十大口诀。 1、不跳水不买&#xff0c;不冲高不卖&#xff0c;横盘不生意 不要在股价跳水时急速买入&#xff0c;也不要在股价一开始冲高…

薛定谔的空气墙?一文带你了解其背后的技术原理

封面图 悟空来了都得撞墙&#xff1f; 目前&#xff0c;被称作“村里第一个大学生”的国产3A游戏《黑神话&#xff1a;悟空》发售已经有一段时间了&#xff0c;游戏采用虚幻引擎4技术&#xff0c;仿佛将传统与现代的界限模糊&#xff0c;玩家游玩时沉浸感极强。然而&#xff…

C# 窗口页面布局

1.Groupbox 单机鼠标右键&#xff0c;置于底层 2.Label 在右方属性中修改名称 3.ComboBox 点击属性中的集合&#xff0c;可以添加选择项 4.CheckBox 在属性中修改名称 5.RichTextBox 富文本 在属性中修改名称与区域 6.StatusStrip 状态栏 将AutoSize改成false就可以修改…

带你速通C语言——结构体(18)

结构体是 C 语言中用于创建复杂数据类型的关键工具。它们允许将多个变量&#xff08;可能是不同类型的&#xff09;组合成一个单一的实体&#xff0c;这对于组织和处理数据非常有用。这使得结构体成为数据库记录、配置设置、复杂数据交换等应用的理想选择。 1.定义结构体 结构…

NX二次开发——基础

1.打开信息窗口并写入 UC1601是将想显示的内容显示在一个UI消息框中&#xff0c;或者是状态栏&#xff0c;如果内容很多的时候&#xff0c;就不适合使用UC1601 使用信息窗口&#xff0c;相关命令&#xff1a;信息->....... 要实现这个功能具有的逻辑&#xff0c;先是要打…

【Kubernetes部署篇】二进制搭建K8s高可用集群1.26.15版本(超详细,可跟做)

文章目录 一、服务器环境信息及部署规划1、K8S服务器信息及网段规划2、服务器部署架构规划3、组件版本信息4、实验架构图 二、初始化环境操作1、关闭防火墙2、配置本地域名解析3、配置服务器时间保持一致4、禁用swap交换分区(K8S强制要求禁用)5、配置主机之间无密码登录6、修改…

ArkUI-状态管理-@Provide、@Consume、@Observed、@ObjectLink

ArkUI-状态管理 Provide装饰器和Consume装饰器&#xff1a;与后代组件双向同步概述观察变化框架行为Provide支持allowOverride参数 Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化概述限制条件观察变化框架行为 Provide装饰器和Consume装饰器&#xff1a;与后…

【python计算机视觉编程——4.照相机模型与增强现实】

python计算机视觉编程——4.照相机模型与增强现实 4.照相机模型与增强现实4.1 真空照相机模型4.1.1 照相机矩阵4.1.2 三维点的投影4.1.3 照相机矩阵的分解4.1.4 计算照相机中心 4.2 照相机标定4.3 以平面和标记物进行姿态估计sift.pyhomography.py主函数homography.pycamera.py…

开源 AI 智能名片 O2O 商城小程序在营销中的应用

摘要&#xff1a;本文探讨了开源 AI 智能名片 O2O 商城小程序在营销中的应用&#xff0c;重点分析了喜好原则、互惠互利和高度认可三个方面对小程序推广和用户忠诚度提升的重要性。通过融入这些原则&#xff0c;开源 AI 智能名片 O2O 商城小程序能够更好地满足用户需求&#xf…

UnsupportedOperation: not readable 解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【操作系统】同步互斥与Golang互斥锁实现

【操作系统】同步互斥问题与Golang互斥锁实现 1 背景1.1 独立线程1.2 合作线程1.3 合作有风险&#xff0c;为什么需要合作1.4 多协程并发执行的风险举例&#xff08;Golang语言&#xff09;1.5 对风险的思考 2 同步互斥2.1 一些概念2.2 解决方案——保护临界区2.3 禁用硬件中断…