ArUco姿势估计中的不稳定值

时间:2018-08-06 14:05:54

标签: c++ opencv aruco

我正在尝试使用Aruco标记物找到相机的方向。从旋转矩阵提取的欧拉角在某个点以上不稳定。 随着摄像机到标记的距离增加,摄像机的偏航角值变得不稳定。标记上的“ Z”轴翻转。 欧拉角抖动,在每帧中都不相同,并且需要花费一些时间才能稳定下来。如何获得偏航角和相机与标记之间的距离的可靠值? 我试图找到没有静态标记的移动相机的姿势。 我实施了 solvePnP solvePnPRansac 都会产生不稳定的结果。 从 estimatePoseSingleMarker 转换旋转向量后获得的旋转矩阵似乎可以达到一定程度,但会失去稳定性。 我该怎么办? 谢谢

1 个答案:

答案 0 :(得分:3)

通常,您不会从单个标记获得准确的相机姿态估计。解决方案是添加更多标记。您可以使用标记板,也可以使用更稀疏的标记图案。

随着单个标记物距离相机越来越远,一些因素会降低标记物姿态估计的准确性。

  1. 标记的投影尺寸变得更小,并且通过像素网格更加量化。距离是通过反透视分割法估算的,因此随着距离的增加,精度会降低。

  2. 透视失真减小,接近平行投影。在平行投影中,标记具有两个同等可行的方向,可以交替返回(参见https://en.wikipedia.org/wiki/Necker_cube)。标记相对于相机的方向也很重要-在更垂直的标记视图(正交投影)中,与倾斜视图相比,标记的俯仰和偏航不明确。随距离减少的透视失真会降低此效果,并导致计算出的摄影机姿势偏摆,俯仰和横向移动。

  3. 鉴于标记中的像素数量较少,小范围的影响(如传感器噪声和量化)变得更加明显,从而降低了帧与帧之间的稳定性并引起抖动。

正如您所发现的,姿势估计在单个标记的特写,倾斜视图中可以正常工作,因为为solvePnP()提供的投影点相距较远且透视畸变较大。通过添加更多标记,您将始终具有用于solvePnP()的理想投影点。