基于摄影测量的三维重建【终极指南】

news2024/12/28 5:49:16

我们生活的时代非常令人兴奋,如果你对 3D 东西感兴趣,更是如此。 我们有能力使用任何相机,从感兴趣的物体中捕捉一些图像数据,并在眨眼间将它们变成 3D 资产! 这种通过简单的数据采集阶段进行的 3D 重建过程是许多行业的游戏规则改变者。

随着神经辐射场(又名 NeRF)等新的尖端 3D 重建方法的兴起,有必要回到某些不太基础的“基础”,这应该可以帮助你减轻炒作(除其他外) 😄)。

在这里插入图片描述

推荐:用 NSDT设计器 快速搭建可编程3D场景。

图像 3D 重建是一个广泛研究的领域,有一个非常激动人心的故事,它在历史上通过三个研究“氛围”来解决:具有立体视觉和运动结构 (SFM) 的计算机视觉,具有各种同时定位和映射的机器人 (SLAM) 迭代和地理信息,以及摄影测量视角。 这些术语本质上是针对传感器相对于周围环境的同步定位(位置和方向),同时构建相同环境的 3D 地图。

而今天,我们对度量方法感兴趣,它可以建立在一组非结构化重叠图像上并将它们转换为 3D 对象。 还有什么比我们自己动手做更好的理解方式呢?

让我们开始吧!

1、三维重建简介

在此终极 3D 重建指南中,我们将详细探索两个摄影测量项目,并解释导致最终美丽结果的所有步骤。 我们将研究一个小型项目(通过摄影测量重建一个简单的物体)和一个大型项目(使用地面激光扫描仪和摄影测量重建一个废弃的羊毛工厂)。

对于每个项目,我们将完成采集设置和处理步骤,展示带有付费选项 (Reality Capture) 和开源软件 (Meshroom) 的工作流程。

为了便于复制,我有意专注于提供最多的细节和插图。 因此,语气比平时更浓一些,但希望当你的日常活动变得模糊时,它会成为一个精确的方法😁。

在这里插入图片描述

如果你有时间,请准备好按照流程创建今天感兴趣的对象和场景的数字副本。

2、小尺度物体的三维重建

让我们首先研究一个轻松的项目,你可以在家中使用普通相机和计算机轻松复制。 该项目旨在获得一个简单对象(更准确地说,是一个迷你矿井装饰)的 3D 重建。 物体的大小大约为15 x 10 x 10厘米。 该物体为灰色和棕色,表面无光泽。
在这里插入图片描述

2.1 数据采集

正如承诺的那样,必要的设备很容易获得。 只需要一个相机(你的智能手机可以),如果需要更高的稳定性和控制力,可以使用三脚架,但没有它也可以工作。 使用的相机是带有佳能超声波镜头的佳能 EOS 50D。 照片以JPG格式保存,大小为4752*3168像素。 在开始采集之前,我们拍摄几张照片以确定应使用哪些设置。 在我们的实验中,我们将相机参数设置如下:

  • 焦距:28mm的固定焦距,在与拍摄对象的距离和可工作区域之间取得了良好的平衡;
  • ISO:400,这是一个很好的开始值,但如果你的场景显得太暗,你可以将这个值提高到 1600(后果自负😁);
  • 光圈:F/3.5,以有限的景深为代价获得足够的光线。 在我们的例子中,因为我们只关注一个小物体,所以这个光圈足够了。
  • 快门速度:125 毫秒(1/8 秒),由于稳定性更高,我们的三脚架可以做到这一点。 没有三脚架,低于 1/200s 是非常棘手的;
  • 白平衡:4000 K。这适应了我们场景的环境照明。

以上参数在整个采集过程中保持不变。
在这里插入图片描述

采集策略本身很简单。 我们将相机放在三脚架上,调整高度和角度,使物体完全适合视野。 在这种情况下,由于物体比较低,我们可以让相机的角度向下,这样我们也可以拍摄到顶部。 我们使用自动对焦来确保照片不会模糊,然后切换到手动模式。
在这里插入图片描述

然后我们沿着物体周围的圆形轨迹移动三脚架。 我们需要与物体保持恒定的距离,以便焦点保持正确。 我们边走边检查照片。 一旦我们完成了围绕物体的第一个圆圈,我们就减少了三脚架的腿并降低了相机的向下角度。 我们调整焦点,然后再次切换到手动模式。 我们围绕这个主题再拍几张照片。

