文章目录
前言
系统环境:ubuntu20.04
鸽了好久的视觉SLAM十四讲的第7讲好歹是发出来了,这一节真的好长,而且说实话好难,第一遍看完还是有些晕,估计得后面自己真的用上了,再好好体会感悟一遍。
一、实践部分
其他使用imshow展示的图片截图太麻烦了,就不展示了。
1.orb_cv项目
这里值得注意的是描述子之间的距离是有上下限的,尤其是会设置一个下限经验值30。
2.orb_self项目
3.pose_estimation_2d2d项目
4.triangulation项目
5.pose_estimation_3d2d项目
6.pose_estimation_3d3d项目
二、第7讲的普通习题
1.其他特征点
常见的特征点还有FAST特征点、SIFT特征点。SIFT和SURF的原理如下:
SIFT(尺度不变特征变换):Sift是一种基于尺度空间的,对图像缩放、旋转、甚至仿射变换保持不变性的图像局部特征描述算子。分为特征点提取、特征点描述和特征点匹配三个步骤。
SURF(加速稳健特征):Surf是对David Lowe在1999年提出的Sift算法的改进,提升了算法的执行效率,为算法在实时计算机视觉系统中应用提供了可能。SURF在两个地方进行了改进,一个是积分图在Hessian(黑塞矩阵)上的使用,一个是降维的特征描述子的使用。
三种之间的比较:
计算速度:ORB>>SURF>>SIFT(各差一个量级)
旋转鲁棒性:SURF>ORB~SIFT(表示差不多)
模糊鲁棒性:SURF>ORB~SIFT
尺度变换鲁棒性:SURF>SIFT>ORB(ORB并不具备尺度变换性)
参考资料:
1、图像特征点
2、3种特征点的比较
3、Surf算法特征点检测与匹配
2.统计提取1000个特征点的耗时
我这边看了opencv的一些介绍,使用了BRISK,一开始还担心不知道特征点够不够1000个,因此把数量输出来看了一下。
Ptr<FeatureDetector> detector = BRISK::create();
Ptr<DescriptorExtractor> descriptor = BRISK::create();
参考资料:相关函数的介绍
4.其他加速匹配的方式
FLANN算法主要内嵌了随机k-d树算法、优先搜索k-means树算法、层次聚类树这三种算法,并且对这些分类匹配算法都进行了优化,因此能够加速匹配。此外除了这个方法还可以通过GPU进行加速。
参考资料:FLANN算法说明
5.其他PnP方法
打开了这个函数的详细解释,发现其默认的参数是SOLVEPNP_ITERATIVE也就是使用列文伯格马夸尔特法迭代求解。这里让我们换其他方法进行求解。
可以发现除了SOLVEPNP_ITERATIVE这个方法可以选之外还有SOLVEPNP_EPNP、SOLVEPNP_P3P 、SOLVEPNP_DLS、SOLVEPNP_UPNP、SOLVEPNP_AP3P、SOLVEPNP_IPPE、SOLVEPNP_IPPE_SQUARE、SOLVEPNP_SQPNP一共八个。
对比了一下上面,发现比原本默认的那个迭代方法还要慢。。。
EPNP:是将所有的3D点都转化为用四个非共面的点进行表示,后面对这四个点进行优化,因此比较高效。
参考资料:Epnp
6.在PnP中考虑第一个相机的观测
待补充,一遇到改代码的题,头就疼,看了半天还是没有多大理解。
7.在ICP中考虑空间点的优化
待补充,一遇到改代码的题,头就疼,看了半天还是没有多大理解。
总结
本文对7.2,7.4,7.6,7.8,7.10等小节的实践部分进行验证,同时对第7讲部分普通习题作了总结,欠了2道实在抱歉,后面会修改的。