从 4 个视图对 6 个点进行三角剖分
Triangulation of 6 points from 4 views
我有 4 个不同的对象视图,每个视图都有相应的 K 和 M 相机矩阵(内部和外部参数)。
我在每个 2D 视图上标记了 6 个 3D 点(所以 24 个 2d 点)。
我正在尝试将那些 2D 点反向投影到 3D 并在 space 中获得我的 6 个 3D 点。
大多数论文都展示了当您有 2 个视图及其矩阵时如何执行此操作。
但是,我有4个观点。我在 Python.
中使用 OpenCV
作为第一种方法,也许我可以使用 2 个视图的所有组合进行三角剖分,所以我得到 4choose2 = 6 组 3D 点,然后我对所有三角剖分进行平均。
是否有更好的方法更可取?
你认为我应该使用 OpenCV 以外的东西吗? (但它仍然必须是 Python)
我看到了两个解决你问题的方法。
1.解析解
如果您进行数学计算,您会发现每个 2D 到 3D 的对应关系都会向三角测量系统添加 2 个方程。有了 6 个视图,您将得到一个包含 12 个方程和 3 个未知数的系统。这应该是最有效的实现,但在预期有噪声输入时可能会不稳定。
2。三角剖分 + 优化
使用经典的 2 视图三角测量计算估计的 3D 点。使用 non-linear 优化来计算最小化所有 6 个视图的重投影误差的 3D 点。这是我推荐的解决方案,因为它应该是稳定的,而且一切都已经在 OpenCV 中实现了。
我有 4 个不同的对象视图,每个视图都有相应的 K 和 M 相机矩阵(内部和外部参数)。
我在每个 2D 视图上标记了 6 个 3D 点(所以 24 个 2d 点)。
我正在尝试将那些 2D 点反向投影到 3D 并在 space 中获得我的 6 个 3D 点。
大多数论文都展示了当您有 2 个视图及其矩阵时如何执行此操作。 但是,我有4个观点。我在 Python.
中使用 OpenCV作为第一种方法,也许我可以使用 2 个视图的所有组合进行三角剖分,所以我得到 4choose2 = 6 组 3D 点,然后我对所有三角剖分进行平均。
是否有更好的方法更可取? 你认为我应该使用 OpenCV 以外的东西吗? (但它仍然必须是 Python)
我看到了两个解决你问题的方法。
1.解析解
如果您进行数学计算,您会发现每个 2D 到 3D 的对应关系都会向三角测量系统添加 2 个方程。有了 6 个视图,您将得到一个包含 12 个方程和 3 个未知数的系统。这应该是最有效的实现,但在预期有噪声输入时可能会不稳定。
2。三角剖分 + 优化
使用经典的 2 视图三角测量计算估计的 3D 点。使用 non-linear 优化来计算最小化所有 6 个视图的重投影误差的 3D 点。这是我推荐的解决方案,因为它应该是稳定的,而且一切都已经在 OpenCV 中实现了。