我有一个校准过的相机指向不同位置的棋盘,并且已知
答案 0 :(得分:1)
由于您已经从图像中获得了匹配点,因此您可以使用findFundamentalMat()来获取基本矩阵。请记住,您需要至少7个匹配点才能执行此操作。如果你有超过8分,CV_FM_RANSAC可能是最好的选择。
然后使用cv::sfm::projectionsFromFundamental()查找每个图像的投影矩阵,检查投影矩阵是否有效(例如,如果点位于摄像机前面,则检查。)
然后将投影和点数输入cv :: sfm :: triangulatePoints()。
希望这会有所帮助:)
修改强>
需要旋转和平移矩阵来更改参考帧,因为摄像机在SFM中移动。参考框架位于摄像机的位置。需要变换以确保点的位置是相干的(在相同的参考帧下,通常是第一图像中的相机的反面帧),因此所有点都在相同的坐标系中。
IE。将第二帧收集的点与第一帧,第三帧和第二帧相关联,依此类推。
所以基本上你可以使用R和T向量为每个帧构造一个变换矩阵,并将它与你的点相乘,将它们放在第一帧的摄像机的reface帧中。