最后,我们从三脚架上取下相机,拍摄完整物体的垂直照片。 为此,我们再次调整焦点。 然后,我们拍摄细节照片,以确保物体所有部分的纹理都很好。 这个想法基本上是拍摄足够的照片以允许完整和详细的重建,同时记住不必要的大量输入只会减慢过程并使过程复杂化。 理想情况下,对于这样的对象,你有 25 张图片(8 个水平位置乘以三层高度,再加上一个在顶部)。

现在,我们可以将照片复制到计算机上并开始处理! 👌

2.2 摄影测量处理

首先对照片进行分类,以消除只会干扰后续步骤的质量差的图像(模糊、失帧、曝光错误)。 在 50 张照片中,我们剔除了两张稍微失焦的照片。 对于处理,我必须找到一台具有相当标准组件的旧笔记本电脑来证明可复制性😁:笔记本电脑是 Acer Aspire,Windows 10 64 位; 第七代英特尔酷睿 i5 处理器; 12 Gb 内存和 NVIDIA GeForce 940 MX GPU。 比起下一个要审核的项目,考虑到投入少,用一台高性能的电脑还是有余的!

现在所有的测试台都清楚了,让我们通过使用 Reality Capture 和 Meshroom 的工作流程深入研究 3D 摄影测量处理细节。

选项 A:Reality Capture。

Reality Capture 的选择非常简单:可以免费做任何事情……只要不导出任何内容。 因此,没有什么比展示最先进的专业软件更好的了。

你可以使用此链接直接下载 Reality capture。 安装该程序后,可以通过注册为“匿名”以 PPI 模式(按输入付费)免费试用。 许多在线教程和讨论有助于开始使用 Reality Capture。 第一步是创建一个新项目并导入我们的 48 张图像。 这是通过拖放或单击“输入”图标来完成的。

在这里插入图片描述

然后,我们从“对齐”选项卡中的第一个图标开始对齐。 对于这个项目,我们保留默认参数。
在这里插入图片描述

由于输入数量较少,对齐仅需 30 秒即可完成。 在这一步之后,我们有一个由点云和相机的估计位置组成的组件。 哇哦! 🎉

在这里插入图片描述

我们可以检查所有输入是否对齐,并看到估计了 48 个摄像机中的 48 个的位置。 我们还检查对齐报告。 此报告提供对齐持续时间、对齐输入的数量、点计数以及以像素为单位的平均和最大重投影误差。 也可以检索使用过的对齐设置。

在这里插入图片描述

💡 提示:最好将最大投影误差设为 2 像素,将平均投影误差设为 0.5 像素以下。 当然是越低越好。 有趣的是,你可以看到我们在这里回答了这两个标准。 最重要的是,我们获得了一个平均轨道长度信息,可以清楚地了解相机到物体的距离。

最后,完成点云的目视检查。 如果一切正常,我们就可以进行下一步,重建。 我们保留默认参数,除了“图像缩小”因子设置为 2。

💡 提示:缩减因子是图片在使用前被缩小的因子。 可以将 downscale 保持在 1(这意味着图像以其原始大小使用),但重建可能需要更多时间。 当使用更高的缩减因子时,结果可能更嘈杂或更不详细。 然而,差异有时非常微妙。 使用可提供令人满意的结果和可接受的处理时间的降比例因子确实很重要(在这种情况下,它并不重要,但对于更重要的项目来说是必不可少的)。

通过单击“重建”选项卡中的“正常细节重建”图标开始重建。 此步骤仅需五分钟,生成约 100 万个三角形面的网格。 与地球上的国家数量(2023 年为 195 个)相比很多,但与我们通常使用的国家相比非常小。 使用“高级”选择工具,我们选择边缘和大三角形,然后过滤选择。 我们还调整了重建框,以消除属于放置对象的家具的部分(“框”选择工具)
在这里插入图片描述

我们现在可以看看我们的过滤模型。 在此步骤中分析你获得的质量很重要,因为在此模式下,很容易发现应修复的几何问题。 据我所知,我对这一步的结果很满意。 你呢? 你的实验进行得怎么样了?
在这里插入图片描述

最后一步是对网格进行纹理化。 为此,我们保留默认参数并单击“重建”选项卡中的“纹理”按钮。 默认情况下,缩减因子 2 用于纹理。
在这里插入图片描述

再过两分钟后,我们终于获得了对象的数字复制品。
在这里插入图片描述

在不到一个小时的时间内(包括采集和处理时间),我们成功地获得了一个完整且高度逼真的实物的 3D 模型。 最大重投影误差设置为低于 2 个像素,我们获得了 0.46 个像素的平均误差。 模型的某些区域比其他区域具有更好的纹理。 在这种情况下,由于我们手头有物体并准备好采集设置,纹理问题可以通过拍摄缺少信息的部分的免费照片轻松解决。 这表明使用 Reality Capture 的 3D 摄影测量可以非常高效并且相对容易使用,无需成为专家。 我们保留了默认参数并得到了令人满意的结果。 显然,对于更广泛或更复杂的项目,了解和调整每个任务的设置以获得最佳结果至关重要。 这就是我们将在第二章中检查的内容。 😉

🦚注意:如果你想导出模型,你要么必须购买许可证,要么在 PPI 模式下免费使用程序,只为最终结果付费。

选项 B:Meshroom。

Meshroom 是一个开源程序,可以在这个地址下载, 在线提供用户手册。

通过拖放或单击“文件”顶部菜单中的“导入图像”将图像导入 Meshroom。 在 Meshroom 中,你可以轻松地将管道和为获得最终结果而执行的不同任务可视化。 管道可以通过添加或修改节点的参数来适应用户的需求。

在这里插入图片描述

我们可以看到执行的连续任务是特征提取、图像匹配、特征匹配、运动结构、深度图的创建、网格划分和纹理化(有关每个步骤的详细说明,请参见第 2 章)。 对于这个项目,我们保留默认管道,这通常会产生良好的效果,只需单击屏幕顶部的“开始”按钮即可。 2 小时后,处理完成,我们可以研究 3D 视图中的稀疏点云结果,以及相机的估计位置。

在这里插入图片描述

如果我们点击管道节点,会得到关于每项任务的简短报告。 例如,我们可以看到估计了所有 48 个摄像机的位置。 我们还可以查看网格划分任务的报告,它告诉我们重建是由将近 2M 个三角形组成的。
在这里插入图片描述

在文件资源管理器中,我们现在可以查找“Meshroom Cache”文件夹,其中已经包含所有处理结果(无需显式导出模型)。 在“Meshing”文件夹中,我们可以找到我们的模型作为 OBJ 文件。 在“Texturing”文件夹中,我们找到了纹理模型的 OBJ 文件。
在这里插入图片描述

💡 提示:在 Windows 10+ 中,OBJ 模型可以直接使用 3D Viewer 应用程序打开,否则我们将在第 2 章中看到如何使用 Blender 或 MeshLab 处理这些文件。
在这里插入图片描述

使用 Meshroom,处理时间要长得多。 三角形的数量也是我们使用 Reality Capture 时的两倍,这并不奇怪,因为我们使用了缩小因子进行重建,这在此处有所不同。 然而,模型的方面(纹理)可能看起来更好,即使在这种情况下,使用的缩小因子是相同的 (2)。 可以使用 Meshroom 对模型进行后处理,或者可以更改节点的参数(而不是保持默认值)以获得更好的结果。 该模型也可以导入到另一个软件(如 Blender)中,以清洁属于放置该对象的家具的部件。 与 Reality Capture 不同,借助 Meshroom,我们可以直接将模型作为 OBJ 获取,没有隐藏成本。 我们甚至可以 3D 打印它(但那是另一次了 😉)!

3、大型项目的三维重建

现在让我们来看一个更大规模的项目,并更详细地了解处理工作流程。 这个项目发生在比利时韦尔维耶市,特别是在一个废弃的羊毛厂。 工作环境由几栋建筑组成。 这些建筑物的室内和室外部分都被考虑在内。

由于这个地方被遗弃了,因此不对公众开放。 这个地方的建模是作为一个项目的一部分完成的,该项目旨在在它们崩溃之前捕捉不寻常的地方,这样人们就可以(虚拟地)和我的朋友 Roman Robroek 一起参观它们。

3.1 3D 数据采集

整个采集过程由两个人在2小时内完成。 一个人拍照。 该项目中使用了两个摄像头:

  • 焦距为 16 至 36 毫米的索尼相机;
  • 焦距为 24 毫米的佳能相机。

索尼相机拍摄 393 张照片,佳能相机拍摄 384 张照片。 照片以 HDR(高动态范围)拍摄。 格式为 JPEG。 所以,我们总共有 777 张照片。

在战略要地,三脚架会在一个圆圈上以短角度间隔拍摄照片。 更多的照片是徒手拍摄的,以完全覆盖工作环境。

