我正在为 Android 构建多面部跟踪器,我正在使用卡尔曼滤波器,它显然需要在它之上的一些算法来区分被跟踪的对象,目前我对匈牙利算法很感兴趣。
我确实不明白该算法是如何工作的,但如果我有带坐标的二维空间,我无法弄清楚如何构建输入矩阵。因此,假设我检测到画面中有 3 个人:
**Person1** on the coordinates [10, 20]
**Person2** on the coordinates [100, 125]
**Person3** on the coordinates [50, 200]
在下一帧中,在新坐标上仍然检测到 3 个人,但现在我想知道哪个是 Person1,哪个是 Person2,等等。上一张图片。
现在我不太确定如何构建矩阵。 列应该是这样的不同的人:
+---------+-x1--y1--x2--y2--x3--y3-+
| Person1 | |
| Person2 | |
| Person3 | |
+---------+------------------------+
值是当前位置和最后找到的位置之间的距离? 我知道这可能看起来很愚蠢,但我很困惑。
感谢您的帮助。
最佳答案
匈牙利方法解决了二分匹配问题。据我了解,它在运动跟踪中的应用解决了分配问题。
假设您在模型中有两个相同类型的点A
和B
;这些可能是空间中的几何点(或其他模型的实例)。
现在你有两个测量(想象位置),即你在某个时刻测量 X1
和 X2
以及 Y1
和 Y2
在其他某个时刻。现在的问题是确定 X1
是否对应于 Y1
以及 X2
是否对应于 Y2
还是相反。
方法是对点进行一些测量(想象一下欧氏距离)。所以每个解释都会对应一个任务;该转让将产生因该措施而产生的总成本。使用匈牙利方法,选择成本最小的分配。最便宜的任务是最有可能的任务这一论点证明了该方法的合理性。
关于algorithm - 匈牙利人脸匹配算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22864637/