gpt4 book ai didi

c++ - 如何对单个相机的多个图像中的点进行三角测量?

转载 作者:太空宇宙 更新时间:2023-11-03 21:11:02 25 4
gpt4 key购买 nike

我有一个校准的相机指向不同位置的棋盘,已知

  1. 相机本征。 fx,fy,cx,cy
  2. 失真系数 K1、K2、K3、T1、T2等。
  3. 来自 IMU 的相机旋转和平移 (R,T) enter image description here

Undistortion 之后,我计算了所有图像中棋盘格点与已知相机到相机的旋转和平移 vector 的点对应。

如何估计所有图像中棋盘的 3D 点?

我认为 OpenCV 有一个函数可以做到这一点,但我无法理解如何使用它!

1) cv::sfm::triangulatePoints

2) triangulatePoints

如何使用 OpenCV 计算 3D 点?

最佳答案

由于您已经从图像中获得了匹配点,因此您可以使用 findFundamentalMat()得到基本矩阵。请记住,您至少需要 7 个匹配点才能执行此操作。如果你有超过 8 分,CV_FM_RANSAC 可能是最好的选择。

然后使用cv::sfm::projectionsFromFundamental()要找到每个图像的投影矩阵,请检查投影矩阵是否有效(例如,检查点是否在相机前面)。

然后将投影和点输入到 cv::sfm::triangulatePoints() 中。

希望这有帮助:)

编辑

因为摄像机在 SFM 中移动,所以需要旋转和平移矩阵来更改引用系。引用系位于相机的位置。需要进行变换以确保点的位置一致(在相同的引用系下,通常是第一张图像中相机的 reface 框架),因此所有点都在同一坐标系中。

即。将第二帧收集的点关联到第一帧,第三帧收集到第二帧,依此类推。

所以基本上,您可以使用 R 和 T vector 为每一帧构造一个变换矩阵,并将其与您的点相乘,以将它们放入相机第一帧的重构帧中。

关于c++ - 如何对单个相机的多个图像中的点进行三角测量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43325097/

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