OpenCV估计距离&单应性的法线向量

时间:2017-10-24 05:40:32

标签: c++ opencv

我正在匹配一个模板,我知道距离&我的法线向量。

即。如果我的单应性是单位矩阵,那么我的相机距离= 1.0m&我的法线是0。

现在我有了第二张图片,其中我成功对齐了我的模板,给出了单应性:

     [0.82072, 0.05685, 66.75024]
 H = [0.02006, 0.86092, 39.34907]
     [0.00003, 0.00017, 01.00000]

我也有相机矩阵。

opencv函数:

cv::decomposeHomographyMat()

为旋转(3x3垫),翻译(3x1垫)和&法向量(3x1)。

cv::warpPerspective()

能够将当前相机视图几乎完美地映射到我的模板。

因此应该可以获得实际缩放(模板到对齐)&法线向量。

但是我无法弄清楚如何真正选择cv :: decomposeHomographyMat()的正确解决方案,我错过了什么?

编辑:发布"问题"没有问题......

2 个答案:

答案 0 :(得分:3)

我明白了。

第一步:

我在ROI中创建了一组点,我可以映射到我的模板(由ROI角定义的区域中的点)。

第二步:

使用cv :: decomposeHomographyMat()

的所有解决方案来扭曲ROI中的点数(从第一步开始;在我的所有测试和用例中都有8点就足够了)

排除所有给出point3D(x,y,z)的解决方案,其中z值<&lt; 0(即点位于相机后面)。

第三步:

此时你应该留下一到两个解决方案。 所有旋转矩阵应该是相同的,只有正常的&amp;翻译矩阵应该不同。

翻译矩阵应验证:

Translation_Solution1 = -1* Translation_Solution2

然后将您的ROI区域与模板区域进行比较。 如果您的投资回报率区域小于您的模板,则表示您的模板已按比例缩小&#34;即您的相机在负值上对z进行了平移。 否则你的相机会对正z值进行翻译。

选择合适的解决方案。

我的错误是认为warpPerspective()实际上正在解决Homography分解,但事实并非如此。

答案 1 :(得分:0)

论文Faugeras O D,LustmanF。在分段平面环境中的运动和运动的结构。1988年第9页https://www.researchgate.net/publication/243764888_Motion_and_Structure_from_Motion_in_a_Piecewise_Planar_Environment enter image description here