lap.lapjv函数cost_limit参数
查了不少资料,最后还是看函数文档看懂了。
cost_limit 是代价矩阵中每个元素的上限值,超过cost_limit的元素就不参与分配了。
Docstring: Solve linear assignment problem using Jonker-Volgenant algorithm.cost: an N x N matrix containing the assignment costs. Entry cost[i, j] isthe cost of assigning row i to column j. extend_cost: whether or not extend a non-square matrix [default: False] cost_limit: an upper limit for a cost of a single assignment[default: np.inf] return_cost: whether or not to return the assignment costReturns (opt, x, y) where:opt: cost of the assignment, not returned if return_cost is False.x: a size-N array specifying to which column each row is assigned.y: a size-N array specifying to which row each column is assigned.When extend_cost and/or cost_limit is set, all unmatched entries will be marked by -1 in x/y. Type: builtin_function_or_method
用视频跟踪举个例子:
如图为kilman预测和检测框计算出来的代价矩阵,一般计算方式为1-iou。
然后把代价矩阵送入lapjv,以总体最小代价(分配后元素和最小)实现任务分配。
K1 | K2 | K3 | |
D1 |
0.5 |
0.6 | 0.7 |
D2 | 0.4 | 0.7 | 0.5 |
from lap import lapjv
import numpy as npa = np.array([[0.5,0.6,0.7],[0.4,0.7,0.5]])c,x,y = lapjv(a,extend_cost=True,cost_limit=0.4)print(c,x,y)output:0.4 [-1 0] [ 1 -1 -1]
c为求得的最小代价之和,x和y为分配结果,一个是将y分配给x,一个是将x分配个y,是一样的; 以x为例,-1代表未被匹配。 所以[-1,0]代表D1没有匹配项,D2匹配到了K1; cost_limit为代价矩阵中每个元素可以取值的上限不能超过0.4。
cost_limit改为0.6看一下:
from lap import lapjv
import numpy as npa = np.array([[0.5,0.6,0.7],[0.4,0.7,0.5]])c,x,y = lapjv(a,extend_cost=True,cost_limit=0.6)print(c,x,y)output: 1.0 [0 2] [ 0 -1 1]
这回两个目标都匹配上了,x=[0,2]代表D1匹配了K1,D2匹配了K3。
在目标跟踪里, cost_limit设置过小,会漏掉能匹配上的目标,设置过大,会增加错误的匹配。
lap.lapjv函数cost_limit参数相关推荐
- lap.lapjv使用方法
lap.lapjv实现线性指派问题 官方文档使用lapjv实现指派问题的算法是Jonker-Volgenant algorithm.这个算法比匈牙利算法快得多 示例 Matrix = np.matri ...
- Go 学习笔记(15)— 函数(01)[函数定义、函数特点、多值返回、实参形参、变长参数,函数作为参数调用]
1. 函数定义 Go 语言最少有个 main() 函数.函数声明告诉了编译器函数的名称,返回类型和参数. func funcName(parameter_list)(result_list) {fun ...
- python函数用法详解2(变量的作用域(全局变量、局部变量)、共享全局变量、函数返回值、函数的参数(位置参数、关键字参数、默认参数、不定长参数)、拆包、交换变量值、引用、可变和不可变类型)
1. 变量作⽤域 变量作⽤域指的是变量⽣效的范围,主要分为两类:局部变量和全局变量. 局部变量 定义在函数体内部的变量,即只在函数体内部⽣效. def testA(): ...
- Python函数及其参数
定义函数def >>> def MyfirstFunction(): print('第一个函数') >>> MyfirstFunction() 第一个函数 函数的参 ...
- python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递
python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...
- [教程]Python函数的参数
Python函数的参数 位置参数.默认值参数.可变参数.关键字参数和命名关键字参数 1 函数结构 def 函数名(参数):函数体返回值 2 位置参数 略 3 默认值参数 略 4 可变参数 # 可变长度 ...
- C++ main函数中参数argc和argv
argc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0 ...
- 数组作为函数的参数传参时,数组名会退化为指针
1.数组作为函数的参数传参时,数组名会退化为指针 数组作为函数的参数传参时,数组名会退化为指针,数值传参时,需要把数值的长度一起传过去,另外,sizeof()运算符包含字符串的哨兵'/0',而strl ...
- int main(int argc,char *argv[]),主函数的参数问题
主函数的参数 在VC++中,我们有时候看到一些程序的主函数是带有参数的,虽然我们经常用到VC++但是对主函数的参数并不是很理解: int main(int argc,char *argv[]) 对于里 ...
最新文章
- 2019年最新十篇「深度学习领域综述」论文
- Kotlin 标准库中run、let、also、apply、with函数的用法和区别
- 多个容器一起打包_程序员修神之路容器技术为什么会这么流行(记得去抽奖)
- Hibernate中保存与持久性以及saveOrUpdate之间的区别
- android版git中国只有,GitHub - ynztlxdeai/android-app: 本项目已经迁移到 git.oschina.net ,此处不再更新!...
- nginx rtmp直播无延迟_Ubuntu中使用Nginx+rtmp搭建流媒体直播服务
- vibe算法 c++实现
- Java类和对象(重点详解)
- 暑期作息时间表模板_小学生暑假作息时间表模板
- 2019年 武汉理工大学计算机考研经验分享
- 浅谈 *.axf,*.bin,*.hex 文件
- 各大主流编程语言比较,运用场景
- 图片大小怎么调整?图片怎么改尺寸?
- 服务器柜机位置摆放电子图,柜式空调摆放位置有什么要注意的吗
- 量子计算机的基本构成,量子计算机的硬件单元 文/李联宁 1. 量子寄存器 存储一系列量子比特的体系称为量子寄存器。假设有一个由3比特构成的寄存器,在经典计算机中,可... - 雪球...
- 【工具】-10 UML时序图(Sequence Diagram)学习笔记
- Ubuntu18.04打开关闭DNS服务
- 爽!一个注解,搞定 SpringBoot 操作日志
- scrollToBottom
- Web大学生网页作业成品——抗击疫情网站设计与实现(HTML+CSS)