三维重建概述

系列文章目录


什么是三维重建

1.概念

用相机拍摄真实世界的物体、场景,并通过计算机视觉技术进行处理,从而得到物体的三维模型。英文术语:3D Reconstruction。

2.涉及到的技术

涉及的主要技术有:多视图立体几何、深度图估计、点云处理、网格重建和优化、纹理贴图、马尔科夫随机场、图割等。
基本上计算机视觉的技术都会有涉及。 2D的分割,分类在3D中也会用到

3.应用场景

比如:增强现实(AR)、混合现实(MR)、机器人导航、自动驾驶等领域的核心技术之一。

三维重建能做什么?

影像娱乐

在这里插入图片描述

智能家居

在这里插入图片描述

文物重建、AR旅游

在这里插入图片描述

自动驾驶

在自动驾驶领域的主要应用是高精地图的构建,此应用对于自动驾驶的算法迭代优化、测试都非常重要。
在这里插入图片描述

大型场景的构建

在这里插入图片描述

逆向工程

在这里插入图片描述

机器人 导航

在这里插入图片描述

三维重建从算法角度看有哪些方向

在这里插入图片描述

MVS是什么

Multi-View Stereo,用RGB信息重建三维几何模型。
在这里插入图片描述

输入:就是一系列的RGB照片,这些照片可能存在一些重合势场。将他们的pose计算出来,然后进行一个三维模型的重建,最后进行纹理贴图(非必要)。

三维重建的流程

在这里插入图片描述

  1. 输入是images和pose,其中pose是通过SFM(Structure-fromMotion )/Slam(Simultaneous Localization and Mapping ) 来做的
  2. 通过上述两种为输入信息,我们可以计算出深度图
  3. 得到深度图后,我们再进行点云融合
  4. 得到3D点云图后,我们对他进行一个3D曲面的构建

在这里插入图片描述

  1. 再进行网格优化
  2. 最后进行纹理贴图

位姿计算和3D重建

位姿计算

位姿计算可以简单理解为:每帧图像的相对位置

  • SLAM:可以实时去做
  • SFM:用于离线(COLMAP)
    -

3D重建

根据SFM/SLAM计算的位姿,进行稠密重建恢复场景几何信息。
在这里插入图片描述

为什么要应用基于深度学习的3D重建

首先我们来探讨一下传统的基于光度一致性的MVS重建

  • 优点
    • 精度高
    • 对硬件要求低
    • 测量范围大
  • 局限性
    • 无纹理(白墙)
    • 透明/反光(玻璃)
    • 重复纹理(铁栅栏)

基于深度学习的MVS

通过大量的数据去学习特征,它会参考全局语义的信息,能更好的帮助我们进行重建。
在这里插入图片描述

  • 优点
    • 基于学习的特征 → \rightarrow 匹配更鲁棒
    • 基于shape先验 → \rightarrow 重建更完整
  • 局限性
    • 内存限制,难以重建高分辨率
    • 依赖大数据

基本概念的介绍

深度图(depth)/视差图(disparity)

深度图:图像中每个点到相机的距离
视差图:同一场景在两个相机下成像的像素的位置偏差dis
二者的关系: d e p t h = b f d i s depth = \frac{bf}{dis} depth=disbf
是一种三维信息的表示方式
在这里插入图片描述

三维点云(point cloud)

三维点云是某个坐标系下的点的数据集
包含了丰富的信息,包括三维坐标XYZ,颜色RGB等信息

三维重建效果图

三维网格(mesh)

由物体的邻接点云构成的多边形组成的,通常由三角形、四边形或其他的简单凸多边形组成
在这里插入图片描述

纹理贴图模型(texture mesh)

带有颜色信息的三维网格模型,所有的颜色信息储存在一张纹理图上,显示时根据每个网格的纹理坐标和对应的纹理图进行渲染得到高分辨率的彩色模型

在这里插入图片描述

常见的三维数据格式

  • 支持的常见三维数据格式:obj,ply,stl(用于3D打印)
    在这里插入图片描述
    Obj中标志位:
    v :几何体顶点(Geometric vertices)
    vt :贴图坐标点(Texture vertices)
    vn :顶点法线(Vertex normal)
    f : 面 (Face)
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,让我来解答您关于如何使用Open3D进行场景重建的问题。 Open3D是一个开源的计算机视觉库,可以用于三维数据处理和可视化。要使用Open3D进行场景重建,您需要遵循以下步骤: 1. 导入必要的库和模块: ```python import open3d as o3d ``` 2. 加载点云数据: ```python point_cloud = o3d.io.read_point_cloud("path/to/point_cloud_file.pcd") ``` 您可以根据实际情况更改文件路径。 3. 可选:进行点云预处理(例如滤波、下采样等): ```python # 点云滤波 filtered_cloud = point_cloud.filter_statistical_outlier(nb_neighbors=20, std_ratio=2.0) # 点云下采样 downsampled_cloud = filtered_cloud.voxel_down_sample(voxel_size=0.05) ``` 这些预处理步骤可以根据您的数据集和需求进行调整。 4. 创建几何图形(Mesh): ```python mesh, densities = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(downsampled_cloud, depth=9) ``` 在这里,我们使用了Poisson重建算法来创建一个表面网格(mesh)。您可以根据需要选择不同的算法。 5. 可选:对几何图形进行平滑处理: ```python mesh = mesh.filter_smooth_taubin(number_of_iterations=5) ``` 这将对网格进行平滑处理,以提高重建质量。 6. 可选:对几何图形进行纹理映射: ```python # 加载纹理图像 texture = o3d.io.read_image("path/to/texture_image.jpg") # 创建纹理坐标 mesh.compute_vertex_normals() mesh.compute_triangle_normals() mesh.paint_uniform_color([0.5, 0.5, 0.5]) # 将网格颜色初始化为灰色 o3d.visualization.draw_geometries_with_texture([mesh], [texture]) ``` 这将为几何图形添加纹理映射,使其更逼真。 7. 可选:保存重建结果: ```python o3d.io.write_triangle_mesh("path/to/reconstructed_mesh.obj", mesh) ``` 您可以选择不同的文件格式来保存重建结果。 这些是使用Open3D进行场景重建的基本步骤。您可以根据您的需求和数据集的特点进行调整和优化。希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值