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

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

  • 操作系统: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;        // 下界// 计算 EMDfloat 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;
}

运行结果

在这里插入图片描述

相关文章:

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

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算两个加权点配置之间的“最小工作量”距离。 该函数计算地球搬运工距离&#xff08;Earth Mover’s Distance&#xff09;和/或两个加权点配…...

KDD 2024 时空数据(Spatio-temporal) ADS论文总结

2024 KDD&#xff08; ACM SIGKDD Conference on Knowledge Discovery and Data Mining, 知识发现和数据挖掘会议&#xff09;在2024年8月25日-29日在西班牙巴塞罗那举行。 本文总结了KDD2024有关时空数据(Spatial-temporal) 的相关论文&#xff0c;如有疏漏&#xff0c;欢迎大…...

uniapp+vue3实现小程序和h5解压线上压缩包以及如何访问解压后的视频地址

安装jszip插件 npm install jszip 对应功能实现和逻辑处理&#xff1a; <script setup>import { onMounted, reactive, ref } from vueimport { onHide, onUnload } from dcloudio/uni-appimport JSZip from jsziplet videoSrc ref() // 视频地址// 创建JSZip实例con…...

探索 Zed 编辑器:速度与协作的巅峰之作

Zed 是一款备受瞩目的代码编辑器,专为现代开发者打造。本文将深入介绍 Zed 的独特优势,以及如何快速上手使用这款编辑器,助你在编程工作中大幅提升效率。 一:Zed 编辑器的优势 Zed 是近年来崭露头角的一款代码编辑器,迅速赢得了众多开发者的青睐。以下是 Zed 的几大核心优…...

文心快码前端工程师观点分享:人机协同新模式的探索之路(三)

本系列视频来自百度工程效能部的前端研发经理杨经纬&#xff0c;她在由开源中国主办的“AI编程革新研发效能”OSC源创会杭州站105期线下沙龙活动上&#xff0c;从一款文心快码&#xff08;Baidu Comate&#xff09;前端工程师的角度&#xff0c;分享了关于智能研发工具本身的研…...

Qt基础类03-直线类QLine

Qt基础类03-直线类QLine 摘要基本信息成员函数程序全貌QLine::QLine()QLine::QLine(const QPoint &p1, const QPoint &p2)QLine::QLine(int x1, int y1, int x2, int y2)QPoint QLine::p1() constQPoint QLine::p2() constint QLine::x1() constint QLine::x2() consti…...

集成电路学习:什么是ARM先进精简指令集计算机

ARM&#xff1a;先进精简指令集计算机 ARM先进精简指令集计算机&#xff08;Advanced RISC Machine&#xff0c;简称ARM&#xff09;是一种基于精简指令集计算机&#xff08;RISC&#xff09;原则的计算机处理器架构&#xff0c;由英国的ARM公司开发。这种架构以其低功耗和高性…...

设计模式-行为型模式-迭代器模式

1.迭代器模式的定义 迭代器模式提供一种对容器对象中的各个元素进行访问的方法&#xff0c;而不需要暴露该对象的内部细节&#xff1b; 在软件系统中&#xff0c;容器对象有两个职责&#xff1a;一是存储数据&#xff0c;二是遍历数据&#xff1b;从依赖性上看&#xff0c;前者…...

FRP代理(QUIC通信)实验

访问关系与TCP实验相同&#xff0c;配置不一样 服务端配置 客户端配置 通信数据...

项目依赖拉不下来卡着不动怎么办,node又不支持cnpm

如果你的项目依赖在拉取时卡住&#xff0c;可以尝试以下步骤来解决问题&#xff1a; 检查网络&#xff1a;确保你的网络连接稳定。如果可能&#xff0c;尝试使用 VPN 或更换网络。 使用镜像源&#xff1a; 对于 yarn&#xff0c;可以使用淘宝镜像&#xff1a; yarn confi…...

ansible--role

简介 roles是ansible&#xff0c;playbooks的目录的组织结构&#xff0c;将代码或文件进行模块化&#xff0c;成为roles的文件目录组织结构。 易读&#xff0c;代码可冲哟美好&#xff0c;层次清晰 目录机构 mkdir roles/nginx/{files,handlers,tasks,templates,vars} -ptou…...

SpinalHDL之数据类型(一)

本文作为SpinalHDL学习笔记第五十四篇,介绍SpinalHDL的Bool数据类型。 SpinalHDL技术交流QQ群: Note: 1.本群是个人技术交流群,不是什么官方答疑群; 2.提问是你的权利,但回答不是别人的义务; 3.可以潜水,不能灌水; 4.请文明交流,做这行的都算高层次人才,希望你…...

Ansys Zemax | 什么是Sobol取样?

附件下载 联系工作人员获取附件 本文主要介绍了&#xff1a; 什么是Sobol取样&#xff1f; 和随机光线产生方法相比&#xff0c;Sobol取样有什么优点&#xff1f; Sobol取样有什么限制&#xff1f; 随机取样和Sobol取样模式 一个光源会在位置空间以及角度空间随机产生光…...

Unity 热更 之 【YooAsset 热更】Unity 可以进行热更的资源管理系统,并 【Android 端简单实现·案例热更】

Unity 热更 之 【YooAsset 热更】Unity 可以进行热更的资源管理系统&#xff0c;并 【Android 端简单实现案例热更】 目录 Unity 热更 之 【YooAsset 热更】Unity 可以进行热更的资源管理系统&#xff0c;并 【Android 端简单实现案例热更】 一、简单介绍 二、YooAsset 引…...

vue3写一个无限树形菜单,递归组件

