侧边栏壁纸
博主头像
LittleAO的学习小站 博主等级

在知识的沙漠寻找绿洲

  • 累计撰写 125 篇文章
  • 累计创建 27 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Meshroom各模块及其作用

LittleAO
2024-07-18 / 0 评论 / 0 点赞 / 142 阅读 / 0 字
温馨提示:
本文最后更新于2024-07-18,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

CameraInit

CameraInit加载图像元数据、传感器信息并生成viewpoints.sfm和cameraInit.sfm。可以混合多个相机和焦距。
CameraInit将基于图像元数据创建内部参数组。
最好有多个相机和相同焦距的图像,因为这会对内部相机参数添加约束。但您可以组合多组图像,这不会降低最终模型的质量。

输入项 描述
视角输入 每加载的图像一个元素 - ID - 姿势ID - 图像路径 - 内部参数:内部相机参数(内部ID) - Rig(-1 - 200) - Rig子姿势:Rig子姿势参数(-1 - 200) - 图像元数据:(元数据元素列表)
内部相机参数 每加载的图像一个元素 - ID - 初始焦距:焦距的初始猜测 - 焦距:已知/校准焦距 - 相机类型:针孔、径向1、径向3、布朗、鱼眼4 - #制造商:相机制造商(不包括在此版本中,已注释掉) - #型号:相机型号 - #传感器宽度:相机传感器宽度 - 宽度:图像宽度(0-10000) - 高度:图像高度(0-10000) - 序列号:设备序列号(相机和镜头组合) - 主点:X(0-10000)Y(0-10000)- 畸变参数:畸变参数 - 锁定(True/False):如果相机已校准,则内部相机参数(内部参数)可以被锁定。这应该提高重建的鲁棒性和加速速度。
传感器数据库 相机传感器宽度数据库路径
默认视场 视场的经验值,以度为单位45°(0°-180°)
详细程度 详细程度(致命、错误、警告、信息、调试、跟踪)
输出SfMData文件 .../cameraInit.sfm

FeatureExtraction

这一步从图像中提取特征,以及这些特征的描述符。它会根据您提取的特征类型改变文件扩展名。

名称 描述
输入 SfMData文件。
描述器类型 用于描述图像的描述器类型。'sift'、'siftfloat'、'siftupright'、'akaze'、'akazeliop'、'akazemldb'、'cctag3'、'cctag4'、'siftocv'、'akazeocv'
描述器预设 控制ImageDescriber配置(低、中、正常、高、超级)。配置"ultra"可能需要很长时间!
强制CPU提取 仅使用CPU进行特征提取。
最大线程数 指定同时运行的最大线程数(自动模式为0)。 (0-24) 0
详细程度 详细程度(致命、错误、警告、信息、调试、跟踪)。
输出文件夹 特征和描述符文件的输出路径(.feat、.desc)。

这一步的目标是提取在一定程度上对于图像获取过程中相机视角变化不变的像素特征组。因此,场景中的一个特征应在所有图像中具有类似的特征描述。

最著名的特征检测方法是SIFT(尺度不变特征变换)算法。SIFT的初始目标是从第一幅图像中提取可以与第二幅图像的特征进行比较的区分性补丁,无论旋转、平移和缩放如何。由于相关细节只存在于特定尺度,提取的补丁位于感兴趣的稳定点中心。关键思想是,在一定程度上,可以利用SIFT的不变性来处理在图像获取过程中视角变化时发生的图像变换。

从不同尺度的一个图像表示中,这在技术上是通过计算一个缩小图像金字塔来完成的。SIFT计算Laplacian表示的尺度空间极值,这是图像的一种特定基于能量的表示,使用所谓的高斯差分。这些极值对应于兴趣点。然后为每个这些极值采样一个正方形图像补丁,其原点是极值,x方向是原点的主导梯度。对于每个关键点,关联了这些补丁的描述。

描述通常以128位存储,由关键点周围区域的梯度统计组成。区域大小由关键点尺度确定,方向由主导轴确定。

