匈牙利算法为一种二分图最大匹配的指派算法,在多目标跟踪中比较常用,以下是工程化的匈牙利算法步骤:
Step1.将元素排列成为矩阵,列为被指派对象,行为匹配权重
Step2.将矩阵补齐为M*M的方阵,补的元素为原始矩阵中的最大值
Step3.找出每行的最下元素A1,A2...An,然后每行的所有元素分别减去本行的最小值
Step4.找出所有不含0元素的列,然后这些列的每个元素分别减去本列的最下值,产生0
Step5.用最少的直线覆盖矩阵中的全部0元素,如果行方向的直线数量等于列方向的直线数量,跳到Step8
Step6.从没有被覆盖的元素中找出最小值n,矩阵中所有被覆盖的元素都加上n,如果一个元素被直线覆盖两次,则加2n,没有被覆盖的元素不做处理
Step7.从矩阵全部元素中找出最小值n,矩阵中所有元素均减去n
重复Step5,如果满足条件,跳到Step8,否则继续执行Step6、Step7
Step8.选出M个0,使得每个0都不同行不同列
Step9.将选出0的位置映射回原始矩阵,即可得到指派方案。