查了不少资料,最后还是看函数文档看懂了。

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参数相关推荐

  1. lap.lapjv使用方法

    lap.lapjv实现线性指派问题 官方文档使用lapjv实现指派问题的算法是Jonker-Volgenant algorithm.这个算法比匈牙利算法快得多 示例 Matrix = np.matri ...

  2. Go 学习笔记(15)— 函数(01)[函数定义、函数特点、多值返回、实参形参、变长参数,函数作为参数调用]

    1. 函数定义 Go 语言最少有个 main() 函数.函数声明告诉了编译器函数的名称,返回类型和参数. func funcName(parameter_list)(result_list) {fun ...

  3. python函数用法详解2(变量的作用域(全局变量、局部变量)、共享全局变量、函数返回值、函数的参数(位置参数、关键字参数、默认参数、不定长参数)、拆包、交换变量值、引用、可变和不可变类型)

    1. 变量作⽤域         变量作⽤域指的是变量⽣效的范围,主要分为两类:局部变量和全局变量. 局部变量         定义在函数体内部的变量,即只在函数体内部⽣效. def testA(): ...

  4. Python函数及其参数

    定义函数def >>> def MyfirstFunction(): print('第一个函数') >>> MyfirstFunction() 第一个函数 函数的参 ...

  5. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递

    python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...

  6. [教程]Python函数的参数

    Python函数的参数 位置参数.默认值参数.可变参数.关键字参数和命名关键字参数 1 函数结构 def 函数名(参数):函数体返回值 2 位置参数 略 3 默认值参数 略 4 可变参数 # 可变长度 ...

  7. C++ main函数中参数argc和argv

    argc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0 ...

  8. 数组作为函数的参数传参时,数组名会退化为指针

    1.数组作为函数的参数传参时,数组名会退化为指针 数组作为函数的参数传参时,数组名会退化为指针,数值传参时,需要把数值的长度一起传过去,另外,sizeof()运算符包含字符串的哨兵'/0',而strl ...

  9. int main(int argc,char *argv[]),主函数的参数问题

    主函数的参数 在VC++中,我们有时候看到一些程序的主函数是带有参数的,虽然我们经常用到VC++但是对主函数的参数并不是很理解: int main(int argc,char *argv[]) 对于里 ...

最新文章

  1. 2019年最新十篇「深度学习领域综述」论文
  2. Kotlin 标准库中run、let、also、apply、with函数的用法和区别
  3. 多个容器一起打包_程序员修神之路容器技术为什么会这么流行(记得去抽奖)
  4. Hibernate中保存与持久性以及saveOrUpdate之间的区别
  5. android版git中国只有,GitHub - ynztlxdeai/android-app: 本项目已经迁移到 git.oschina.net ,此处不再更新!...
  6. nginx rtmp直播无延迟_Ubuntu中使用Nginx+rtmp搭建流媒体直播服务
  7. vibe算法 c++实现
  8. Java类和对象(重点详解)
  9. 暑期作息时间表模板_小学生暑假作息时间表模板
  10. 2019年 武汉理工大学计算机考研经验分享
  11. 浅谈 *.axf,*.bin,*.hex 文件
  12. 各大主流编程语言比较,运用场景
  13. 图片大小怎么调整?图片怎么改尺寸?
  14. 服务器柜机位置摆放电子图,柜式空调摆放位置有什么要注意的吗
  15. 量子计算机的基本构成,量子计算机的硬件单元 文/李联宁 1. 量子寄存器 存储一系列量子比特的体系称为量子寄存器。假设有一个由3比特构成的寄存器,在经典计算机中,可... - 雪球...
  16. 【工具】-10 UML时序图(Sequence Diagram)学习笔记
  17. Ubuntu18.04打开关闭DNS服务
  18. 爽!一个注解,搞定 SpringBoot 操作日志
  19. scrollToBottom
  20. Web大学生网页作业成品——抗击疫情网站设计与实现(HTML+CSS)

热门文章

  1. Android对话框和帧动画
  2. 电脑dhcp服务器修改,更改电脑dhcp服务器地址
  3. 强化学习 蒲丰投针实验 蒙特卡洛算法
  4. 是否真的输在起跑线上?
  5. 单卡3090可得专属ChatGPT:使用LoRA+ChatGLM
  6. mybatis一级缓存和二级缓存数据脏读问题
  7. 向质量要增长,内容社区告别“大水漫灌”时代
  8. Redis缓存的雪崩、穿透、击穿
  9. 字节跳动头条2022测试开发岗 3+1 面经+经验分享(收到offer,入职月薪30K)
  10. 盛世昊通愿天下无拐,期待所有失孤家庭早日团圆