为什么opencv';当提供相同的点向量时,是否返回非原点位置?
无意中,我试图估算图像相对于自身的相对位置(不要问)。我希望得到0平移和0旋转的结果 令人惊讶的是,我得到了一个非零的翻译结果。事实上,我得到了一个相当重要的结果:为什么opencv';当提供相同的点向量时,是否返回非原点位置?,opencv,Opencv,无意中,我试图估算图像相对于自身的相对位置(不要问)。我希望得到0平移和0旋转的结果 令人惊讶的是,我得到了一个非零的翻译结果。事实上,我得到了一个相当重要的结果:.0825-0.0825 本质上,我的代码如下: cv::Point2d pp(u0, v0); cv::Mat R, t, mask; cv::Mat E = cv::findEssentialMat(points1, points2, focal, pp, cv::RANSAC, 0.999, 1.
.0825-0.0825
本质上,我的代码如下:
cv::Point2d pp(u0, v0);
cv::Mat R, t, mask;
cv::Mat E = cv::findEssentialMat(points1, points2, focal, pp, cv::RANSAC, 0.999, 1.0, mask);
cv::recoverPose(E, points1, points2, R, t);
在上述代码中,t!=0我的问题是:当点S1和点S2相同时,recoverPose的非零结果有效吗?如果是,原因是什么?来自文档:
“通过分解,您只能得到翻译的方向”
平移向量的构造方式是,平移的范数等于1。如果减小最大距离阈值,会发生什么?要回答您的问题,您可能需要了解5点解算器在相同点对中的工作/行为。在这种情况下,基本矩阵的条件不好。对于8点算法,您可以在奇异值分解之前检查对应矩阵的条件数,正如米卡所说。我不知道这是否适用于OpenCV使用的5点算法。无论如何,在某些情况下,场景的结构不允许您获得有效的基本矩阵(例如,纯旋转),并且您需要一些其他模型,例如单应性。搜索GRIC分数以了解决定基本矩阵或单应性的一种方法。@Mika FYI将距离阈值降至0.1。这样做对本案例没有影响。您能用超链接功能链接答案中的文档吗?用文档链接更新您的答案。这样对其他人有用。