前言
主要讲的是代码是如何运行的,并且对于原理部分,补充《SLAM14讲》之外的内容(默认大家读过此书)和一些C++内容。作者AliceVison下载的日期是2022年7月29日,因为作者会把代码函数打在前面,因此下载日期可能是一个关键。
此外,作者使用vscode阅读代码,通过右键可以找到函数、结构、类的具体实现,在后文中以嵌套的方式来体现,因此不表明具体文件名称。
最后,作者只会讲3D重建的关键步骤,不会把每个main函数都讲,具体可以看我之后的文章。
代码部分
meshroom应该只是用python写了一个接口,实际上的调用还是AliceVision里面的代码
虚函数的讲解:https://blog.csdn.net/daaikuaichuan/article/details/88364336重点:当使用类的指针调用成员函数时,普通函数由指针类型决定,而虚函数由指针指向的实际类型决定;执行子类构造函数之前一定会执行父类的构造函数同理,执行子类的析构函数后,一定会执行父类的析构函数这也是为什么我们一直建议类的析构函数写成虚函数的原因。纯虚函数:https://www.cnblogs.com/blackandwhite/p/12496201.html
main_cameraInit.cpp→aliceVision_cameraInit
- [138-245]使用boost::program_options对输入参数进行配置https://blog.csdn.net/qq_45034517/article/details/115601546
- try catch判断输入参数是否完备https://www.cnblogs.com/MrYuan/p/4800257.html
- [245-337]对每一个输入的参数进行处理
- [332]从.db文件中存储所有相机的型号,添加到sensorDatabase里面
- boost::split切割文字https://blog.csdn.net/zgaoq/article/details/84956273
- [332]从.db文件中存储所有相机的型号,添加到sensorDatabase里面
- [338]判断允许的相机类别
- 【356-385】从json文件里面获得相机参数、图片信息。这个json文件应该是之前生成,这里先不追究他是怎么生成的。
- 【359】loadjson函数,相关信息保存在sfmData这个变量里面
- 用boost::property_tree读取json文件,读取的是每个元组里面的成员,通过get_child.second函数就能得到元组每个成员的值(中括号里面的每个用逗号分开的值)
- 【547】loadIntrinsic函数读取相机内参,
- 【554-610】读取每个图片的信息
- 【566】loadView函数,读取图片ID,路径,对应哪个内参,metadata信息
- 【571-610】建立每个图片与内参之间的联系
- 【359】loadjson函数,相关信息保存在sfmData这个变量里面
- 【393-688】判断之前是否已经记录过内参,不然就自己建立
- 【407-430】检测rig structure(这是什么?似乎是mesh里面的vertexhttps://steamcommunity.com/app/1840/discussions/0/490121928358592194/,但是sub-pose又是什么)
- 【430-442】根据文件名字赋予每个view一个frameID,IMG_0137.JPG图片的frameIDboost::trimsplit就是137,prefix就是IMG_
- 【443-453】如果有pose的话(父文件以ps_或者hdr_开头),以父文件夹名hash值为索引,将viewID保存在一个map里面
- 【690-721】对rig文件进行操作(不是很明白rig文件这里先跳过)
- 【723-748】对pose文件处理,处理长曝光情况,用中间时刻位姿来代表图片的位姿
- 【748-817】对之前没有内参情况进行报错或者warining