openMVG源码学习(1):main_SfMInit_ImageListing

前言

        OpenMVG(Open Multiple View Geometry)是一个开源的项目,主要用于处理计算机视觉和摄影测量学中的多视图几何问题,尤其在三维重建领域有着广泛的应用。它通过一系列工具和算法,能够从一组无序的图像中恢复场景的稀疏三维结构,包括特征的提取与计算、特征点的匹配以及运动恢复结构的解算等步骤。OpenMVG支持多种相机模型,能够估计相机的内参和外参,并提供多种特征提取与匹配算法,如SIFT和SURF等,以满足不同的应用场景需求。

        该库使用C++编写,具有简洁的代码设计和良好的可读性,方便开发者进行二次开发和扩展。同时,它采用严格的测试驱动开发方式,确保了模块的稳定性和可靠性。此外,OpenMVG可以与其他开源项目(如OpenMVS、CMVS-PMVS)无缝结合,实现从稀疏点云到稠密点云、表面重建以及纹理映射的完整三维重建管线,从而满足从简单到复杂的各种三维重建需求。总之,OpenMVG以其强大的功能、灵活的扩展性和广泛的适用性,成为计算机视觉和三维重建领域中不可或缺的开源工具之一。

main_SfMInit_ImageListing

        这个程序主要用于从输入的图像集合中提取必要的信息(如包括图像目录、传感器宽度数据库文件、输出目录、相机内参、是否使用GPS姿态先验等),并生成一个用于后续三维重建的SfM(Structure from Motion)数据文件。

        从主函数的入口进入,通过命令行参数了解程序的输入。

命令行参数

  • 程序支持的命令行参数及其对应的变量:

  • -i imageDirectory:输入图像目录

  • -d sensorWidthDatabase:传感器宽度数据库文件路径

  • -o  outputDirectory:输出目录

  • -f focal:焦距(以像素为单位)

  • -k intrinsics:相机内参矩阵

  • -c camera_model:相机模型

  • -g group_camera_model:是否对相机模型进行分组

  • -P use_pose_prior:是否使用GPS姿态先验

  • -W prior_weights:姿态先验权重

  • -m  gps_to_xyz_method:GPS坐标转换方法(0为ECEF,1为UTM)。

        如果用户没有提供任何参数,程序会抛出一个异常信息,接着程序会输出详细的使用说明:所有支持的命令行参数及其含义。

        将用户输入的命令行参数值输出到日志中,方便确认程序的配置是否正确

        接下来是进行一些必要的初始化操作,初始化图像属性,检查输入输出目录、解析传感器宽度数据库文件、内参矩阵等输入的参数都是有效的,避免出现错误。

生成图像列表文件sfm_data.json

        接下来的代码是程序的核心部分,负责处理输入图像目录中的所有图像,提取它们的图像属性(如尺寸、焦距等),并根据这些信息构建一个用于后续三维重建的SfM(Structure from Motion)数据结构sfm_data。

        获取指定输入图像目录 sImageDir 中的所有文件名,并将它们存储在 vec_image 中,对文件名列表进行排序

        初始化SfM数据结构,创建一个空的SfM数据结构 sfm_data,输入图像目录,获取SfM数据结构中的视图(views)和内参(intrinsics)的引用,以便后续添加图像视图和相机内参

        初始化进度条和错误报告流,显示处理图像进度,记录处理过程中遇到的错误信息

        遍历图像文件列表

        读取图像元数据,初始化图像属性变量(宽度、高度、焦距等),记录完整的图像文件路径 sImageFilename,并提取文件名部分 sImFilenamePart

        检查图像文件的格式是否受支持

        检查是否为掩膜图像

        读取图像的头信息(如宽度、高度等)

        处理焦距信息:如果提供了内参矩阵字符串(-k),验证其格式并提取焦距、主点坐标。如果提供了焦距值(-f),直接使用该值。如果焦距未手动提供或无效,尝试从图像的EXIF元数据中读取焦距,并结合传感器宽度数据库计算焦距

        根据指定的相机模型类型(e_User_camera_model),创建相应的相机内参对象

        根据图像的GPS信息和用户选项,决定是构建带有姿态先验的视图(ViewPriors)还是普通视图(View)。处理相机内参,确保每个视图都有对应的内参信息。将构建好的视图对象添加到SfM数据结构中,为后续的三维重建流程做准备。

        处理和保存处理过程中生成的sfm_data.json数据,并输出处理结果的报告。将处理过程中遇到的警告和错误信息输出到日志中。对相机内参进行分组:如果用户启用了分组功能,对相机内参进行分组,以提高后续三维重建的效率和稳定性。保存SfM数据:将处理后的视图和内参信息保存到一个JSON文件中,供后续的三维重建工具使用。提供详细的处理报告,帮助用户了解程序的执行结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值