ORB-SLAM2非主流旋转方向特征点筛选
对于一个静态的场景,当前帧所有特征与上一帧的旋转方向应该是相同的,通过这个特性,可以对通过计算BRIEEF描述子之间距离得到的匹配的特征点进行筛选,筛出旋转方向非主流的误匹配。
首先,计算匹配得到的两个特征点的旋转角度的差值,该差值的取值范围是[0,360°],将该取值范围划分为12个等份,每个等份代表着特征点的旋转方向的取值范围,将计算得到的两张图之间的特征点方向的差值放到对应的区间内得到关于特征点旋转方向的直方图。
取出排名前三的直方图,如果次优小于了最优的十分之一,就放弃次优,只取最优
// 如果差距太大了,说明次优的非常不好,这里就索性放弃了,都置为-1
if(max2<0.1f*(float)max1)
{
ind2=-1;
ind3=-1;
}
else if(max3<0.1f*(float)max1)
{
ind3=-1;
}
对不符合主流旋转方向的特征点进行剔除,及将其指针置为空
for(int i=0; i<HISTO_LENGTH; i++)
{
// 对于数量不是前3个的点对,剔除
if(i!=ind1 && i!=ind2 && i!=ind3)
{
for(size_t j=0, jend=rotHist[i].size(); j<jend; j++)
{
CurrentFrame.mvpMapPoints[rotHist[i][j]]=static_cast<MapPoint*>(NULL);
nmatches--;
}
}
}