第二个人负责激光扫描部分并使用 BLK 360 激光扫描仪,该扫描仪体积小,因此可以在狭窄区域进行扫描。 因此,该项目是一个混合项目。 来自 156 次激光扫描的数据被收集并添加到处理中,以完成照片中的信息。

BLK 中的原始文件采用 .e57 格式。 黑色和白色目标用于将扫描链接在一起。

3.2 3D 数据处理

这次,为了处理,我们使用了一台高端计算机:它是一台配备 Intel Core i9–10900X 处理器、256 Gb RAM 和 NVIDIA GeForce RTX 3090(很酷,我知道😊)的塔式计算机。

选项 A. Reality Capture

在 Reality Capture 中,我们首先导入 156 个激光扫描(由软件从 .e57 转换为 .lsp 文件)。 可以对所有输入或逐个部分进行对齐。 在最后一种情况下,我们然后对齐组件(“合并组件”工具)。

对齐也可以在扫描件上单独完成,然后在图像上完成。 如果扫描是地理参考的,则对齐只是元素定位信息的视图,因此是即时的。 我们可以使用“匹配地理参考组件”选项来仅获取一个组件,即使我们的环境中有未链接但地理参考的部分也是如此。 另一个有用的选项是“强制组件重新匹配”。 随着越来越多的相机对齐,在已经匹配的相机之间执行重新对齐以增强结果。 但是,如果我们有要链接的组件,则不应将此选项设置为“是”:这会修改每个组件已经很好的对齐,并可能引入错误。

首先,我们对齐激光扫描。 由于它们是地理参考的(因此已经链接在一起),因此只需几秒钟。 我们在一个组件中对齐了 156 次扫描中的 156 次。 我们导入我们的 777 图像并在开始该过程之前更改对齐设置。 我们将“每幅图像检测到的特征数量”和“每 mpx 检测到的特征数量”(百万像素)参数设置为 100k,并将“图像重叠”设置为“高”。

💡 提示:检测到的特征的最大数量越高,有助于获得更少的组件,但对更多特征的研究可能会减慢这个过程。 必须根据数据集定义图像重叠。 如果设置为“Low”,处理速度较慢,我们可能会获得多个单独的组件。
在这里插入图片描述

经过 36 分钟的处理,我们得到了 933 个元素中的 897 个对齐的主成分。 我们还有六个包含 3 到 6 个对齐图像的小组件。 当然,我们感兴趣的是更重要的组件,但为了完整起见,让我向您展示我们如何链接回其他组件(如果它们包含所需信息,则很有用)。 我们将添加控制点以对齐尽可能多的图像。 控制点是其位置位于不同图像中的点。 添加控制点的目的是添加使对齐更容易的约束。 我们可以查看每个小组件中对齐的图像,决定在哪里添加控制点,然后尝试在主要组件中对齐的图像中找到相同的点,以确保当我们进行新的对齐时所有内容都将链接在一起 .

通过打开 2D 视图,然后进入“场景”选项卡,我们可以选择仅查看未配准的图像(即根本未对齐的图像)。 这向我们展示了哪些其他区域需要控制点。

在这里插入图片描述

在 Reality Capture 中,我们可以通过单击“Alignment”选项卡中的“Control Points”按钮来添加控制点。

在这里插入图片描述

然后,通过按住鼠标左键,我们可以调整图像中的位置。 我们还可以使用鼠标滚轮进行缩放。 释放鼠标左键时,添加控制点。 可以添加另一个控制点,或者通过预先选择有问题的控制点,可以将相同的控制点定位在另一个图像中。

在这里插入图片描述

在这个项目中,使用了 18 个控制点。 每个控制点位于 3 到 18 个图像中。 使用与以前相同的设置开始新的对齐。 11 分钟后,对齐完成。 现在我们已经对齐了 98% 的输入(933 张图像中的 918 张),让我们检查一下定量结果。 这是首先通过查看对齐报告来完成的。 平均重投影误差为 0.57 像素。 通过再对齐 21 张图像,点数从 1280 万点增加到 1350 万点。

在这里插入图片描述

然后,我们还可以通过检查点云来直观地检查对齐结果。 我们正在寻找奇怪放置的元素、双层墙或未充分缩放的部分。
在这里插入图片描述

我们注意到三个摄像头没有对齐(它们的位置没有意义)。 当发生这种情况时,我们可以尝试将这些相机与新的控制点对齐或禁用它们以进行进一步处理。 当我们在这些照片所覆盖的区域中已经有足够的信息时,选择最后一个选项,因此使用它们并不重要。

