转载地址:冯兵一个简单的视觉里程计实现(1)
前一篇博文中已经简单介绍了视觉里程计,这一篇中对上述过程进行进一步的阐述。
PS:图中的彩色字体均带有相应的链接
图像获取
目前主要采用KITTI的数据集,采用公共数据集可以对自己的算法效率和精度进行评估。具体的获取基于OpenCV进行实现。
图像畸变处理
图像在成像过程中由于镜头等相关因素会形成畸变,对于普通图像需进行畸变矫正,这个可以在对镜头进行标定的时候进行解决,具体标定可以参考matlab或者opencv,这边采用的KITTI数据集已经对图像进行了畸变处理,如何根据上述标定的结果对图像进行补偿失真,具体可以参考OpenCV中的介绍使用。
特征提取
特征提取是一个视觉问题的基础部分,虽然深度学习在特征提取问题中已经取得了不错的成果,但是在实用的角度(比如考虑效率)人工特征提取还很有必要,计算机视觉中常用的图像特征包括:点,边缘,直线,曲线等。在我们基础部分,我们主要考虑点特征,点特征也分为角点和斑点特征,对于经典的斑点特征提取SIFT,SURF等算法在执行效率上较为欠缺,目前我们主要使用FAST(features from accelerated segment test)特征提取算法。
FAST算法简单过程,假设有一个点p p是我们要检测的点,如下图所示:
fast特征检测
具体就是查看点p p周围的16个点的像素值与该候选点灰度的差别是否够大(灰度值大于某个阈值),如果个数足够大(16个点中差值大于某个阈值的个数大于某个阈值,通常认为阈值为周长的四分之三),则认为该候选点位一个特征点。
为了获得更快的结果,作者通过对候选点周围中上下左右四点(即上图中1,5,9,13)先进行检查,这4个点中至少有3个点与候选点灰度值足够大,否则不用计算其它点,直接认为该候选点不是特征点,更详细的过程可以参考上述论文。
在OpenCV中可以进行简单实现,这边参考一起做RGB-D SLAM(1),将项目源码整理成如下:
在CMakeLists.txt添加内容如下:
1 | CMAKE_MINIMUM_REQUIRED( VERSION 2.8 ) #设定最小版本号 |
在src文件夹中添加源文件fast_example.cpp以及文件夹内的CMakeLists.txt
CMakeLists.txt中添加如下:
1 | # 增加opencv的依赖 |
fast_example.cpp中添加
1 | #include <vector> |
对于前面这几块是计算机视觉的基础部分,在图像拼接,图像识别,三维重建中都是基础,后期会对该部分进行进一步的扩充及完善。