ORB-SLAM2 ---特征特提取梳理(ORBextractor.cpp)

一、主函数ORBextractor::operator()

	被调用的函数都会在后面详细讲到,这个部分是梳理主线,让读者了解每个函数在哪里被使用到,有什么作用,以便更好的有体系的学习,
主函数直接或间接的调用了除构造函数外的所有函数,构造函数会在主线程(Tracking)中被初始化。
	其中FAST()函数和GaussianBlur()是OpenCV的内置函数。

1. 判断传进来的图像是否为空,不为空则将其转化为灰度图像

2. 调用函数ORBextractor::ComputePyramid()

	该函数的作用是构建函数金字塔,并扩充函数边界

3. 调用函数ComputeKeyPointsOctTree()

该函数是用四叉树的方法来计算特征点
	 1. 将图像金字塔的某一个图层分为30*30的网格
	 	a. 用图像的长和高除网格的边长得到网格的行数和列数
	 	b. 最后一行不足30时,全部分给最后一行(不是恰好够分的话,牺牲最后一行)
	 2. 调用FAST角点提取函数,在每个网格内提取角点并放入存放角点的容器内
	 	a. 如果该容器为空(没有提取到角点),则减小阈值继续提取
	 	b. 如果容器不为空,则遍历所有FAST角点,将其坐标转换到『坐标边界』下的坐标
	 3. 调用 DistributeOctTree()函数用来分配特征点
	 		这个函数调用了DivideNode()函数
	 5. 将所有的特征点坐标恢复到『边缘扩充图像』坐标系下的坐标
	 6. 调用computeOrientation()计算每个特征点的方向信息
	 		    这个函数调用了IC_Angle()函数,IC_Angle()函数是计算一个特征点的方向信息的函数,此函数用循环的方法调用IC_Angle(),
	 		来求所有特征点的方向信息
	 		

4.统计金字塔所有层中特征点的总数,若无则释放描述子

5.遍历所有金字塔图层,先对图层进行高斯模糊,然后计算描述子

	1. 调用GaussianBlur()函数进行高斯模糊
	2. 调用computeDescriptors()函数来计算描述子
			     这个函数调用了computeDescriptor()函数,computeDescriptor()函数是计算一个特征点的描述子函数,
			此函数用循环的方法调用computeDescriptor(),来求所有特征点的描述子

6.将所有处理好的特征点放入容器内,自此特征提取结束

二、总结

特征提取的步骤及其顺序

图像金字塔分层
计算每层金字塔的特征点数量
每个图层分成30*30的网格
在每个网格里面提取特征点
用四叉树的方法分配特征点
每个节点中取应答最大的那个特征点
计算所有特征点的方向信息和描述子
将所有处理好的特征点放入容器中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值