用5个3d点计算三维单应性

2024-10-09 02:19:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我在射影空间中有一组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是与3D度量空间中的[1,1,0,1]相对应的[X,Y,Z,1]点,等等。。 但是,这是不正确的,因为我在射影空间中,所以我需要创建一个方程组,用H的最后一行或者类似的东西除以H的行。在

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


Tags: 距离度量np空间矩阵投影方程单应
1条回答
网友
1楼 · 发布于 2024-10-09 02:19:44

我终于和一个朋友解决了这个问题,并想分享解决方案。在

因为在射影空间中,我们需要求解一个方程组,其中结果的同系坐标是彼此坐标的分母。i、 e,如果你想找到一个4x4单应矩阵H,并且你有匹配的3D点x和b(b在meteric空间中),你需要优化H参数的搜索,使得应用在x上的H将得到一个具有4个坐标的向量v,这样v的前三个坐标除以最后一个坐标都是b

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中,从而求解三维单应性H的15个自由度

相关问题 更多 >

    热门问题