点击上方“ 3D视觉工坊 ”,选择“星标” 干货第一时间送达
3D视觉工坊的第63篇文章
近期在学习SLAM中的回环检测模块,着重于对于字典的训练方式进行了研究,简单整理了下学习笔记如下。
一 DBoW库
首先,DBoW库的作者github网址: https://github.com/dorian3d?tab=overview&from=2018-12-01&to=2018-12-31 DBoW3是DBoW2的增强版,这是一个开源C++库,用于给图像特征排序,并将图像转化成视觉词袋表示。
DBoW3与DBoW2的主要差别: 1、DBoW3可使用二值和浮点特征描述子,无需为任何描述符重写类; 2、DBoW3可以在Linux和Windows下编译; 3、仍然和DBoW2中的yml文件兼容。 4、DBoW3依赖项只有OpenCV,DBoW2依赖项DLIB被移除; 5、重写了代码进行优化,DBoW3的接口也被简化了; 6、可使用二进制视觉词典文件,加载或者保存速度更快,而且,二进制文件还能被压缩; 同时,DoW3还生成一个图像数据库,带有顺序索引和逆序索引,可以使图像特征的检索和对比非常快。
二 ORB-SLAM2中的字典DBoW
无论是DBoW2,还是DBoW3,我们发现它们封装的函数可以创建的字典文件格式都为yml格式,不能直接应用于不能直接应用于ORB-SLAM2,而ORB-SLAM2中的词典为ORBvoc.txt格式。
2.1 ORB-SLAM2中的ORBvoc.txt文件
SLAM中的字典文件是作者使用非常庞大的图片库生成的,对室内和户外都有很好的效果,有时候自己生成的字典,由于我们采集的图片质量以及数据集没有他们那么庞大,效果不一定会比作者提供的好,其文件格式如下: 10 6 0 0 #分别表示上面的树的分支、树的深度、相似度、权重 0 0 252 188 188 242 169 109 85 143 187 191 164 25 222 255 72 27 129 215 237 16 58 111 219 51 219 211 85 127 192 112 134 34 0 ... #0表示节点的父节点;0表示是否是叶节点,是的话为1,否则为0;252-34表示orb特征;最后一位是权重。
2.2 DBoW3生成的yml文件格式
首先我们来看一下yml格式的字典内容: vocabulary: k: 10 #表示树的分支 L: 5 #表示树的深度 scoringType: 0 #相似度 weightingType: 0 #权重 nodes:#节点,以下三个分别表示:节点id,父节点id,权重 - { nodeId:1, parentId:0, weight:0., descriptor:"0 32 62 65 18 172 93 223 86 104 133 132 233 11 79 219 43 144 216 249 195 98 76 35 26 140 179 213 1 63 115 63 110 130 " } - { nodeId:2, parentId:0, weight:0., descriptor:"0 32 254 180 252 240 173 125 80 203 219 191 181 57 78 253 78 159 143 215 237 16 62 103 235 211 219 219 85 127 195 108 78 71 " } ... words: - { wordId:0, nodeId:31 } - { wordId:1, nodeId:32 } - { wordId:2, nodeId:33 } ...
2.3 如何生成ORB-SLAM2中的ORBvoc.txt文件格式