我正在尝试从具有 4 个角 = 4 个共面点的平面标记进行姿势估计(实际上 [Edit: 3DOF ] 旋转是我所需要的)。
直到今天,我读到的所有内容都给我留下了深刻的印象,即您将始终计算单应性(例如使用 DLT)并使用各种可用的方法分解该矩阵(Faugeras,Zhang,该分析方法也在这篇文章中描述stackexchange ) 并在必要时使用非线性优化对其进行优化。
第一个小问题:如果这是一种分析方法(简单地从矩阵中取出两列并从中创建一个正交矩阵,从而得到所需的旋转矩阵),有什么可以优化的?我在 Matlab 中尝试过,结果抖动得很厉害,所以我可以清楚地看到结果并不完美甚至不够,但我也不明白为什么要使用 Faugeras 和 Zhang 使用的相当昂贵和复杂的 SVD如果这个简单的方法已经产生了结果。
然后是迭代姿态估计方法,如 Lu 等人的正交迭代 (OI) 算法。或者 Schweighofer 和 Pinz 的鲁棒姿态估计算法,其中甚至没有提到“单应性”这个词。他们所需要的只是一个初始姿态估计,然后对其进行优化(例如,Schweighofer 在 Matlab 中的参考实现使用了 OI 算法,该算法本身使用了一些基于 SVD 的方法)。
我的问题是:到目前为止我读到的所有内容都是'4 分?单应性,单应性,单应性。分解?好吧,棘手的,一般不是唯一的,几种方法。现在这个迭代的世界打开了,我只是无法在脑海中连接这两个世界,我不完全理解它们的关系。我什至无法正确地表达我的问题是什么,我只是希望有人能理解我在哪里。
我会非常感谢一两个提示。
编辑:是否正确地说:平面上的 4 个点及其图像通过单应性相关,即 8 个参数。可以通过使用 Faugeras、Zhang 或直接解决方案计算和分解单应矩阵来找到标记姿势的参数,每种方法都有其缺点。它也可以使用像 OI 或 Schweighofer 算法这样的迭代方法来完成,这些方法在任何时候都不会计算单应矩阵,而只是使用相应的点并且需要初始估计(可以使用来自单应性分解的初始猜测)。