ORB_SLAM3:单目+IMU初始化时—初始化帧与当前帧需要满足的条件

成员变量mbReadyToInitializate:是否创建了单目初始化参考帧

1、单目初始化参考帧提取的特征点数目必须大于100个;

2、单目初始化参考帧的下一帧提取的特征点数目必须大于100个,否则mbReadyToInitializate = false,需重新创建单目初始化参考帧;

3、mSensor == System::IMU_MONOCULAR且当前帧上一帧的时间戳比单目初始化参考帧的时间戳大于1秒,mbReadyToInitializate = false,需重新创建单目初始化参考帧;(注:该条件是针对恢复R、t过程中初始化失败的

4、初始化的两帧之间的匹配点少于100个,mbReadyToInitializate = false,需重新创建单目初始化参考帧。

恢复R、t过程中初始化失败时,mbReadyToInitializate = true,不需重新创建了单目初始化参考帧,下一帧图像是在创建了单目初始化参考帧的情况下进行初始化。

5、通过单应矩阵(H)恢复R、t的情况下:

1)SVD分解H时奇异值非降序排列,此时初始化失败。

2)求出的世界坐标系下的坐标(x3Dh)的第四个值为0,此时初始化失败。

3)条件一:8组R、t中成功恢复地图点第二多的要小于成功恢复地图点第一多的0.75倍;

条件二:8组R、t中成功恢复地图点第一多的视差角要要大于等于1度;

条件三:8组R、t中成功恢复地图点第一多的个数要大于50;

条件四:8组R、t中成功恢复地图点第一多的个数要大于通过了卡方检验的匹配的0.9倍。

若上面的四个条件不能同时满足,则初始化失败,程序中的判断条件如下:

if(secondBestGood < 0.75 * bestGood && bestParallax >= minParallax && bestGood > minTriangulated && bestGood > 0.9 * N)

6、通过基础矩阵(F)恢复R、t的情况下:

1)重建出的点数要大于90%的匹配点与50的最大值,F分解出的4组R、t应该只有一组很好的解(nsimilar不能大于1),否则初始化失败。

int nsimilar = 0;
if (nGood1 > 0.7 * maxGood)
    nsimilar++;
if (nGood2 > 0.7 * maxGood)
    nsimilar++;
if (nGood3 > 0.7 * maxGood)
    nsimilar++;
if (nGood4 > 0.7 * maxGood)
    nsimilar++;
// 判断条件
if (maxGood < nMinGood || nsimilar > 1)

2)求出的世界坐标系下的坐标(x3Dh)的第四个值为0,此时初始化失败。

3)3D点中较小的视差角parallaxX要大于1度,否则初始化失败。

你可能感兴趣的:(ORB_SLAM3,计算机视觉,人工智能,c++)