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

最佳答案

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

随着单个标记器距离摄像机越来越远,一些因素在起作用,以降低标记器姿势估计的准确性。

  • 标记的投影大小变得越来越小,并且通过像素网格更加量化。距离是通过反透视除法估算的,因此随着距离的增加,其精度会降低。
  • 透视变形减少,接近平行投影。在平行投影中,标记具有两个同等可行的方向,可以交替返回(请参阅https://en.wikipedia.org/wiki/Necker_cube)。标记相对于相机的方向也很重要-在更垂直的标记 View (正交投影)中,与倾斜 View 相比,标记的俯仰和偏航不明确。随距离减小的透视变形会降低该效果,并且会导致计算出的摄影机姿势偏摆,俯仰和横向移动。
  • 考虑到标记中的像素数量较少,小规模的影响(例如传感器噪声和量化)变得更加明显,从而降低了帧与帧之间的稳定性并引起了抖动。

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

    关于c++ - ArUco姿势估计中的不稳定值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51709522/

    10-11 16:30