BA优化
parent
23394ee656
commit
c584237503
|
@ -303,9 +303,17 @@ bool ORBmatcher::CheckDistEpipolarLine2(const cv::KeyPoint &kp1, const cv::KeyPo
|
||||||
return dsqr<3.84*pKF2->mvLevelSigma2[kp2.octave]*unc;
|
return dsqr<3.84*pKF2->mvLevelSigma2[kp2.octave]*unc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 通过词袋,对关键帧的特征点进行跟踪
|
||||||
|
*
|
||||||
|
* @param[in] pKF 关键帧
|
||||||
|
* @param[in] F 当前普通帧
|
||||||
|
* @param[in] vpMapPointMatches F中地图点对应的匹配,NULL表示未匹配
|
||||||
|
* @return int 成功匹配的数量
|
||||||
|
*/
|
||||||
int ORBmatcher::SearchByBoW(KeyFrame* pKF,Frame &F, vector<MapPoint*> &vpMapPointMatches)
|
int ORBmatcher::SearchByBoW(KeyFrame* pKF,Frame &F, vector<MapPoint*> &vpMapPointMatches)
|
||||||
{
|
{
|
||||||
// 获取该关键帧的mappoint
|
// 获取该关键帧的地图点
|
||||||
const vector<MapPoint*> vpMapPointsKF = pKF->GetMapPointMatches();
|
const vector<MapPoint*> vpMapPointsKF = pKF->GetMapPointMatches();
|
||||||
|
|
||||||
// 和普通帧F特征点的索引一致
|
// 和普通帧F特征点的索引一致
|
||||||
|
@ -348,7 +356,7 @@ int ORBmatcher::SearchByBoW(KeyFrame* pKF,Frame &F, vector<MapPoint*> &vpMapPoin
|
||||||
// 关键帧该节点中特征点的索引
|
// 关键帧该节点中特征点的索引
|
||||||
const unsigned int realIdxKF = vIndicesKF[iKF];
|
const unsigned int realIdxKF = vIndicesKF[iKF];
|
||||||
|
|
||||||
// 取出KF中该特征对应的MapPoint
|
// 取出KF中该特征对应的地图点
|
||||||
MapPoint* pMP = vpMapPointsKF[realIdxKF];
|
MapPoint* pMP = vpMapPointsKF[realIdxKF];
|
||||||
|
|
||||||
if(!pMP)
|
if(!pMP)
|
||||||
|
@ -356,8 +364,8 @@ int ORBmatcher::SearchByBoW(KeyFrame* pKF,Frame &F, vector<MapPoint*> &vpMapPoin
|
||||||
|
|
||||||
if(pMP->isBad())
|
if(pMP->isBad())
|
||||||
continue;
|
continue;
|
||||||
|
// 取出关键帧KF中该特征对应的描述子
|
||||||
const cv::Mat &dKF= pKF->mDescriptors.row(realIdxKF); // 取出KF中该特征对应的描述子
|
const cv::Mat &dKF= pKF->mDescriptors.row(realIdxKF);
|
||||||
|
|
||||||
int bestDist1=256; // 最好的距离(最小距离)
|
int bestDist1=256; // 最好的距离(最小距离)
|
||||||
int bestIdxF =-1 ;
|
int bestIdxF =-1 ;
|
||||||
|
@ -370,13 +378,14 @@ int ORBmatcher::SearchByBoW(KeyFrame* pKF,Frame &F, vector<MapPoint*> &vpMapPoin
|
||||||
for(size_t iF=0; iF<vIndicesF.size(); iF++)
|
for(size_t iF=0; iF<vIndicesF.size(); iF++)
|
||||||
{
|
{
|
||||||
if(F.Nleft == -1){
|
if(F.Nleft == -1){
|
||||||
|
// 这里的realIdxF是指普通帧该节点中特征点的索引
|
||||||
const unsigned int realIdxF = vIndicesF[iF];
|
const unsigned int realIdxF = vIndicesF[iF];
|
||||||
|
|
||||||
// 如果地图点存在,说明这个点已经被匹配过了,不再匹配,加快速度
|
// 如果地图点存在,说明这个点已经被匹配过了,不再匹配,加快速度
|
||||||
if(vpMapPointMatches[realIdxF])
|
if(vpMapPointMatches[realIdxF])
|
||||||
continue;
|
continue;
|
||||||
|
// 取出普通帧F中该特征对应的描述子
|
||||||
const cv::Mat &dF = F.mDescriptors.row(realIdxF); // 取出F中该特征对应的描述子
|
const cv::Mat &dF = F.mDescriptors.row(realIdxF);
|
||||||
// 计算描述子的距离
|
// 计算描述子的距离
|
||||||
const int dist = DescriptorDistance(dKF,dF);
|
const int dist = DescriptorDistance(dKF,dF);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue