gpt4 book ai didi

python - cv2 triangulatePoints 总是返回相同的 Z 值

转载 作者:行者123 更新时间:2023-12-02 16:04:08 28 4
gpt4 key购买 nike

我正在尝试使用 cv2.triangulatePoints 获取 3D 点,但它总是返回几乎相同的 Z 值。我的输出如下所示:output image and output 3d points正如它所看到的,所有点都在几乎相同的 Z 值中。没有深度。

这是我的三角剖分:

    def triangulate(self, proj_mat1, pts0, pts1):
proj_mat0 = np.zeros((3,4))
proj_mat0[:, :3] = np.eye(3)
pts0, pts1 = self.normalize(pts0), self.normalize(pts1)
pts4d = cv2.triangulatePoints(proj_mat0, proj_mat1, pts0.T, pts1.T).T
pts4d /= pts4d[:, 3:]
out = np.delete(pts4d, 3, 1)
print(out)
return out

这是我的投影矩阵计算:

    def getP(self, rmat, tvec):
P = np.concatenate([rmat, tvec.reshape(3, 1)], axis = 1)
return P

这是我得到 rmat、tvec 和调用三角测量的部分:

    E, mask = cv2.findEssentialMat(np.array(aa), np.array(bb), self.K)
_, R, t, mask = cv2.recoverPose(E, np.array(aa), np.array(bb), self.K)
proj_mat1 = self.getP(R, t)
out = self.triangulate(proj_mat1, np.array(aa, dtype = np.float32), np.array(bb, dtype = np.float32))

我的相机矩阵:

array([[787.8113353 ,   0.        , 318.49905794],
[ 0. , 786.9638204 , 245.98673477],
[ 0. , 0. , 1. ]])

我的投影矩阵1:

array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.]])

解释:

  • aa和bb是2帧的匹配点。
  • self.K 是我的相机矩阵
  • 从基本矩阵中提取旋转和平移矩阵
  • 根据匹配的关键点计算的基本矩阵。它改变每一帧。
  • 投影矩阵 2 每帧都会改变。

更改第一个投影矩阵后的输出(我从 matplotlib 切换到 pangolin 作为 3D 可视化工具):output

使用我在评论中提到的 P1 和 P2 后的输出:enter image description here

我的错误在哪里?如果需要任何进一步的信息,请告诉我。我会更新我的问题。

最佳答案

不幸的是,我无法直接复核,但我的直觉是,您面临的问题本质上是由于您选择的第一个投影矩阵所致

我做了一些研究,发现 this great paper理论和实践。尽管与您的方法略有不同,但有一点值得一提

如果仔细检查,第一个投影矩阵恰好是相机矩阵,最后一列为零。事实上,第一个相机的旋转矩阵减少为单位矩阵,相应的平移向量是一个空向量,所以使用 this general formula :

P = KT

其中P为投影矩阵,K为相机矩阵,T为旋转矩阵R得到的矩阵code> 两侧是翻译向量 t 根据:

T = [R|t]

然后你会得到:

matrices_multiplication

回到你的情况,首先我建议像刚才说的那样改变你的第一个投影矩阵

此外,我知道您计划在每一帧处理不同的内容,但如果在建议的更改之后,内容仍然不匹配,那么在您看来,我会开始只处理 2 张图像 [我认为您含蓄地已经创建了 aabb] 之间的对应关系,首先使用您的算法计算矩阵,然后与根据上述文章获得的矩阵进行核对

通过这种方式,您将能够了解/调试哪些矩阵给您带来麻烦

关于python - cv2 triangulatePoints 总是返回相同的 Z 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64260851/

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