【问题标题】:OpenCV estimate distance & normal vector from homographyOpenCV从单应性估计距离和法线向量
【发布时间】:2018-04-04 19:16:52
【问题描述】:

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

即如果我的单应性是单位矩阵,那么我的相机在距离 = 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 mat)、平移(3x1 mat)和法线向量(3x1)提供了 4 个解决方案。

cv::warpPerspective()

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

所以应该可以得到实际的缩放比例(模板到对齐)和法线向量。

但我不知道如何实际选择 cv::decomposeHomographyMat() 的正确解决方案,我错过了什么吗?

编辑:发布了没有问题的“问题”......

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    我想通了。

    第一步:

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

    第二步:

    使用 cv::decomposeHomographyMat() 的所有解决方案扭曲 ROI 中的点(从第一步开始;在我的所有测试和用例中,8 个点就足够了)

    排除所有给出 z 值

    第三步:

    此时您应该还有一到两个解决方案。 所有的旋转矩阵应该相同,只有法线和平移矩阵应该不同。

    翻译矩阵应该验证:

    Translation_Solution1 = -1* Translation_Solution2
    

    然后将您的 ROI 区域与您的模板区域进行比较。 如果您的 ROI 区域小于您的模板,则意味着您的模板已“按比例缩小”,即您的相机在负值中对 z 进行了平移。 否则,您的相机对正 z 值进行了平移。

    选择合适的解决方案。

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

    【讨论】:

    • 能否从二维平面上的分解过程中获得绝对平移?如果您能向我展示我可以遵循的样本工作,我将不胜感激。谢谢你!
    • 有可能,创建一个问题并链接它,评论不是这样做的好地方。
    • 我已经问过这个问题一段时间了。非常感谢您感兴趣。这是我问的链接:stackoverflow.com/questions/47264004/…
    【解决方案2】:

    在论文 Faugeras O D, Lustman F. Motion and structure from motion in a piecewise plane environment.1988 page 9 https://www.researchgate.net/publication/243764888_Motion_and_Structure_from_Motion_in_a_Piecewise_Planar_Environment

    【讨论】:

    • 该论文文本部分的文本表示(或者最好是最相关部分的摘要)将是首选。想想那些通过屏幕阅读器使用 StackOverflow 的人。
    • 感谢苏杰,这篇文章帮助我了解了如何选择合适的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2016-09-27
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    相关资源
    最近更新 更多