原本使用element plus的el-tree&#xff0c;可是他的UI不匹配&#xff0c;狠难改成自己想要的&#xff0c;所以只能自己去写一个&#xff0c;做法&#xff1a;使用递归组件 效果 组件代码itemDir.vue // itemDir.vue<template><div><ul v-for"node in li…...

3D建模主要使用哪些软件?有什么特点?

3D建模主要使用的软件多种多样&#xff0c;每种软件都有其独特的优势和适用领域。以下是一些主流的3D建模软件&#xff1a; 1. Autodesk 3ds Max 概述&#xff1a;3ds Max是一款功能丰富的建模和动画软件&#xff0c;广泛用于电影、游戏和虚拟现实等领域。 特点&#xff1a;…...

Android Studio 加载多个FLutter项目

按顺序操作即可 选择工程 选择Modules, 导入 module 选中创建module 选择要导入的目录&#xff0c;只选择主目录&#xff0c;下面的文件不要选 添加完成&#xff0c;点击ok后&#xff0c;会进行导入 最终导入成功...

SealSuite 一站式 IT 管理与办公安全解决方案,助力出海企业夯实数字化底座

数字化办公时代&#xff0c;企业升级 IT 基础设施&#xff0c;已不再是选择题&#xff0c;而是必答题。 数字化办公时代&#xff0c;企业为何要升级 IT 基础设施&#xff1f; 随着时代变化与科技进步&#xff0c;人们的工作方式也发生了巨大变化。如今&#xff0c;远程办公、全…...

l超市售货管理系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;会员管理&#xff0c;供应商信息管理&#xff0c;商品管理&#xff0c;出入库管理&#xff0c;公告管理&#xff0c;轮播图信息 微信端账号功能包括&#xff1a;系统首页&#xff0c;公告&#xff0c;…...

systemverilog、verilog的部分常用内部函数

1. $ceil 作用&#xff1a;将给定的实数或浮点数向上取整。示例&#xff1a;$ceil(3.2) 返回 4。 2. $floor 作用&#xff1a;将给定的实数或浮点数向下取整。示例&#xff1a;$floor(3.9) 返回 3。 3. $value$plusargs 作用&#xff1a;从命令行读取传递给仿真器的参数。…...

nodejs新手福音,在快马平台零配置开启你的第一个后端项目

作为一个刚接触Node.js的新手&#xff0c;最让我头疼的就是环境配置。记得第一次尝试安装Node.js时&#xff0c;光是环境变量就折腾了半天&#xff0c;还经常遇到版本不兼容的问题。直到发现了InsCode(快马)平台&#xff0c;才发现原来学习Node.js可以这么简单。 项目结构一目了…...

Linux下CST8XX触摸屏驱动调试实战:从I2C波形异常到内核崩溃的完整解决记录

Linux下CST8XX触摸屏驱动调试实战&#xff1a;从I2C波形异常到内核崩溃的完整解决记录 在嵌入式Linux开发中&#xff0c;触摸屏驱动的调试往往是最具挑战性的环节之一。本文将详细记录CST8XX系列电容触摸屏在Linux平台上的完整调试过程&#xff0c;涵盖从硬件信号异常到内核崩溃…...

过期域名抢注对SEO优化有什么影响

过期域名抢注对SEO优化有什么影响 在互联网时代&#xff0c;域名作为网站的“地址”在搜索引擎优化&#xff08;SEO&#xff09;中占据重要地位。当一个域名过期且没有被注册&#xff0c;它就成为了一个“空壳”&#xff0c;任何人都可以抢注。过期域名抢注对SEO优化有什么影响…...

Windows HEIC缩略图扩展:让苹果照片在PC上清晰呈现

Windows HEIC缩略图扩展&#xff1a;让苹果照片在PC上清晰呈现 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 问题场景&#xf…...

植物大战僵尸游戏辅助工具:解锁9大隐藏功能提升玩家效率的完整指南

植物大战僵尸游戏辅助工具&#xff1a;解锁9大隐藏功能提升玩家效率的完整指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 在游戏辅助工具领域&#xff0c;开源项目往往能提供最具创新性的解决…...

如何用PHP实现线程安全的单例模式?

标准的 PHP-FPM 架构下&#xff0c;根本不存在“多线程”&#xff0c;因此也不需要“线程安全”的单例模式。 PHP 的设计哲学是 Share-Nothing&#xff08;无共享&#xff09;。 FPM 模式&#xff1a;每个请求由一个独立的进程处理。进程之间内存隔离。你在进程 A 里的单例&…...

Video2X完全指南:5个简单步骤让模糊视频变高清的AI魔法

Video2X完全指南&#xff1a;5个简单步骤让模糊视频变高清的AI魔法 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/vide…...

谷歌Gemini API新层级:机遇与挑战并存

谷歌为Gemini API添加Flex和Priority层级&#xff0c;可根据工作负载分配任务。同时发布Gemma 4。新层级虽简化开发工作&#xff0c;但也引发受监管行业担忧&#xff0c;对企业AI战略有重要意义。新层级助力开发者谷歌为Gemini API新增Flex Inference和Priority Inference层级&…...

显卡驱动清理完全指南:从问题诊断到自动化解决方案

显卡驱动清理完全指南&#xff1a;从问题诊断到自动化解决方案 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uninstaller …...

AhabAssistantLimbusCompany:让《Limbus Company》自动化更智能的PC助手

AhabAssistantLimbusCompany&#xff1a;让《Limbus Company》自动化更智能的PC助手 【免费下载链接】AhabAssistantLimbusCompany AALC&#xff0c;PC端Limbus Company小助手。AALC&#xff0c;Limbus Company Assistant on PC 项目地址: https://gitcode.com/gh_mirrors/ah…...