💡 提示:可以通过选择并按下 CTRL+R 来一次性禁用所有任务的输入。 然后将这些输入交叉到输入列表中,并以红色显示。

我们现在可以继续进行网格划分。 我们使用默认参数在 Normal 细节中开始重建,除了在 3M 上设置的“Maximal vertex count by part”。 在“Normal detail”中,“Image downscale”的值默认为2。
在这里插入图片描述

经过 5 小时 30 分钟的处理,我们得到了一个由 616.6M 个三角形组成的模型。

在这里插入图片描述

该模型太大而无法在“Solid”模式下完整显示,因此我们截取其中的一小部分来检查结果。 裁剪是通过调整感兴趣区域周围的重建框,选择框外的三角形(使用“框”选择工具)并过滤选择来完成的。 结果是一个可以在“实体”模式下显示的新模型
在这里插入图片描述

裁剪还有助于对模型的小部分执行测试,而不是同时对整个模型应用更改,这可能会导致处理时间过长。 例如,我们可以测试“Image downscale”值的影响。 我们禁用重建框外的输入并连续启动三个重建,每次“图像缩小”参数的值不同。

处理时间和每个值获得的三角形计数在下表中给出。
在这里插入图片描述

“图像缩小”增加得越多(即图像缩小得越多),处理时间越多,处理时间就越短。 然而,随着“图像缩小”的增加,某些区域的细节会丢失。
在这里插入图片描述

对于更大的部分,差异非常微妙,如下图所示。
在这里插入图片描述

另一个有用的测试是研究支持三角测量的合格点数。 在诸如“两个顶点之间的最小距离”为 0.01 m 而不是 0.002 m 的约束下,它要低得多。 这导致模型包含更少的三角形(2M,而我们之前有 27.4M)

在这里插入图片描述

这也会导致模型中出现更大尺寸的三角形,因此可能会在非平面区域中丢失清晰的几何形状。
在这里插入图片描述

我们也可以尝试减小“Maximal vertex count by part”参数的值。 三角形数没有改变,但我们现在有 61 个零件而不是 20 个。好处是处理时间要短得多(2 分钟对 13 分钟)。
在这里插入图片描述

💡提示:可以根据使用的激光扫描设置三个重建参数。 这些参数是“两点之间的最小距离”、“点云裁剪半径”(比取决于激光扫描的范围更远的点被认为是不可靠的,不用于计算),以及“ 点的最小强度”(强度较低的点不用于计算)。 要找到应使用的设置,请参阅激光扫描用户手册。

现在,让我们用本章前一节提到的“高级”选择工具做一些清理并选择边缘三角形和大三角形。 该函数需要1分钟来推送结果。 我们还平滑模型以去除噪声。 要调整的设置是“平滑类型”(“噪声消除”或“强”)、“平滑样式”(边界顶点、表面顶点表面或两者的平滑)、“平滑权重”和 算法的“迭代次数”。 权重越大,平滑越激进(因此,可能会擦除更多细节)。 我们对模型的一小部分进行了一些测试,如下所示和解释。

在这里插入图片描述

我们可以观察到一些变化,但它们并不明显,因为模型一开始就不是很嘈杂。
在这里插入图片描述

如果我们看一个噪声较大的数据集,我们可以更好地看到平滑的效果。 平滑是在表面而不是边缘上完成的,执行了 100 次算法迭代,权重设置为 0.5。 平滑在 10 分钟内完成。
在这里插入图片描述

这些参数可确保高效平滑而不会丢失太多细节。

在这里插入图片描述

此时可以使用的另一个工具是“简化工具”。 可以简化模型以达到固定数量的三角形(类型:“绝对”)或保留一定百分比的三角形。
在这里插入图片描述

在此项目中,我们不使用此工具,因为我们不打算导出并继续处理模型。 否则,简化对于减轻 3D 模型的重量以将其导入其他软件非常有用。 例如,我们的模型可以简化为 2000 万个三角形(“目标三角形数”),同时保持令人满意的质量。 我们应用颜色校正来标准化图像的外观。 为此,我们禁用扫描,因为颜色不自然并且会扰乱归一化。 扫描也不用于纹理化。 色彩校正在 3 分钟后完成。
在这里插入图片描述

最后,我们继续纹理化。 这一次,我们也保留默认的“图像缩小”系数,设置为 2。我们使用 16k 的纹理分辨率和 1 毫米的纹素大小,这在我们的案例研究中给出了极好的结果。
在这里插入图片描述

