首页 > 解决方案 > ArUco 姿态估计中的不稳定值

问题描述

我正在尝试使用 Aruco 标记查找相机的方向。从旋转矩阵中提取的欧拉角在某个点之后是不稳定的。随着相机与标记距离的增加,相机的偏航角值只是不稳定的。标记上的“Z”轴翻转。欧拉角是抖动的,每一帧都不一样,需要时间来稳定。如何获得相机和标记之间的偏航角和距离的一些可靠值?我正在尝试通过静态标记找到移动相机的姿势。我实现了solvePnPsolvePnPRansac都产生了不稳定的结果。从estimatePoseSingleMarker转换旋转向量后得到的旋转矩阵 在某种程度上似乎还不错,但失去了稳定性。我该怎么做?谢谢

标签: c++opencvaruco

解决方案


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

随着单个标记离相机越来越远,有几个因素会降低标记姿势估计的准确性。

  1. 标记的投影尺寸变得更小,像素网格更量化。距离是通过逆透视除法估计的,因此随着距离的增加,它变得不那么准确。

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

  3. 鉴于标记中的像素数量较少,传感器噪声和量化等小尺度效应变得更加显着,从而降低了帧与帧之间的稳定性并导致抖动。

正如您所发现的,姿势估计在单个标记的特写倾斜视图中工作正常,因为给solvePnP() 的投影点相距很远并且具有很大的透视失真。通过添加更多标记,您始终可以获得solvePnP() 的理想投影点。


推荐阅读