- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 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/
我是一名优秀的程序员,十分优秀!