赞
踩
点云是三维坐标系中的一组数据点。 这些点在空间上由 X 、 Y 、 Z X、Y、Z X、Y、Z 坐标定义,通常表示对象的包络线。 现实捕捉设备获取三个维度的外表面以生成点云。 这些通常是通过摄影测量、LiDAR、深度传感以及最近通过生成对抗网络进行的深度学习获得的。
每种技术都有一些影响数据质量和完整性的特殊性,您已经可以看到完整 360° 捕获与传统航空 LiDAR 采集之间的差异。
点云提供简单而高效的 3D 数据表示,我在下面总结了它们的主要操作、优点和缺点。
主要操作
优点
缺点
虽然快速渲染和转换可以方便地直接检查点云,但它们通常不会直接集成到常用的三维应用程序中。 然而,最近的发展表明,即使在纯基于网格的渲染平台中,也有更好的支持的趋势,最近的例子是 Unreal 4 游戏引擎。
几乎所有的 3D 模型都可以分为两类。
实体和壳建模可以创建功能相同的对象。 它们之间的差异主要在于它们的创建和编辑方式的差异以及在各个领域的使用约定以及模型与现实之间的近似类型的差异。
三种主要策略允许通过 3D 模型描述点云。 构造实体几何、隐式曲面(参数化建模)和边界表示。 虽然构造实体几何非常有趣,但最常见的 3D 模型是边界表示。
与直接针对网格执行深度学习相比,针对点云执行深度学习要容易得多。 这是因为点云可以轻松编码到 (N,3) Numpy 数组中。 为了执行转换,我们下载一个 .obj 模型文件,将其读入 Python,并对其执行表面采样。 我们将使用 Lloyd 松弛算法,而不是使用表面的均匀采样(这可能会导致某些不利的影响),该算法的一个很好的实现封装为如下函数:
def mesh_to_pc(input_files, output_folder, n_points): Args: input_files (str): List of .obj file paths output_folder (str): Folder path where the resulting .npy files should be stored Returns: bool: True when file conversion is completed counter = 0 for file in tqdm.tqdm(input_files, total=len(input_files)): # v is a nv by 3 NumPy array of vertices # f is an nf by 3 NumPy array of face indexes into v # n is a nv by 3 NumPy array of vertex normals try: v, f, n = pcu.read_obj(file) except ValueError: print("Could not read: " + str(file)) pass pc = pcu.sample_mesh_lloyd(v, f, n_points) output_file = output_folder + str(counter) + '.npy' np.save(output_file, pc) counter += 1
针对上述中的 .obj 模型,运行此命令将生成 (n_points, 3) Numpy 数组,我们将以本机 .npy 格式保存该数组。
在我们完成所有所需的网格并将其转换为点云之后,我们可以使用 Matplotlib 将它们可视化:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
input_pc = np.load(‘test.npy’)
print(input_pc.shape)
x,y,z = input_pc.T
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x,y,z)
或者利用 PyVista,我们可以获得更好的可视化效果
import numpy as np
import pyvista as pv
input_pc = np.load(‘test.npy’)
print(input_pc.shape)
cloud = pv.PolyData(input_pc)
cloud.plot()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。