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

Math 如何处理运动优化/束调整中的结构缺失数据,math,optimization,computer-vision,nonlinear-optimization,levenberg-marquardt,Math,Optimization,Computer Vision,Nonlinear Optimization,Levenberg Marquardt,我正在使用“运动”应用程序处理一个结构,并跟踪放置在对象上的多个标记,以确定对象的刚性结构 该应用程序本质上是在多个摄像机视图上使用标准的Levenberg-Marquardt优化,并最小化预期标记点和从每个视图中获得的二维标记点之间的差异 对于每个标记点和每个视图,以下功能最小化: double diff = calculatedXY[index] - observedXY[index] 其中,计算的XY值取决于需要通过优化找到的许多未知参数,并且observedXY是2D中的标记点位置。总

我正在使用“运动”应用程序处理一个结构,并跟踪放置在对象上的多个标记,以确定对象的刚性结构

该应用程序本质上是在多个摄像机视图上使用标准的Levenberg-Marquardt优化,并最小化预期标记点和从每个视图中获得的二维标记点之间的差异

对于每个标记点和每个视图,以下功能最小化:

double diff = calculatedXY[index] - observedXY[index]
其中,计算的XY值取决于需要通过优化找到的许多未知参数,并且observedXY是2D中的标记点位置。总的来说,我有(标记点*视图)数量的功能,像上面的一样,我的目标是最小化

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

我想在无法观察到标记点的情况下,将差异值设置为0(sigma squared difference=0),但这会使结果产生偏差吗


我注意到的另一件事是,当呈现太多视图时,算法没有那么好。当呈现太多视图时,更可能估计出不好的解决方案。这是束调整的一个常见问题,因为当显示太多视图时,命中局部最小值的可能性增加了吗?

通常的做法是省略与缺少的标记相对应的术语。也就是说,如果没有
observedXY
术语,不要试图最小化
calculateXY observedXY
。没有必要将任何内容设置为零,您甚至不应该首先考虑这个术语——跳过它(或者,我猜在您的代码中,它相当于将错误设置为零)

如果你只是简单地抛出大量的观察结果,束调整可能会失败得很厉害。通过先使用几个视图进行求解,然后继续添加,逐步构建解决方案

您可能想尝试某种“健壮”的方法。使用“损失函数”代替最小二乘法。即使存在少量不正确的观察结果,这些都能让您的优化得以生存。在Levenberg-Marquardt框架中仍然可以这样做,只需要将损失函数的导数合并到雅可比矩阵中