纹理在 1h30 中执行,我们通过裁剪显示它,就像我们为重建所做的那样。
在这里插入图片描述

现在,为了科学起见,让我们测试其中一个纹理参数对模型的一小部分的影响。 定义的重建框外的相机以及所有激光扫描都被禁用。 如果增加 Image downscale,处理时间会有所不同,但我们可以看到结果可能会更好。 如下所示。

在这里插入图片描述

在开始纹理化之前可以完成一个步骤:展开。 当纹理化开始时默认执行解包,但也可以显式执行以获得更好的结果并使纹理化更快。 在展开选项中,可以设置“最大纹理分辨率”,以及展开的“样式”。
在这里插入图片描述

展开样式是用于创建 UV 贴图的策略。 可以设置“最大纹理大小”,以便计算满足此约束所需的纹素大小。 相反,可以固定“Texel 大小”。 最佳纹素大小由程序计算。 使用此纹素大小的纹理会提供 100% 的“纹理质量”,而使用较小的纹素大小会导致纹理质量大于 100%。 因此,使用较大的纹素尺寸会导致纹理质量低于 100%。 纹理质量不是纹理质量的良好指标,而只是最佳纹素大小与使用的纹素大小之间的比率。
在这里插入图片描述

纹理质量可以在下面的纹理报告中找到。 我们可以看到我们的纹素等于每个纹素 0.001 毫米,这正是我们想要的。 最后,如果我们有许可证,我们可以将我们的模型导出为 OBJ 文件。 坐标系可以在项目设置中设置并检索以供导出。 我们可以选择是否导出纹理,我们可以选择它们的文件格式
在这里插入图片描述

在总共 8 小时内,我们获得了一个几何精确的纹理模型,并且很好地代表了物理环境。 这一次,我们没有系统地保留默认参数,而是调整它们以获得最佳结果。 虽然我们没有测试每个参数,但我们已经检查了最关键的参数,并且看到它们的影响相对容易理解。 我们还审查了一些允许获得干净模型的工具。

最后,这是我们使用 Reality Capture 进行的重建的一些效果图。

在这里插入图片描述

选项 B. Meshroom

哈哈,如果你需要大量的咖啡因,现在是时候了🤗。 我们现在将研究相同的过程并评估可以用 Meshroom 做什么。 在 Meshroom 中,我们只能导入 777 张图像(而不是 156 张激光扫描图)。 因此,仅由激光扫描覆盖的部分将不会被建模。 由于本节仅旨在展示更大规模的项目也可以在不需要像 Reality Capture 这样的付费软件的情况下进行,所以这不是问题。 但是,采集方法应适应为处理选择的软件,反之亦然。 换句话说,如果你没有可以处理激光扫描的软件,则必须小心地使用摄影测量法收集所有数据。 导入数据后,我们就可以开始处理了。 这一次,我们也保留默认管道。
在这里插入图片描述

13个多小时后,处理完毕,可以看结果了。 首先,我们可以直观地检查 structure-from-motion 节点的结果。

在这里插入图片描述

在报告中,我们看到 777 个摄像机位置中只有 554 个被估计(71% 的摄像机)。 这对应于场景的主要建筑。
在这里插入图片描述

接下来,我们可以检查网格。 我们在“Meshroom Cache”文件夹内的“Meshing”文件夹中找到 OBJ 文件,并使用 3D Viewer 应用程序打开它。 这比使用小型模型需要更多的时间。
在这里插入图片描述

该报告表明该网格包含 680 万个三角形的近 350 万个顶点。
在这里插入图片描述

最后,我们可以看一下在“Texturing”文件夹中找到的纹理网格。
在这里插入图片描述

可以将节点添加到管道中以进行后处理或测试不同的参数,然后将最佳参数保留在最终的工作流程中,这非常方便! 不过这一集,我要给大家介绍的是如何使用另外一款非常强大的后期处理软件:Blender。

🎵 注意:Blender 还可用于对使用 Reality Capture 或任何导出 3D 网格的软件制作的模型进行后处理。

安装程序后,我们导入纹理网格。

在这里插入图片描述

模型需要清理:重建边缘的三角形必须移除(就像我们使用 Reality Capture 过滤边缘和大三角形时一样)。
在这里插入图片描述

要修改几何图形,我们切换到“编辑模式”。 首先,我们使用“删除”工具,顾名思义,该工具用于删除选定的顶点、边或面。
在这里插入图片描述

