部分内容来自:https://blog.csdn.net/huang826144283/article/details/78880675
DSO可执行文件参数传入main_dso_pangolin.cpp,流程如下
参数入口:int main( intargc, char** argv )
通过参数文件,获取图像、内参和光度相机标定模型中的非线性响应函数用到的参数gammaCalib 及涉及光晕的参数:vignette :new ImageFolderReader(source,calib, gammaCalib, vignette) (跑kitti的灰色图像就没有后两项了) |
ps: mode=1代表不进行光度标定; preset=0 代表原速度 main_dso_pangolin.cpp有一个变量:float playbackSpeed=0; // 0 for linearize (play as fast as possible, while sequentializing顺序化 tracking & mapping). otherwise, factor on timestamps.
|
根据读入的内参计算每层图像金字塔对应的内参(共6层):setGlobalCalibration |
ps : 我是输入1391*341 输出640 320 pyramid0到3
|
模式检验:共有3种模式,分别对应PHOTOMETRIC MODE WITH CALIBRATION、PHOTOMETRIC MODE WITHOUT CALIBRATION、PHOTOMETRIC MODE WITH PERFECT IMAGES,用户根据自身提供的数据的类型进行模式设定 |
|
倒叙检验:对图像帧反序存储时的操作?(被我删去了) |
还有build system FullSystem* fullSystem = new FullSystem();
|
Pangolin显示 |
ps: 这里代码的并行性我有点搞不清楚.感觉明明应该一直困在下面这个循环里了(pangolin显示): if(!disableAllDisplay) 但是getImage包括下面几个步骤都是在std::thread runthread([&]() {内容}) 而且看起来下面那个应该是主循环 应该是pangolin先走了一个循环吧 我要格外关注thread
|
读图reader->getImage |
|
视频播放速度控制,判断是否跳帧处理 |
|
帧处理入口:addActiveFrame(img, i);< |