aliceVision_utils_split360Images

aliceVision_utils_split360Images 是 AliceVision/Meshroom 开源三维重建框架中的一个实用工具。

其核心原理是将360°全景图像(如等距圆柱投影的 equirectangular 图像)分割成多个透视投影的子图像,以便后续的传统多视角三维重建流程能够处理。
一、核心目的:适配传统三维重建流程
传统三维重建算法(如SfM、多视图立体匹配)通常设计用于处理透视投影图像,即普通相机拍摄的有限视场角照片。而360°全景图像是等距圆柱投影,覆盖了整个球面视角,直接输入会导致特征匹配、相机姿态估计等步骤出现严重偏差。因此,该工具通过“切割”全景图,生成一系列模拟不同视角的透视图像,为后续流程提供合规的输入。
二、主要工作原理与步骤

投影模型与分割策略:

工具支持 equirectangular(等距圆柱投影,最常见)和 dualfisheye(双鱼眼,如某些360相机原始格式)两种输入模式。
对于等距圆柱投影,其分割原理是在球面上定义虚拟的透视相机。通过 --equirectangularNbSplits 参数控制分割数量(如25或20),该参数决定了在经度方向上的分割份数。算法会在球面经纬度网格上均匀采样,为每个子区域计算对应的透视投影。

虚拟相机参数生成:

每个生成的子图像对应一个虚拟的透视相机。这些相机的内参(如焦距、主点)和姿态(旋转矩阵) 会被计算并保存。这确保了在后续的SfM步骤中,系统能正确地将这些子图像视为来自不同视角但具有已知内在关系的照片集合。
分割时,可以指定朝向(如 center, top, bottom),以聚焦于球面的特定区域。

图像重采样与输出:

根据计算出的每个虚拟相机的视角,从原始360°图像中重采样(重投影) 出对应的矩形透视图像。这个过程涉及球面坐标到图像像素坐标的变换和插值。
输出包括一系列子图像文件(如JPG、PNG)以及可能包含相机参数的元数据文件,这些数据可直接馈入Meshroom的 CameraInit 或其他三维重建节点。

三、技术实现的关键考量

重叠率控制:分割数量 (equirectangularNbSplits) 直接影响子图像之间的重叠区域大小。足够的重叠是后续特征匹配成功的保证。如Issue中所述,使用20或25的分割数是为了在相邻视角间产生足够的重叠,以利于特征匹配。
处理双鱼眼图像:对于 dualfisheye 模式,工具需要先将两个鱼眼镜头拍摄的半球图像拼接或映射到球面,再进行分割。有用户报告该模式可能输出全黑图像,这提示在处理某些特定格式(如垂直布局的双鱼眼DNG文件)时可能存在兼容性或方向处理问题。
与重建流程的集成:分割后的图像被用作Meshroom标准管线的输入。在成功案例中,用户将360°照片分割后,能够顺利进行到 Meshing 等步骤。然而,若场景本身缺乏纹理或视角变化不足(如沿街道的单一路径),即使分割也可能仅生成稀疏的重建结果。

四、应用场景与局限性

典型应用:处理来自消费级360相机、谷歌街景(在符合服务条款的前提下)或其他全景拍摄设备的数据,将其转换为可用于三维重建的数据集。
局限性:

并非所有全景内容都适合重建。如果拍摄路径单一、场景重复度高或缺乏视觉特征,生成的点云和网格可能非常稀疏。
工具的性能和输出质量依赖于输入图像的分辨率、分割数量的合理选择以及原始图像的曝光/对齐质量。
作为预处理步骤,它解决了投影格式问题,但重建的最终质量仍取决于AliceVision/Meshroom核心算法的能力以及场景本身的复杂度。

总结来说,aliceVision_utils_split360Images 的原理是通过球面投影变换和虚拟相机模拟,将无法直接用于多视图立体重建的全景图像,转换为一系列符合透视投影模型的子图像,从而桥接了360°成像技术与传统三维重建管道之间的鸿沟。

下载Meshroom,使用aliceVision_split360Images.exe之前需要先设置aliceVision的环境变量,之后执行如下命令:

C:\Users\ntu>H:\Meshroom-2025.1.0-Windows\Meshroom-2025.1.0\aliceVision\bin\aliceVision_split360Images.exe -i H:\insta_img -o H:\out --equirectangularNbSplits 8 
--equirectangularSplitResolution 1200 --outSfMData H:\out\outsfm.sfm [2025-12-23 13:32:42.235486] [0x00002480] [trace] Embedded OCIO configuration file: 'H:\Meshroom-2025.1.0-Windows\Meshroom-2025.1.0\aliceVision/share/aliceVision/config.ocio' found. Program called with the following parameters: * dualFisheyeCameraModel = "fisheye4" (default) * dualFisheyeOffsetPresetX = "center" (default) * dualFisheyeOffsetPresetY = "center" (default) * equirectangularNbSplits = 8 * equirectangularPreviewMode = 0 (default) * equirectangularSplitResolution = 1200 * extension = "" (default) * fov = 110 (default) * input = "H:\insta_img" * maxCoresAvailable = Unknown Type "unsigned int" (default) * maxMemoryAvailable = 18446744073709551615 (default) * nbThreads = 3 (default) * outSfMData = "H:\out\outsfm.sfm" * output = "H:\out" * splitMode = "equirectangular" (default) * verboseLevel = "info" (default) [13:32:42.244132][info] Hardware: [13:32:42.244132][info] Detected core count: 32 [13:32:42.244132][info] OpenMP will use 32 cores [13:32:42.244132][info] Detected available memory: 57736 Mo [13:32:42.244132][info] [13:32:42.244132][info] Find 2 file paths. [13:32:44.419684][info] H:\insta_img\IMG_20251223_125908_00_005.jpg successfully split [13:32:44.453189][info] H:\insta_img\IMG_20251223_125928_00_006.jpg successfully split

 

posted @ 2025-12-22 23:19  太一吾鱼水  阅读(4)  评论(0)    收藏  举报