2021SC@SDUSC
TwoViewerReconstruction.cc
主要完成单目初始化环节
Reconstruct函数,完成位姿估计。是单目初始化的重要环节,先获得rt再通过三角化回复3D坐标
vkeys1:第一帧的关键点
vkeys2:第二帧的关键点
vMatches12 匹配关系,长度与vKeys1一样,对应位置存放vKeys2中关键点的下标
vP3D 恢复出的三维点
vbTriangulated 是否三角化成功,用于统计匹配点数量
bool TwoViewReconstruction::Reconstruct(const std::vector<cv::KeyPoint> &vKeys1, const std::vector<cv::KeyPoint> &vKeys2, const vector<int> &vMatches12,
cv::Mat &R21, cv::Mat &t21, vector<cv::Point3f> &vP3D, vector<bool> &vbTriangulated)
{
// 1. 准备工作,提取匹配关系及准备RANSAC
mvKeys1.clear();
mvKeys2.clear();
mvKeys1 = vKeys1;
mvKeys2 = vKeys2;
// Fill structures with current keypoints and matches with reference frame
// Reference Frame: 1, Current Frame: 2
// 填写mvMatches12,里面存放的是vKeys1,vKeys2匹配点的索引,
mvMatches12.clear(); // 存放匹配点的id
mvMatches12.reserve(mvKeys2.size());
mvbMatched1.resize(mvKeys1.size()); // 长度与vKeys1,表示对应位置的vKeys1中的点是否有匹配关系
for (size_t i = 0, iend = vMatches12.size(); i < iend; i++)
{
if (vMatches12[i] >= 0)
{
mvMatches12.push_back(make_pair(i, vMatches12[i]));
mvbMatched1[i] = true;
}
else
mvbMatched1[i] = false;
}
const int