如何从单个摄像头的多个图像中三角化点?

3
我有一个单一校准相机,对着不同位置的棋盘进行拍摄。
以下是需要知道的内容:
  1. 相机内参。fx,fy,cx,cy。
  2. 畸变系数 K1,K2,K3,T1,T2等。
  3. 相机旋转和平移(R,T)通过IMU。(即:惯性测量单元)enter image description here
消除畸变后,已经计算出所有图像中棋盘点的点对应关系,并且知道了相机对相机的旋转和平移向量。
如何估计所有图像中棋盘的三维点?
我认为OpenCV有一个函数可以完成此任务,但我不明白如何使用它!
以下是2个函数:

1) cv::sfm::triangulatePoints

2) triangulatePoints

如何使用OpenCV计算三维点?

Balaji-R,你找到解决方案了吗? - Bleach
1个回答

1
由于您已经从图像中获得了匹配点,因此您可以使用findFundamentalMat()来获取基础矩阵。请记住,您至少需要7个匹配点才能执行此操作。如果您有8个以上的点,则CV_FM_RANSAC可能是最佳选项。
然后使用cv::sfm::projectionsFromFundamental()查找每个图像的投影矩阵,检查投影矩阵是否有效(例如,检查点是否在相机前面)。
然后将投影和点输入到cv::sfm::triangulatePoints()中。
希望这可以帮助您 :) 编辑 旋转和平移矩阵在SFM中用于改变参考系,因为相机会移动。参考系位于相机的位置。必须进行变换以确保点的位置在一个连贯的坐标系下(通常是第一张图像中相机的参考系),这样所有点都在同一个坐标系中。
例如,将第二帧收集的点与第一帧相关联,将第三帧与第二帧相关联,以此类推。
因此,基本上可以使用R和T向量构建每个帧的变换矩阵,并将其乘以您的点,以将它们放置在第一帧中相机的参考系中。

谢谢您的回答!这正是cv::sfm::reconstruct函数所做的!http://docs.opencv.org/3.1.0/da/db5/group__reconstruction.html#ga279c084302ae1d7541d458e4b23fabd3 但我不明白的是我的相机R&T向量如何在其中使用?我已经知道了我的相机的R&T!我该如何使用它来找到棋盘的位置? - Balaji R
1
根据我有限的了解,8点算法并不直接使用旋转和平移矩阵。#不确定 我会在编辑中尝试解释这个问题 - cocovii
如果您想了解更多信息,请阅读这本书《计算机视觉中的多视角几何》。 - cocovii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接