由于提取的特征数量可能因纹理复杂性的变化(从一幅图像到另一幅图像或图像不同部分)而变化很大,因此使用后处理步骤来控制提取的特征数量在合理范围内(例如每幅图像在一千到一万之间)。我们使用网格过滤来确保图像中的良好分布。

ImageMatching

这是一个预处理步骤,用于确定哪些图像可以进行匹配。

参数 解释
Image SfMData文件
Features Folders 包含提取的特征和描述符的文件夹
Tree 词汇树文件的输入名称 ALICEVISION_VOCTREE
Weights 权重文件的输入名称,如果未提供,权重将在使用提供的数据集构建的数据库上计算
Minimal Number of Images 使用词汇树所需的最小图像数量。如果我们的特征少于此阈值,我们将计算所有匹配组合
Max Descriptors 每幅图像加载的描述符数量上限。零表示无限制
Nb Matches 每幅图像检索的匹配数(如果为0,将检索所有匹配)50(0-1000)
Verbose Level 详细程度(致命、错误、警告、信息、调试、跟踪)
Output List File 包含选定图像对列表的输出文件路径

这部分的目标是找到看起来指向场景相同区域的图像。为此,我们使用图像检索技术,找到共享一些内容的图像,而无需详细解决所有特征匹配的成本。我们的抱负是将图像简化为一个紧凑的图像描述符,从而能够有效地计算所有图像描述符之间的距离。

生成此图像描述符的最常见方法之一是词汇树方法。通过将所有提取的特征描述符传递给它,它通过将它们的描述符与该树的每个节点上的描述符进行比较来进行分类。每个特征描述符最终进入一个叶子节点,可以通过一个简单的索引来存储:该叶子在树中的索引。然后,图像描述符由使用的叶子索引集合表示。

现在可以通过比较这些图像描述符来查看不同图像是否共享相同内容。

FeatureMatching

使用特征描述符找到图像之间的对应关系。

