【问题标题】:Triangulation of 6 points from 4 views来自 4 个视图的 6 个点的三角剖分
【发布时间】:2018-08-13 17:28:54
【问题描述】:

我有 4 个不同的对象视图,每个视图都有对应的 K 和 M 相机矩阵(内部和外部参数)。

我在每个 2D 视图上标记了 6 个 3D 点(所以 24 个 2d 点)。

我正在尝试将这些 2D 点反向投影到 3D 并在空间中获得我的 6 个 3D 点。

当您有 2 个视图及其矩阵时,大多数论文都会展示如何做到这一点。 但是,我有 4 个视图。我在 Python 中使用 OpenCV。

作为第一种方法,也许我可以使用 2 个视图的所有组合进行三角剖分,所以我得到 4choose2 = 6 组 3D 点,然后我对所有三角剖分进行平均。

是否有更好的方法更可取? 你认为我应该使用 OpenCV 以外的东西吗? (但它仍然必须是 Python)

【问题讨论】:

  • OpenCV 的 cvTriangulatePoints() 仅支持 two-view 三角剖分。主要的无赖:|我添加了一个feature request

标签: computer-vision opencv3.0 triangulation vision


【解决方案1】:

我看到了两种解决您问题的方法。

1.解析解

如果您进行数学运算,您会发现每个 2D 到 3D 对应关系都会向三角测量系统添加 2 个方程。通过 6 个视图,您将获得一个包含 12 个方程和 3 个未知数的系统。这应该是最有效的实现,但在预期有噪声输入时可能会不稳定。

2。三角测量 + 优化

使用经典的 2-View 三角剖分计算估计的 3D 点。使用非线性优化来计算最小化所有 6 个视图的重投影误差的 3D 点。这是我推荐的解决方案,因为它应该是稳定的,并且所有内容都已在 OpenCV 中实现。

【讨论】:

  • 对于第二种方法,您是否会引用此功能? docs.opencv.org/3.0-beta/modules/calib3d/doc/…
  • 不,您可以使用它,但这还不够。您需要对多个相机和点进行优化。这里的关键词是Bundle Adjustment。
  • 给我投影矩阵和对应点,我觉得这个比较合适docs.opencv.org/3.3.0/d0/dbd/…
  • 该方法是我回答的第一个解决方案。你可以试试,应该是个不错的起点。
猜你喜欢
  • 2011-09-23
  • 1970-01-01
  • 2021-11-23
  • 2017-07-12
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
相关资源
最近更新 更多