我正在尝试估计未校准图像的绝对相机位置,即在单个图像上。我有 2 组关键点:在 3d 模型(对象坐标)和 2d 图像(uv 坐标)上。让我们假设关键点是准确的。然后我执行以下步骤:
- 我应用标准直接线性变换 (DLT) 来估计投影矩阵 P - 从 3d“世界”到 2d 图像变换 x = P*X;
- OpenCV DecomposeProjectionMatrix() 函数有助于将投影矩阵分解为外在矩阵和内在矩阵:P = K {R|t};
- 为了改进我对旋转和平移矩阵的第一次猜测,我将 SolvePnP(使用迭代方法,据我所知它为我提供了“最佳”解决方案)函数应用于关键点集和相机参数;
在几种情况下运行我的组合算法时,我注意到在大多数情况下 SolvePnP 返回非常接近基本事实的结果。其余结果不准确,旋转和平移与实际相差甚远。
问:是否可以针对我当前算法失败的这些情况进行改进:可能是基于 OpenCV CameraCalibrate() 优化内在参数,或应用其他 SolvePnP 算法?