ORBSLAM2--MaPoint类
PredictScale
运用于局部地图跟踪
函数简介
在局部地图中,需要将局部地图点投影到当前帧中,所以需要进行一个地图点与特征点的匹配,为了加速匹配,所以要根据地图点到当前帧的距离来预测对应特征点可能在哪一层金字塔被提取出来
先要计算一个因子
r
a
t
i
o
=
m
f
M
a
x
D
i
s
t
a
n
c
e
/
c
u
r
r
e
n
t
D
i
s
t
ratio = mfMaxDistance/currentDist
ratio=mfMaxDistance/currentDist
n
S
c
a
l
e
=
c
e
i
l
(
l
o
g
(
r
a
t
i
o
)
/
p
F
−
>
m
f
L
o
g
S
c
a
l
e
F
a
c
t
o
r
)
nScale = ceil(log(ratio)/pF->mfLogScaleFactor)
nScale=ceil(log(ratio)/pF−>mfLogScaleFactor)
nScale就是金字塔层,ceil向上取整,pF->mfLogScaleFactor是
l
o
g
10
1.2
log_{10}1.2
log101.2
函数原型
//通过地图点到当前帧的距离,预测该对应的特征点应该是在哪一层金字塔,这样可以加速特征匹配
int MapPoint::PredictScale(const float ¤tDist, Frame* pF)
{
float ratio;
{
unique_lock<mutex> lock(mMutexPos);
ratio = mfMaxDistance/currentDist;
}
//向上取整
int nScale = ceil(log(ratio)/pF->mfLogScaleFactor);
if(nScale<0)
nScale = 0;
else if(nScale>=pF->mnScaleLevels)
nScale = pF->mnScaleLevels-1;
return nScale;
}