参数 解释
Input SfMData文件
Features Folder
Features Folders 包含提取的特征和描述符的文件夹
Image Pairs List 匹配图像对列表的文件路径
Describer Types 用于描述图像的描述符类型 sift'/ 'sift_float'/ 'sift_upright'/ 'akaze'/ 'akaze_liop'/ 'akaze_mldb'/ 'cctag3'/ 'cctag4'/ 'sift_ocv'/ 'akaze_ocv
Photometric Matching Method 对于基于标量的区域描述符 ' * BRUTE_FORCE_L2: L2 BruteForce 匹配' ' * ANN_L2: L2 近似最近邻匹配 ' * CASCADE_HASHING_L2: L2 级联哈希匹配 ' * FAST_CASCADE_HASHING_L2: 具有预先计算的哈希区域的 L2 级联哈希(比 CASCADE_HASHING_L2 更快,但使用更多内存) '对于基于二进制的描述符 ' * BRUTE_FORCE_HAMMING: BruteForce Hamming 匹配'
Geometric Estimator 几何估计器:(acransac: A-Contrario Ransac // loransac: LO-Ransac(仅适用于 fundamental_matrix 模型)
Geometric Filter Type 用于过滤特征匹配的几何验证方法:fundamental_matrix // essential_matrix // homography_matrix /// homography_growing // no_filtering'
Distance Ratio 丢弃无意义匹配的距离比例 0.8(0.0 - 1)
Max Iteration RANSAC步骤中允许的最大迭代次数 2048(1 - 20000)
Max Matches 保留的最大匹配数(0 - 10000)
Save Putative Matches 可能匹配(True/False)
Guided Matching 使用找到的模型改进成对对应关系(True/False)
Export Debug Files 调试文件(svg/ dot)(True/False)
Verbose Level 详细程度(致命、错误、警告、信息、调试、跟踪)
Output Folder 存储计算匹配结果的文件夹路径

这一步的目标是在候选图像对之间匹配所有特征。

首先,我们在两个输入图像的描述符集之间执行光度匹配。对于图像A中的每个特征,我们获得图像B中候选特征的列表。由于描述符空间不是线性且明确定义的空间,我们不能依赖绝对距离值来确定匹配是否有效(我们只能有一个绝对较高的距离上限)。为了去除不良候选项,我们假设在另一个图像中只有一个有效匹配。因此,对于第一幅图像上的每个特征描述符,我们寻找两个最接近的描述符,并使用它们之间的相对阈值。这种假设会消除重复结构上的特征,但已被证明是一个稳健的标准[Lowe2004]。这仅基于光度标准提供了一个特征匹配候选列表。为每个特征在第二幅图像中找到两个最接近的描述符是计算密集型的,采用暴力方法,但存在许多优化算法。最常见的是近似最近邻,但也有替代方案,如级联哈希。

然后,我们利用图像中的特征位置,通过使用在异常值检测框架中使用的极线几何进行几何过滤,该框架称为 RANSAC(RANdom SAmple Consensus)。我们随机选择一小组特征对应关系,并计算基本(或本质)矩阵,然后检查验证此模型的特征数量,并通过 RANSAC 框架进行迭代。

StructureFromMotion

StructureFromMotion(Incremental SfM)将从输入图像中重建3D点。对于全局SfM,请使用GlobalSfM节点。

从输入图像重建3D点。对于全局SfM,请使用GlobalSfM节点。

输入参数 解释
SfMData文件 包含提取的特征和描述符的文件夹。
Features文件夹 包含提取的特征和描述符的文件夹。
Matches文件夹 存储计算匹配的文件夹。
Describer Types 用于描述图像的描述符类型。'sift'、'siftfloat'、'siftupright'、'akaze'、'akazeliop'、'akazemldb'、'cctag3'、'cctag4'、'siftocv'、'akazeocv'。
Localizer Estimator 用于定位摄像机的估计器类型(acransac、ransac、lsmeds、loransac、maxconsensus)。
Observation Constraint 在优化中使用的观测约束模式:基本:使用像素坐标中的标准重投影误差,比例:使用像素坐标中的重投影误差,但相对于特征比例。
Localizer Max Ransac Iterations RANSAC步骤中允许的最大迭代次数。 (1-20000)4096。
Localizer Max Ransac Error 相机定位(重定位)允许的最大误差(以像素为单位)。如果设置为0,它将根据使用的定位器估计器选择阈值(如果是ACRANSAC,则将分析输入数据以选择最佳值)。 (0.0-100-0)0.0。
Lock Scene Previously Reconstructed 这个选项对于SfM增强很有用。锁定先前重建的姿势和内部参数。
Local Bundle Adjustment 它通过避免计算不变的区域上的捆绑调整,减少了重建时间,特别是对于大型数据集(500+张图片)。
LocalBA Graph Distance 本地捆绑调整策略中定义活动区域的图距离限制。 (2-10)1。
Maximum Number of Matches 每个图像对(和每种特征类型)的最大匹配数。这对于快速重建概述很有用。0表示没有限制。 (0-50000)1。
Minimum Number of Matches 每个图像对(和每种特征类型)的最小匹配数。这对于具有准确关键点的有意义的重建很有用。0表示没有限制。 (0-50000)1。
Min Input Track Length SfM输入中的最小跟踪长度(2-10)。
Min Observation For Triangulation 三角测量一个点所需的最小观测数。将其设置为3(或更多)会大幅减少点云中的噪声,但最终姿势的数量会略微减少(在测试数据集上从1.5%到11%)。 (2-10)
Min Angle For Triangulation 三角测量的最小角度。 (0.1-10)3.0。
Min Angle For Landmark 地标的最小角度。 (0.1-10)2.0。
Max Reprojection Error 最大重投影误差。 (0.1-10)4.0。
Min Angle Initial Pair 初始对的最小角度。 (0.1-10)5.0。
Max Angle Initial Pair 初始对的最大角度。 (0.1-60)40.0。
Use Only Matches From Input Folder 仅使用来自输入matchesFolder参数的匹配。之前添加到SfMData文件的匹配文件夹将被忽略。
Use Rig Constraint 启用/禁用刚性约束。
Force Lock of All Intrinsic Camera Parameters 强制保持相机的所有内部参数恒定(焦距、主点、任何畸变)在重建过程中。如果输入相机已经完全校准,这可能会有所帮助。
Filter Track Forks 启用/禁用跟踪分叉的移除。当不一致的匹配导致同一跟踪中的多个特征时,该跟踪包含一个分叉。
Initial Pair A 第一张图像的文件名(不带路径)。
Initial Pair B 第二张图像的文件名(不带路径)。
Inter File Extension 中间文件导出的扩展名('.abc'、'.ply')。
Verbose Level 冗长级别(fatal、error、warning、info、debug、trace)。
输出SfMData文件 输出sfmdata文件的路径(sfm.abc)。
输出SfMData文件(带相机) 输出带有相机(视图和姿势)的sfmdata文件的路径(cameras.sfm)。
输出文件夹 用于中间重建文件和额外重建信息文件的文件夹。

PrepareDenseScene

"PrepareDenseScene"节点用于对图像进行去畸变处理并生成EXR图像。以下是该节点的设置:

设置 描述
Input SfMData文件
ImagesFolders 使用特定文件夹中的图像。文件名应与图像UID匹配。
Output File Type 未畸变图像的输出文件类型(jpg、png、tif、exr)。
Save Metadata 在图像元数据中保存投影和内参信息(仅适用于.exr图像)。
Save Matrices Text Files 在文本文件中保存投影和内参信息。
Correct images exposure 对图像的曝光值进行校正。
Verbose Level ['fatal'、'error'、'warning'、'info'、'debug'、'trace']
Output MVS配置文件(desc.Node.internalFolder + 'mvs.ini)
Undistorted images 未畸变图像的列表。
ImagesFolders ImagesFolders选项允许覆盖输入图像。这使得可以在SfM和MVS部分使用投影的光模式图像,并使用另一组图像进行纹理处理。

DepthMap

注意

此节点需要CUDA

描述

获取由SfM解析的所有相机的每个像素的深度值。

设置

名称 描述
MVS配置文件 SfMData文件。
图像文件夹 使用特定文件夹中的图像,而不是在SfMData文件中指定的图像。文件名应为图像uid。
缩放 图像缩小因子(1、2、4、8、16)。
最小视角 两个视图之间的最小角度。(0.0 - 10.0)
最大视角 两个视图之间的最大角度。(10.0 - 120.0)
SGM: 邻近相机数量 半全局匹配:邻近相机数量(1 - 100)
SGM: WSH: 半全局匹配 用于计算相似性的补丁的一半大小(1 - 20)
SGM: GammaC 半全局匹配:GammaC阈值(0 - 30)
SGM: GammaP 半全局匹配:GammaP阈值(0 - 30)
优化: 采样数量 (1 - 500)
优化: 深度数量 (1 - 100)
优化: 迭代次数 (1 - 500)
优化: 邻近相机数量 优化:邻近相机数量(1 - 20)
优化: WSH 优化:用于计算相似性的补丁的一半大小(1 - 20)
优化: Sigma 优化:Sigma阈值(0 - 30)
优化: GammaC 优化:GammaC阈值(0 - 30)
优化: GammaP 优化:GammaP阈值(0 - 30)
优化: Tc或Rc像素大小 使用邻近相机的最小像素大小(Tc)或当前相机的像素大小(Rc)
详细程度 详细程度(致命、错误、警告、信息、调试、跟踪)
输出 生成深度图的输出文件夹

详细描述

对于由SfM解析的所有相机,我们希望获取每个像素的深度值。存在许多方法,如块匹配、半全局匹配(SGM)[Hirschmüller2005],[Hirschmüller2008]或ADCensus [Xing2011]。我们将重点放在AliceVision中实现的SGM方法上。

对于每幅图像,我们选择周围的N个最佳/最接近的相机。我们基于光轴与所选邻近相机的像素的交点选择了正平面。这样创建了一个带有每个像素多个深度候选项的体积W、H、Z。我们估计所有这些深度候选项的相似性。相似性是通过将主图像中的小补丁重新投影到另一台相机中来计算的零均值归一化互相关(ZNCC)。这样创建了一个相似性体积。对于每个邻近图像,我们将相似性累积到此体积中。这个体积非常嘈杂。我们沿X和Y轴应用一个滤波步骤,累积局部成本,大大降低孤立高值的得分。最后,我们选择局部极小值,并用存储在深度图中的深度值替换所选平面索引。由于基于深度值的原始选择,这个深度图具有带状伪影。因此,应用了一个优化步骤,以获得亚像素精度的深度值。

所有这些深度图可以独立并行计算。然后,我们应用一个滤波步骤,以确保多个相机之间的一致性。基于相似度值和保持弱支持表面的一致相机数量,选择一个折衷方案,而不会添加伪影。

DepthMapFilter

原始深度图不会完全一致。某些深度图会声称看到被其他深度图遮挡的区域。DepthMapFilter步骤会隔离这些区域并强制深度一致性。

设置

名称 描述
Input SfMData文件
Depth Map Folder 输入深度图文件夹
Number of Nearest Cameras 用于过滤的最近相机数量 10 (0 - 20)
Min Consistent Cameras 最小一致相机数量 3 (0 - 10)
Min Consistent Cameras Bad Similarity 具有弱相似度值像素的最小一致相机数量 4 (0 - 10)
Filtering Size in Pixels 像素中的滤波大小 (0 - 10)
Filtering Size in Pixels Bad Similarity 具有弱相似度值像素的滤波大小 (0 - 10)
Verbose Level 详细程度 (致命、错误、警告、信息、调试、跟踪)
Output 生成深度图的输出文件夹
Min Consistent Cameras lower this value if the Meshing node has 0 depth samples input 如果Meshing节点没有深度样本输入,则降低最小一致相机数这个值

查看输出 打开输出文件夹并查看EXR文件

Meshing

从SfM点云或深度图生成网格

设置

名称 描述
Input SfMData文件
Depth Maps Folder 输入深度图文件夹
Filtered Depth Maps Folder 输入经过滤波的深度图文件夹
Estimate Space From SfM 从SfM估算3D空间
Min Observations For SfM Space Estimation SfM空间估计的最小观测次数 (0-100) 3
Min Observations Angle For SfM Space Estimation SfM空间估计中两个观测之间的最小角度 (0-120) 10
Max Input Points 从深度图像加载的最大输入点数 (500,000 - 500,000,000)
Max Points 深度图融合结束时的最大点数 (100,000 - 10,000,000)
Max Points Per Voxel 每个体素的最大点数 (500,000 – 30,000,000)
Min Step 从深度图中加载深度值的步长是从maxInputPts计算的。在这里我们定义了此步长的最小值,因此在小数据集上,我们不会在开始时花费太多时间加载所有深度值 (1-20) 2
Partitioning (singleBlock, auto)
Repartition (multiResolution, regularGrid)
angleFactor (0.0-200.0) 15.0
simFactor (0.0-200.0) 1.0
pixSizeMarginInitCoef (0.0-10.0) 2.0
pixSizeMarginFinalCoef (0.0-10.0) 4.0
voteMarginFactor (0.1-10.0) 4.0
contributeMarginFactor (0.0-10.0) 2.0
simGaussianSizeInit (0.0-50) 10.0
simGaussianSize (0.0-50) 0.1
minAngleThreshold (0.0-10.0) 0.01
Refine Fuse 使用由角度和相似度分数定义的新像素大小来优化深度图融合
Add Landmarks To The Dense Point Cloud 将SfM地标添加到密集点云中
Colorize Output 是否给输出的密集点云和网格着色
Save Raw Dense Point Cloud 在切割和过滤之前保存密集点云
Verbose Level 详细程度 (致命、错误、警告、信息、调试、跟踪)
Output Mesh 输出网格 (OBJ文件格式) mesh.obj
Output Dense Point Cloud 输出带可见性的密集点云 (SfMData文件格式) densePointCloud.abc

Draft meshing

如果Meshing节点没有连接到深度图文件夹属性,将基于结构从运动点云创建网格。这比使用深度图快得多,但结果质量较低。

详细描述

这一步的目标是创建场景的稠密几何表面表示。

首先,将所有深度图融合到全局八叉树中,其中兼容的深度值合并到八叉树单元格中。

然后执行3D Delaunay四面体化。然后进行复杂的投票过程,计算单元格上的权重以及连接单元格的面的权重,如[Jancosek2011]和[Jancosek2014]中所述。

应用图割最大流[Boykov2004]来最优地切割体积。这个切割代表提取的网格表面。我们过滤表面上的不良单元格。最后,对网格应用拉普拉斯滤波以去除局部伪影。

此时,网格也可以简化以减少不必要的顶点。

MeshFiltering

过滤掉网格中不需要的元素

设置

名称 描述
Input 输入网格 (OBJ文件格式)
Filter Large Triangles Factor 移除所有大三角形。如果一个边长大于平均边长的N倍,我们将认为三角形是大的。将其设为零以禁用此功能。60 (1 - 100)
Keep Only the Largest Mesh 仅保留最大的连接三角形组 (是/否)
Nb Iterations 迭代次数 5 (0 - 50)
Lambda Lambda值 1 (0-10)
Verbose Level 详细程度 (致命、错误、警告、信息、调试、跟踪)
Output mesh 输出网格 (OBJ文件格式) internalFolder + 'mesh.obj

注意

"仅保留最大的网格"。在2019.1.0版本中,默认情况下禁用此功能,以避免对环境进行网格化,而不是感兴趣的对象。在某些情况下,最大的网格是重建的背景。当感兴趣的对象与大背景网格不连接时,它将被移除。您应该将感兴趣的对象放在结构良好的非透明或反射表面上(例如报纸)。

Texturing

纹理创建UV并投影纹理,改变质量和大小/文件类型的纹理。

设置

名称 描述
MVS Configuration file .../mvs.ini
Input Dense Reconstruction 密集重建结果的路径(每个顶点可见性的网格)
Other Input Mesh 可选的输入网格进行纹理。默认情况下,将为重建结果添加纹理。
Texture Side 输出纹理大小 1024, 2048, 4096, 8192, 16384
Texture Downscale 纹理缩小因子 1, 2, 4, 8
Texture File Type 纹理文件类型 'jpg', 'png', 'tiff', 'exr'
Unwrap Method 如果输入网格没有UV坐标,则展开输入网格的方法。Basic (> 600k faces)快速简单。可以生成多个图集 LSCM (<= 600k faces): 优化空间。生成一个图集 ABF (<= 300k faces): 优化空间并拉伸。生成一个图集
Fill Holes 用合理值填补纹理空洞 是/否
Padding 纹理边缘填充大小(像素) (0-100)
Max Nb of Images For Fusion 用于创建最终纹理的最大图像数 (0-10)
Best Score Threshold 相对最佳分数阈值的过滤基于阈值来禁用 (0.0-1.0)
Angle Hard Threshold 角度硬阈值过滤的禁用 (0.0, 180.0)
Force Visible By All Vertices 三角形可见性基于顶点可见性的并集 是/否
Flip Normals 翻转面法线的选项。可能需要,因为它取决于三角形中顶点顺序和从一个软件到另一个软件的约定更改。
Visibility Remapping Method 从重建到输入网格重新映射可见性的方法 (Pull, Push, PullPush)
Verbose Level 详细程度 (致命、错误、警告、信息、调试、跟踪)
Output Folder 输出网格的文件夹:OBJ、材质和纹理文件
Output Mesh 输出网格的文件夹:OBJ、材质和纹理文件 internalFolder + 'texturedMesh.obj
Output Material 输出网格的文件夹:OBJ、材质和纹理文件 internalFolder + 'texturedMesh.mtl
Output Textures 输出网格的文件夹:OBJ、材质和纹理文件 internalFolder + 'texture_*.png

关于

Texture Downscale

将缩小到4或8会降低纹理质量,但加快计算时间。

将纹理缩小因子设置为1而不是2,以获得可能的最大分辨率与图像分辨率相同。

Best Score Threshold

此参数是限制我们在颜色融合中使用的源图像数量的约束。它与输出纹理文件的数量无关。没有这样的参数,您唯一能做的就是增加图像分辨率。

0

评论区