为什么要把特征点均匀化?
纹理丰富的区域提取到的特征点多,弱纹理区域又没什么特征点,导致位姿估算不准。特征点在空间中分布的层次越多、越均匀,特征匹配越能精确的估计出空间几何关系。
怎么实现特征点均匀化
1.给金字塔分配特征点数量,根据总的图像金字塔层数和待提取的特征点总数,计算每一层图像金字塔中需要提取的特征点数量。金字塔层数越高,分辨率越低,能提取的特征点数量越少。用 总的特征点数目/所有金字塔面积和x某层金字塔面积 就是该层金字塔需要得到的特征点数目。在ORB-SLAM2代码中有微小改动,不按照面积均摊,而是按照面积的开方均摊。
2.在该层金字塔处划分格子,ORB-SLAM2 中格子固定尺寸为30x30。
3.对每个格子提取FAST角点,如果初始的FAST 阈值没有检测到角点,就降低 FAST 阈值。这样可以在弱纹理区域也能提取到更多的角点。如果降低一次阈值后,还是提取不到角点,则不再这个格子里提取。这样可以避免提取到质量特别差的角点。
4.使用四叉树均匀的选取FAST 角点,直到达到特征点总数。
四叉树均匀选取角点
1.在一层金字塔上进行均匀选点,首先确定初始节点数目,一般为1个,此时该层所有角点都属于该初始节点。
2.节点进行一次分裂,一个节点分裂为4个节点,四个节点均匀的放在平面内,即n1,n2,n3,n4,然后根据区域的划分不同,角点分属于四个节点。
3.划分完成后,如果某个节点只拥有一个角点,则下次节点分裂时不再分裂该节点。如果某个节点拥有0个角点,则去除该节点。
4.对拥有角点数目最多的节点进行分裂。
5.重复步骤2,3,4,不断分裂节点,直到节点数与想要得到的特征点数目相同。
6.从每个节点中选出角点响应值最高的角点,作为特征点,删除其余角点。
7.得到均匀化特征点。