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;
}
为什么会保存最差的呢?
博客围绕C++编程展开,介绍了调用顺序。涉及上一帧与本帧点的匹配,从其他帧取出候选点与当前帧进行核线搜索并更新inverse depth,以单独点处理,无帧相关内容,还提及使用核线搜索找对应点及保存最差情况的疑问。
2950

被折叠的 条评论
为什么被折叠?



