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

时间:2012-02-16 17:43:43

标签: math optimization computer-vision nonlinear-optimization levenberg-marquardt

我正在研究运动应用程序中的结构,我正在跟踪放置在对象上的许多标记,以确定对象的刚性结构。

该应用实际上是在多个摄像机视图上使用标准的Levenberg-Marquardt优化,并最大限度地减少了预期标记点与2D视图中每个视图中获得的标记点之间的差异。

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

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

其中calculateXY值取决于需要通过优化找到的一些未知参数,而ObservationXY是2D中的标记点位置。总的来说,我有(标记点*视图)功能的数量,如上面的那个我希望最小化的功能。

我已经编码了相机的模拟,看到了所有的标记点,但我想知道如何处理这些情况,因为在运行过程中,由于光线,遮挡或者不在摄像机视图中,这些点是不可见的。在应用程序的实际运行中,我将使用网络摄像头来查看对象,因此可能不会立即看到所有标记,并且取决于我的计算机视觉算法的强大程度,我可能无法检测到一直都是标记。

我想在无法观察到标记点的情况下将diff值设置为0(sigma平方差= 0),但是这会使结果偏斜吗?

我注意到的另一件事是,当呈现太多视图时算法不太好。当呈现太多视图时,更有可能估计出错误的解决方案。这是捆绑调整的常见问题,因为当观看太多视图时,达到局部最小值的可能性增加了吗?

1 个答案:

答案 0 :(得分:1)

通常的做法是省略与缺失标记相对应的术语。 IE浏览器。如果没有calculateXY-observedXY字词,请勿尝试最小化observedXY。没有必要将任何东西设置为零,你甚至不应该首先考虑这个术语 - 只是跳过它(或者,我想在你的代码中,它相当于将误差设置为零)。

如果您只是在其上投掷大量观察结果,则捆绑调整可能会非常失败。通过首先解决几个视图然后继续添加来逐步构建解决方案。

你可能想尝试某种“健壮”的方法。不使用最小二乘法,而是使用“损失函数”1。即使有少数观察结果不正确,这些也可以使您的优化生存。您仍然可以在Levenberg-Marquardt框架中执行此操作,您只需将损失函数的导数合并到雅可比行列式中。