如何处理结构从运动优化/束调整中的缺失数据

4

我正在开发一个运用结构从动技术的应用程序,通过追踪物体上的若干标记来确定物体的刚性结构。

该应用程序基本上使用多个摄像机视角下的标准Levenberg-Marquardt优化,并最小化每个视角中预期标记点与从2D中获取的标记点之间的差异。

对于每个标记点和每个视角,将最小化以下函数:

double diff = calculatedXY[index] - observedXY[index]

计算出的XY值取决于许多未知参数,需要通过优化找到,并且观察到的XY是二维标记点的位置。总共有(标记点*视图)数量的函数与上面的函数类似,我旨在将其最小化。

我已经编写了一个模拟摄像机看到所有标记点的程序,但我想知道如何处理在运行过程中由于光照、遮挡或不在摄像机视野内而无法看到点的情况。在实际运行应用程序时,我将使用网络摄像头查看对象,因此可能不会同时看到所有标记,而且根据我的计算机视觉算法的鲁棒性,我可能无法始终检测到标记。

如果无法观察到标记点,则考虑将差异值设置为0(sigma平方差= 0),但这是否会扭曲结果呢?

另一件我注意到的事情是,当提供太多视图时,该算法效果不佳。当提供太多视图时,它更可能估计出错误的解决方案。这是否是捆绑调整的常见问题,因为提供太多视图会增加命中局部最小值的可能性?

1个回答

1

通常的做法是省略掉对应缺失标记的术语。例如,如果没有observedXY项,则不要尝试最小化calculateXY-observedXY。没有必要将任何东西设置为零,你甚至不应该在第一次考虑这个术语 - 只需跳过它(或者,在你的代码中,相当于将误差设置为零)。

如果你只是简单地向其提供大量观测数据,那么捆绑调整可能会失败。通过先使用几个视图进行求解,然后不断添加来逐步构建你的解决方案。

你可能想尝试某种“鲁棒”方法。不要使用最小二乘法,而是使用“损失函数”1。即使有少数观测值是不正确的,这些函数也可以让你的优化得以生存。你仍然可以在Levenberg-Marquardt框架中实现这一点,只需要将你的损失函数导数纳入到Jacobian中即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接