我正在匹配一个模板,我知道距离&我的法线向量。
即。如果我的单应性是单位矩阵,那么我的相机距离= 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()的正确解决方案,我错过了什么?
编辑:发布"问题"没有问题......
答案 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