首页 >> 知识 >> ORBSLAM2单应矩阵计算及代码分析

ORBSLAM2单应矩阵计算及代码分析

单应矩阵代码分析

if(mpInitializer->Initialize( mCurrentFrame, //当前帧 mvIniMatches, //当前帧和参考帧的特征点的匹配关系 Rcw, tcw, //初始化得到的相机的位姿 mvIniP3D, //进行三角化得到的空间点集合 vbTriangulated)) //以及对应于mvIniMatches来讲,其中哪些点被三角化了 { // Step 6 初始化成功后,删除那些无法进行三角化的匹配点 for(size_t i=0, iend=mvIniMatches.size(); i=0 && !vbTriangulated[i]) { mvIniMatches[i]=-1; nmatches--; } } // Set Frame Poses // Step 7 将初始化的第一帧作为世界坐标系,因此第一帧变换矩阵为单位矩阵 mInitialFrame.SetPose(cv::Mat::eye(4,4,CV_32F)); // 由Rcw和tcw构造Tcw,并赋值给mTcw,mTcw为世界坐标系到相机坐标系的变换矩阵 cv::Mat Tcw = cv::Mat::eye(4,4,CV_32F); Rcw.copyTo(Tcw.rowRange(0,3).colRange(0,3)); tcw.copyTo(Tcw.rowRange(0,3).col(3)); mCurrentFrame.SetPose(Tcw); // Step 8 创建初始化地图点MapPoints // Initialize函数会得到mvIniP3D, // mvIniP3D是cv::Point3f类型的一个容器,是个存放3D点的临时变量, // CreateInitialMapMonocular将3D点包装成MapPoint类型存入KeyFrame和Map中 CreateInitialMapMonocular(); }//当初始化成功的时候进行

通过

网站地图