我们用它来去除网格边界处的伪影和三角形并使其更干净。
在这里插入图片描述

“删除松散”工具删除断开连接的顶点、边或面。 该工具位于“网格”选项卡的“清理”部分。 我们可以应用的另一个工具是“Fill holes”。 根据周围的几何形状和纹理填充孔。 我们选择“边缘选择”模式来选择我们想要填充孔的模型部分。
在这里插入图片描述

选择完成后,我们按 ALT+F。 所选零件中的孔被填充。

在这里插入图片描述

其他有趣的工具是“Dissolve”和“Decimate”工具。 溶解(dissolve)允许将小平面合并为一个小平面,以便保留原始几何形状。 抽取(decimate)可以将三角形的数量减少到特定比例,同时保持形状尽可能接近原始形状。
在这里插入图片描述

我们可以打开“Texture Paint”选项卡来查看我们的纹理模型并修改纹理贴图。
在这里插入图片描述

Meshroom 和 Blender 让我们在经过 15 个多小时的处理后获得了带纹理的网格。 使用 Blender,我们解决了 Meshroom 使用默认参数生成的模型的一些问题,并获得了一个干净的模型,而无需对管道的每个步骤进行参数化。 然而,根据最终的应用,使用 Meshroom 进行后处理可能会更有效并提供更好的结果,尽管这需要事先更加熟悉该程序。

4、结束语

真诚的,如果你一直读到这里,恭喜你! 这是一本超级密集的3D动手指南,绝对可以作为你未来项目的参考! 如果我必须用 4 个要点来总结这两个软件上说明的 3D 摄影测量过程:

你需要调整采集策略,这在很大程度上取决于感兴趣对象的规模、范围和材料,以及应用程序所需的详细程度和精度。
对于大型项目,激光扫描是对通过摄影测量收集的信息的极好补充,并且可以避免精度的大漂移。 但是,并非所有软件都允许处理此信息。
相机、计算机和软件应适应输入和所需的输出。 你现在可以很好地参考处理时间和取决于所有这些参数的约束。
各种处理步骤和参数允许根据项目的最终目标进行足够的灵活性调整。 对于经常性项目,将它们分类以建立整个自动工作流程的预设是很有趣的。


原文链接:三维重建终极指南 — BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s service与ingress

1.前言 service只能作用与网络模型中的四层,ingress可以作用于网络模型中的七层,Service是一种抽象,定义了一个逻辑上的一组Pod以及访问它们的策略。Service为Pod提供了一个稳定的IP地址和DNS名称,并通过标签选择器来定义需要暴露…

SpringBoot_Vue3 《Hello World》项目入门教程

1. 前言 前后端分离模式,可以让后端和前端开发人员致力于自己擅长的领域,且可以让前端和后端业务逻辑高度解耦合。本文从一个简单的案例入手,讲解使用 spring boot和vue3如何实现前后端的分离。 前后端分离有2 种模式: 逻辑分离…

华为OD机试真题 JavaScript 实现【在字符串中找出连续最长的数字串】【2023 B卷 100分】,附详细解题思路

一、题目描述 输入一个字符串,返回其最长的数字子串,以及其长度。 若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)。 本题含有多组样例输入。 数据范围: 字符串长度 1≤n≤200 &…

【LeetCode】240. 搜索二维矩阵 II

240. 搜索二维矩阵 II(中等) 这道题和 74. 搜索二维矩阵 基本一致,可以放在一起做。 方法一:变形的二叉搜索树 思路 这种做法和 74. 搜索二维矩阵完全一致。 我们可以将二维矩阵抽象成「以右上角为根的 BST」: 那…

基于python五子棋的设计与实现(论文+源码)_kaic

目 录 摘 要 绪 论 一、游戏的需求分析 (一)游戏设计目标 (二)游戏的功能需求 1.可视化模块 2.玩家操作模块 3.胜负判定模块 (三)游戏的性能需求 (四)游戏其它需求 二、五子棋游戏…

JDK1.8环境安装及配置

JDK1.8环境安装及配置 一、下载JDK1.8二、安装三、环境变量配置四、验证 一、下载JDK1.8 本教程使用的是8u202版本,若需要其他版本可点击下方链接跳转下载。 Oracle下载,点击跳转选择版本 如下图所示,选择自己需要的版本下载 点击8u202版本…

斯坦福《Transformers集结》;大语言模型“书生・浦语“发布

