gpt4 book ai didi

python - 使用 5 个 3D 点计算 3D 单应性

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:40 26 4
gpt4 key购买 nike

我在射影空间中有一组 3D 点,我想将它们转换为公制 3D 空间,以便我可以以米为单位测量距离。

为此,我需要一个 3D 到 3D 单应矩阵,它是一个具有 15 个自由度的 4x4 矩阵(因此我需要 5 个 3D 点来获得 15 个方程)。我有一组来自投影空间的这 5 个 3D 点及其在度量空间中对齐的相应 5 个 3D 点(我希望将 5 个投影点转换为)。

我不知道如何估计单应矩阵。起初我试过:

A=np.vstack([p1101.T, p1111.T, p0101.T, p0001.T, p0011.T])
b=np.array([[1,1,0,1], [1,1,1,1], [0,1,0,1], [0,0,0,1], [0,0,1,1]])
x, _, _, _ = np.linalg.lstsq(A,b)
H = x.T

其中 p1101 是 [X,Y,Z,1] 点,对应于 3D 度量空间中的 [1,1,0,1] 等。然而,这是不正确的,因为我在射影空间中,所以我需要以某种方式创建一个方程组,我将 H 的行与其最后一行或类似的东西分开。

我想也许有一个实现的方法可以为我做这件事,例如在 opencv 中,但没有找到。任何帮助将不胜感激。

最佳答案

终于和 friend 解决了这个问题,分享一下。

由于在射影空间中,需要求解一个方程组,其中结果的齐次坐标是彼此坐标的分母。即,如果你想找到一个 4x4 单应矩阵 H,并且你有匹配的 3D 点 x 和 b(b 在度量空间中),你需要优化 H 参数的搜索,这样 H 应用于 x 将给出具有 4 个坐标的向量 v,使得 v 的前三个坐标除以最后一个坐标后的所有坐标为 b。用 numpy 写成:

v = H.dot(x)
v = v[:3]/v[3]
v == b # True

在数学上,优化是基于此(为了简单起见,这里仅关注第一个坐标,但其他坐标也以相同的方式完成): mathematical explanation of the optimization for the first coordinate

所以在 python 中,需要以解释的方式为求解器安排方程式,有 5 个匹配点。问题中的目的是好的(只是没有解决正确的问题),并且在这些术语中它将进行 Ax=b 最小二乘优化,使得 A 是 15x15 矩阵,b 是 15 维向量。每个匹配点生成3个方程,然后5个匹配点将生成15个方程构建到矩阵A中,从而求解3D单应性H的15个自由度。

关于python - 使用 5 个 3D 点计算 3D 单应性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52081318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com