视觉里程计
本篇文章记录了少许阅读《视觉slam14讲》的阅读整理,不是特别全面,只是为了本次项目中特定任务搜查资料,时间比较紧,文章并没有全面涵盖所有知识点。日后若时间有空闲,将回来补充整理。
相机位姿估计
特征点法
首先,视觉里程计的核心问题是根据图像估计相机运动。利用特征点能够有效利用图像矩阵为我们提供的关于相机运动的信息。特征点一般具有可重复可区别高效率和本地性的特点。
特征点组成
关键点key-point 和描述子descriptor
关键点是指特征点的位置,描述子是按照相似的关键点一般具有相似的描述子设计的,如果2个特征点的描述子在向量空间上的距离相近,那么我们称他们是同样的特征点。
ORB特征
分为FAST关键点和BRIEF描述子
| 名称 | FAST关键点 | BRIEF描述子 |
|---|---|---|
| 原理 | 比较像素点之间的亮度差异 | 二进制高维度向量 |
| 优缺点 | 速度快、重复性不强、分布不均匀 不具有尺度不变性以及方向性 |
速度快,有利于存储、适用于实时匹配 不具有旋转不变性 |
| 解决办法 | 尺度:在不同层的图像金字塔匹配 方向性:计算图像灰度质心 |
旋转:关键点方向被计算出来的情况下可以计算旋转之后的Steer BRIEF |
特征匹配
暴力匹配;浮点型关键点->匹配欧氏距离;二进制关键点->匹配汉明距离;特征点个数极多时,考虑快速近似最近邻FLANN算法。
特征点匹配核心代码(OpenCV)
//首先初始化部分、关键点、描述子、计算描述子指针、匹配matcher指针
//-- 初始化
std::vector<KeyPoint> keypoints_1, keypoints_2;
Mat descriptors_1, descriptors_2;
Ptr<FeatureDetector> detector = ORB::create();
Ptr<DescriptorExtractor> descriptor = ORB::create();
// Ptr<FeatureDetector> detector = FeatureDetector::create(detector_name);
// Ptr<DescriptorExtractor> descriptor = DescriptorExtractor::create(descriptor_name);
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create ( "BruteForce-Hamming" );
//之后
//-- 第一步:检测 Oriented FAST 角点位置
detector->detect ( img_1,keypoints_1 );
detector->detect ( img_2,keypoints_2 );
//在之后,Mat存储描述子
//-- 第二步:根据角点位置计算 BRIEF 描述子
descriptor->compute ( img_1, keypoints_1, descriptors_1 );
descriptor->compute ( img_2, keypoints_2, descriptors_2 );
可视化可以使用函数
drawKeypoints( img_1, keypoints_1, outimg1, Scalar::all(-1), DrawMatchesFlags::DEFAULT );
//最后是特征匹配
//-- 第三步:对两幅图像中的BRIEF描述子进行匹配,使用 Hamming 距离
vector<DMatch> matches;
//BFMatcher matcher ( NORM_HAMMING );
matcher->match ( descriptors_1, descriptors_2, matches );
关于DMatch这个类,可以理解为匹配关键点描述子的类,有以下成员,存着匹配对的各种信息,用于筛选匹配对
DMatch.distance - 描述符之间的距离。越小越好。
• DMatch.trainIdx - 目标图像中描述符的索引。
• DMatch.queryIdx - 查询图像中描述符的索引。
• DMatch.imgIdx - 目标图像的索引
之后对匹配点对进行筛选
//-- 第四步:匹配点对筛选
double min_dist=10000, max_dist=0;
//找出所有匹配之间的最小距离和最大距离, 即是最相似的和最不相似的两组点之间的距离
for ( int i = 0; i < descriptors_1.rows; i++ )
{
double dist = match[i].distance;
if ( dist

本文探讨了视觉SLAM中的相机位姿估计方法,包括特征点法、ORB特征、特征匹配流程及代码实现,介绍了对极几何、ICP、PnP等不同场景下的相机运动估计策略。
最低0.47元/天 解锁文章
1011

被折叠的 条评论
为什么被折叠?