🦉 AI新闻 🚀 上海人工智能实验室发布1040亿参数大语言模型"书生・浦语",在多项考试中超越ChatGPT 摘要:上海人工智能实验室近日发布了一个千亿级参数大语言模型——“书生・浦语”。该模型在多领域测试中表现优秀&am…

linuxOPS基础_linux计划任务

什么是计划任务 作用:操作系统不可能24 小时都有人在操作,有些时候想在指定的时间点去执行任务(例如:每天凌晨 2 点去重新启动httpd>阿帕奇),此时不可能真有人每天夜里 2 点去执行命令,这就…

大手笔!微软一口气在 GitHub 开源了 5 个技术教程。。

公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! 此前,我曾介绍过微软在 GitHub 开源的一系列面向初学者的技术教程。 现如今,两年时间过去了,这些教程都更新了不少内容,另外还新增了人工智能…

百度离线资源治理

作者 | 百度MEG离线优化团队 导读 近些年移动互联网的高速发展驱动了数据爆发式的增长,各大公司之间都在通过竞争获得更大的增长空间,大数据计算的效果直接影响到公司的发展,而这背后其实依赖庞大的算力及数据作为支撑,因此在满足…

如何熟练的运用数学模型在水环境影响评价、防洪评价与排污口论证项目中的方法

数学模型在水环境评价、防洪评价和排污口论证等领域中的重要作用,随着人类活动的不断增加和环境问题的日益突出,对水资源和水环境的保护与管理变得至关重要。为了更好地理解和应对这些挑战,数学模型成为一种强大的工具,能够提供量…

使用HHDESK完成网站穿透

在工作和学习中,有很多内网网站,不能通过公网进行访问,需要特定的IP;而IP费用极高,比如按IP收费,费用根据流量带宽来,——这着实是一笔很大的开支。 而通过HHDESK,使用hhtp协议代理…

软考A计划-系统架构师-官方考试指定教程-(5/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

Win10安装Java 配置环境变量

文章目录 概要下载jdk安装jdk配置环境变量测试环境变量是否配置成功总结 概要 学习java开发首先需要安装jdk,并设置环境变量。 接下来就来介绍一下如何在 windows 10 系统中配置java环境变量 下载jdk https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe…

【手撕Spring源码】一些值得注意的Spring底层细节

文章目录 FactoryBeanIndexed 原理Spring代理的特点Value 装配底层Autowired 装配底层事件监听器模拟事件发布器 FactoryBean FactoryBean是一个Factory对象,用于生成其他bean示例。当一个bean实现FactoryBean接口后,Spring容器调用其getObject方法返回该工厂所生成的bean,而不…

elasticsearch 8.2.3 安装及springboot简单使用

一、下载安装 官网下载地址https://www.elastic.co/cn/downloads/elasticsearch 解压 elasticsearch-8.2.3-windows-x86_64 修改配置 elasticsearch-8.2.3\config\elasticsearch.yml # Elasticsearch Configuration # # NOTE: Elasticsearch comes with reasonable…

自学大语言模型之GPT

GPT火爆的发展史 2017年6月OpenAI联合DeepMind首次正式提出的:Deep Reinforcement Learning from Human Preferences,即基于人类偏好的深度强化学习,简称RLHF 2017年7月的OpenAI团队提出的对TRPO算法的改进:PPO算法 GPT-1&#…

【笔记】算法简单题

题解&#xff1a; import java.util.HashMap; import java.util.Map;public class Test {//暴力解决法public static int[] twoSum(int[] nums, int target) {for(int i0;i<nums.length;i){for(int ji1;j<nums.length;j){if(nums[i]nums[j]target){int[] indexs{0,0};i…

澳大利亚道路安全的AiRAP自动化审核(英)(附下载)

项目概况 该项目由新南威尔士州交通局&#xff08;TfNSW&#xff09;领导&#xff0c;悉尼科技大学&#xff0c;国际道路评估计划&#xff08;iRAP&#xff09;和澳大利亚地理空间数据专家Anditi的研究和协助。 该项目开展的工作是全球首创&#xff0c;其活动和成果是澳大利亚和…

15、库函数开发小结

目录 0x01、初始化 0x02、数据输入输出 0x03、状态位、标志位 0x0001、事件 0x0002、标志位的检查与清除 0x04、外设函数分类 本节我们来总结一下ST库开发的步骤和共同点&#xff0c;在总结之前&#xff0c;我们来看一下基本所有外设都有的以下几类寄存器&#xff1a; 1…