Python三维体素化网格和点云盘算

铁佛  金牌会员 | 2024-6-21 13:05:37 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 882|帖子 882|积分 2646

要点


  • Python三维点云自动生成 3D 网格和表面重建,创建多个细节层次
  • Python使用4种工具体素化网格,创建点云数据可视化
  • Python盘算RGB-D 图像的点云,点云地面检测算法,过滤点云以便下采样和去除非常值,scikit-learn聚类点云数据
  • Python点云和网格盘算更多示例:使用泊松盘采样在网格上生成蓝噪声样本,对体素网格上的点云进行下采样,从点云估计法线,盘算每个顶点的网格法线
三维点云

点云是三维坐标系中的一组数据点。 这些点在空间上由                                    X                         、                         Y                         、                         Z                              X、Y、Z                  X、Y、Z 坐标定义,通常体现对象的包络线。 实际捕捉装备获取三个维度的外表面以生成点云。 这些通常是通过摄影测量、LiDAR、深度传感以及近来通过生成对抗网络进行的深度学习获得的。
每种技术都有一些影响数据质量和完整性的特殊性,您已经可以看到完整 360° 捕获与传统航空 LiDAR 收罗之间的差异。
点云提供简朴而高效的 3D 数据体现,我在下面总结了它们的主要使用、优点和缺点。
主要使用


  • 变更:您可以将点列表中的点与线性变更矩阵相乘
  • 组合:可以通过将点列表归并在一起来组合“对象”
  • 渲染:将点投影并绘制到图像平面上
优点


  • 快速渲染
  • 精确体现
  • 快速变更
缺点


  • 众多点(目的曲线,精确体现)
  • 内存斲丧高
  • 有限的组合使用
虽然快速渲染和转换可以方便地直接查抄点云,但它们通常不会直接集成到常用的三维应用程序中。 然而,近来的发展表明,纵然在纯基于网格的渲染平台中,也有更好的支持的趋势,近来的例子是 Unreal 4 游戏引擎。
A.参阅:Python三维点云自动生成三维网格
三维模子

险些全部的 3D 模子都可以分为两类。


  • 实体:这些模子定义了它们所代表的对象的体积。实体模子主要用于工程和医学模仿,通常使用构造实体多少或体素组件构建。
  • 壳或边界:这些模子代表表面,即对象的边界,而不是其体积。实际捕捉工作流程、游戏和电影中使用的险些全部视觉模子都是边界体现。
实体和壳建模可以创建功能类似的对象。 它们之间的差异主要在于它们的创建和编辑方式的差异以及在各个领域的使用约定以及模子与实际之间的近似范例的差异。
三种主要策略答应通过 3D 模子描述点云。 构造实体多少、隐式曲面(参数化建模)和边界体现。 虽然构造实体多少非常有趣,但最常见的 3D 模子是边界体现。
B.参阅:Python体素化网格和点云
C.参阅:Python点云数据聚类处理
Python点云盘算示例

与直接针对网格执行深度学习相比,针对点云执行深度学习要轻易得多。 这是因为点云可以轻松编码到 (N,3) Numpy 数组中。 为了执行转换,我们下载一个 .obj 模子文件,将其读入 Python,并对其执行表面采样。 我们将使用 Lloyd 松懈算法,而不是使用表面的均匀采样(这大概会导致某些不利的影响),该算法的一个很好的实现封装为如下函数:
  1. def mesh_to_pc(input_files, output_folder, n_points):
  2.    
  3.     Args:
  4.         input_files (str): List of .obj file paths
  5.         output_folder (str): Folder path where the resulting .npy files should be stored
  6.         
  7.     Returns:
  8.         bool: True when file conversion is completed
  9.     counter = 0
  10.    
  11.     for file in tqdm.tqdm(input_files, total=len(input_files)):
  12.         # v is a nv by 3 NumPy array of vertices
  13.         # f is an nf by 3 NumPy array of face indexes into v
  14.         # n is a nv by 3 NumPy array of vertex normals
  15.         try:
  16.             v, f, n = pcu.read_obj(file)
  17.         except ValueError:
  18.             print("Could not read: " + str(file))
  19.             pass
  20.         pc = pcu.sample_mesh_lloyd(v, f, n_points)
  21.         output_file = output_folder + str(counter) + '.npy'
  22.         np.save(output_file, pc)
  23.         counter += 1
复制代码
针对上述中的 .obj 模子,运行此下令将生成 (n_points, 3) Numpy 数组,我们将以本机 .npy 格式保存该数组。
在我们完成全部所需的网格并将其转换为点云之后,我们可以使用 Matplotlib 将它们可视化:
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from mpl_toolkits.mplot3d import Axes3D
  4. input_pc = np.load(‘test.npy’)
  5. print(input_pc.shape)
  6. x,y,z = input_pc.T
  7. fig = plt.figure()
  8. ax = Axes3D(fig)
  9. ax.scatter(x,y,z)
复制代码
大概使用 PyVista,我们可以获得更好的可视化效果
  1. import numpy as np
  2. import pyvista as pv
  3. input_pc = np.load(‘test.npy’)
  4. print(input_pc.shape)
  5. cloud = pv.PolyData(input_pc)
  6. cloud.plot()
复制代码
D.参阅:更多Python盘算点云和网格示例
参阅 盘算头脑

参阅 亚图跨际


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

铁佛

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表