【发布时间】:2018-04-03 22:31:39
【问题描述】:
我正在尝试从运动代码实现标准结构,但 triangulatePoints 会产生 NaN 值。 我执行以下步骤 -
- 获取图像 1 和图像 2 的 ORB 特征。
- 匹配特征。
- 使用 findEssentialMat() 从匹配的特征和可用的相机内在信息中获取基本矩阵
- 使用recoverPose() 获取摄像机2 的位姿。假设摄像机1 位于原点。
- 获取 camera1 和 camera2 的投影矩阵。
- 使用 triangulatePoints() 获取 3D 点。
我已经尝试了 Matlab triangulate() 函数以及 camera1 和 camera2 的投影矩阵以及上面获得的匹配点。在 Matlab 的情况下,我得到了很好的结果。 但是在 C++ (Opencv 3.3) 中使用 opencv 我得到 NaN 值。
【问题讨论】:
-
您是否验证了步骤 1、2、3、4 和 5 的结果?我的意思是,您是否在 OpenCV 的每个步骤中都获得了正确的数据?您可以发布用于三角点的代码吗?
-
是的,对于第 1 步和第 2 步,我使用 drawMatches() 查看匹配点,它们看起来一致。对于步骤 3、4、5,我将计算值输入到 Matlab 三角函数,这也给了我一致的结果。我按如下方式调用 triangulatePoints() - vector
src,dst; // 图像 1 和图像 2 上的匹配点 Mat point3D; triangulatePoints(cam1,cam2,src,dst,point3D); // cam1 和 cam2 是 3x4 矩阵