基于ORB-SLAM2的图片识别,其功能是首先运行ORB-SLAM2,在运行过程中调起另一个线程进行图像识别,识别成功后在图片上渲染AR中的立方体模型。
识别过程主要基于ORB-SLAM2中的BoW算法,同样使用DBoW2库和ORB特征以及词汇树视觉词典。其主要流程可以概括为:运行ORB-SLAM2,加载ORB词典,然后读取训练图像进行BoW训练,完成之后就是SLAM的过程了,使用Pangolin做的UI界面,开启图像识别之后,线程会取当前帧和训练图像做BoW向量的相似性打分,我的策略是当当前帧和某一图像的相似性得分大于某个得分时(0.015左右),就认为当前帧和该图相似,然后再进行特征匹配,同时使用正向索引加速匹配过程,如果同时匹配上的特征大于某个阈值(nmatches),则认为这两幅图像的确是相似的,则选中匹配上的3D特征点,利用这些特征点进行Delaunay三角剖分进行三角网格的绘制,同时绘制虚拟立方体在匹配3D特征点的均值位置上,效果还可以。
同时在这个里面继承了原来的平面检测模块,但是缩小了平面检测的范围,主要方法是在当前帧图像上截取一个1/2~2/3的矩形框,将矩形框内的3D点以及特征点等信息作为检测平面的依据,这样可以将举行框对准一小块儿平面区域进行检测,准确率较高,效果较好。
效果附图:mark
程序文件:略。
时间: 2024-09-30 18:44:51