main_featureExtraction.cpp→aliceVision_featureExtraction
- 【341-454】设置输入参数,并对输入进行configure
- 【459】读取上一步的输出(views和内参),保存在sfmData里面。
- 第一步就是上面的loadjson
- ValidIds判断sfmData的内参或者pose是否与View有对应
- std::inserter:https://blog.csdn.net/phd17621680432/article/details/122357760
- transformhttps://blog.csdn.net/zhang___bo/article/details/119389457
- 利用transform和inserter把内参(pose)存放到一个set里面,然后获取每个view对应的内参ID(pose),判断两者是否相同。
- 如果不同,就用set_difference找出不同https://baike.baidu.com/item/set_difference/6929243?fr=aladdin
- sfmData.setAbsolutePath(filename)
- 把absolutePath转成filename,并且将属于原来absolutePath下的feature,match文件路径,利用https://en.cppreference.com/w/cpp/filesystem/relative这里面的relative(这里是std实现,实际用boost,差不多)函数,创建如何从新设置的absolutePath到原来feature,match文件的路径
- 【465-502】设置feature的类型,maskfolder、输出、range、提取的程度等参数
- 【508-515】开始特征提取FeatureExtractor::process()
- 【160】setImageDescribers将之前feature类型、提取程度等参数输入
- 【170-227】用来确定内存用量和最大并行线程数量
- 【229-239】选用cou或者gpu来进行计算
- omp_set_nested(1):https://blog.csdn.net/scudz/article/details/43120991
- computeViewJob
- 【245-268】利用OpenImageIO库来读取图像和mask图像
- 【281-292】开始feature提取工作imageDescriber->describe
- 这里以dsp-sift为例https://www.jianshu.com/p/94196a92cc18
- imageDescriber的初始化早在【495】feature::createImageDescriber(imageDescriberType)根据输入创建对应的特征类型
- //TO-DO:dsp-sift代码部分之后再看
- 【294-321】根据mask文件,如果在feature的位置上的mask值为0,就把这个feature忽略,不记录。
- 【323-324】保存feature和describer。
- typename:https://blog.csdn.net/cheng7068/article/details/84375883
- describer,首先保存其size,之后保存每个describer。
- region之前是一个通用类,通过虚函数,连接到不同的describer函数,然后通过reset,赋予其不同的region类型,比如在dspsift里面就是FeatDescRegions<unsigned int, 128, ERegionType::Scalar>