createKeyframeAndOptimize(const std::shared_ptr<Frame>& frame)
调用顺序如下
lmcw->trackCandidates(frame); lmcw->insertNewKeyframe(frame); lmcw->selectWindow(this->ceresOptimizer); this->refineCandidates(); lmcw->activatePoints(this->ceresOptimizer); activeKeyframes = this->lmcw->activeWindow(); ceresOptimizer->solve(activeKeyframes); lmcw->removeOutliers(); newTrackingReference->setNewReference(activeKeyframes); trackingReferenceUpdated = true; lmcw->dropKeyframes(); this->createCandidates(frame);
trackCandidates: 上一帧有一些点,然后本帧来了之后,与上一帧进行匹配。
其他帧上的所有帧,取出候选点,然后与当前帧核线搜索,更新其inverse depth.
因为是单独的点进行处理的,所以与帧相关的东西都没有;
PointObserver这个是一个高度并行的类。每一个点都是独立处理的
使用核线搜索来找对应点
if (this->status_ == PointStatus::UNINITIALIZED ||
newQuality < this->matchQuality_)
{
this->matchQuality_ = newQuality;
}
为什么会保存最差的呢?