欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

open3d函数教程学习(持续更新)

程序员文章站 2023-09-17 23:56:14
Open3D:3D数据处理的现代库Open3D的核心功能包括:3D数据结构3D数据处理算法场景重建表面对齐3D可视化基于物理的渲染(PBR)在C ++和Python中可用导入open3d模块和打印出帮助信息。import open3d as o3dpcd = o3d.io.read_point_cloud("../../TestData/ICP/cloud_bin_0.pcd")print(pcd)geometry::PointCloud with 198835 points....

Open3D:3D数据处理的现代库

Open3D的核心功能包括:

3D数据结构
3D数据处理算法
场景重建
表面对齐
3D可视化
基于物理的渲染(PBR)
在C ++和Python中可用

导入open3d模块和打印出帮助信息。

import open3d as o3d
pcd = o3d.io.read_point_cloud("../../TestData/ICP/cloud_bin_0.pcd")
print(pcd)

geometry::PointCloud with 198835 points.


从open3d模块导入read_point_cloud函数。它读取一个点云文件,并返回PointCloud类的实例。 open3d.geometry.PointCloud
print(pcd)打印点云的简要信息。

open3d.open3d_pybind.io模块中内置函数read_point_cloud

从文件读取PointCloud的功能
read_point_cloud(filename, format=‘auto’, remove_nan_points=True, remove_infinite_points=True, print_progress=False)

参数:
     filename(str):文件路径。
     格式(str,可选,默认='auto'):输入文件的格式。 如果未指定或设置为``auto'',则从文件扩展名中推断格式。
     remove_nan_points(布尔型,可选,默认为True):如果为true,则从PointCloud中删除所有包含NaN的点。
     remove_infinite_points(布尔型,可选,默认为True):如果为true,则从PointCloud中删除所有包含无限值的点。
     print_progress(布尔型,可选,默认= False):如果设置为true,则在控制台中可视化进度条

read_point_cloud从文件读取点云。它尝试根据扩展名对文件进行解码。支持的扩展名是:pcd,ply,xyz,xyzrgb,xyzn,pts

Mesh

以下代码用于读取和写入网格

print("Testing IO for meshes ...")
mesh = o3d.io.read_triangle_mesh("../../TestData/knot.ply")
print(mesh)
o3d.io.write_triangle_mesh("copy_of_knot.ply", mesh)

Testing IO for meshes …
geometry::TriangleMesh with 1440 points and 2880 triangles.
True


与点云的数据结构相比,网格具有定义3D表面的三角形。

默认情况下,Open3D尝试通过文件扩展名来推断文件类型。 以下是受支持的三角形网格文件类型的列表。支持的扩展名:ply,stl,obj,off,gltf

Voxel downsampling

体素降采样使用常规的体素网格从输入点云创建统一降采样的点云。 它通常用作许多点云处理任务的预处理步骤。 就是将点云分块(这里为体素),然后逐块进行降采样(这里生成一个点),该算法分为两个步骤:

  • 点被存储到体素中。
  • 每个占用的体素通过平均内部的所有点来生成精确的一个点。
print("Downsample the point cloud with a voxel of 0.05")
downpcd = pcd.voxel_down_sample(voxel_size=0.05)
o3d.visualization.draw_geometries([downpcd], zoom=0.3412,
                                  front=[0.4257, -0.2125, -0.8795],
                                  lookat=[2.6172, 2.0475, 1.532],
                                  up=[-0.0694, -0.9768, 0.2024])

Downsample the point cloud with a voxel of 0.05
open3d函数教程学习(持续更新)
voxel_down_sample(self,voxel_size)
根据体素降采样从点云输入到点云输出。如果法线和颜色存在则将其平均

参数
voxel_size (float) – 要向下采样的体素大小

返回
open3d.geometry.PointCloud


voxel_down_sample_and_trace(self,voxel_size,min_bound,max_bound,approximate_class=False)

使用geometry.PointCloud.VoxelDownSample下采样的函数。 在下采样之前还记录点云索引

参数
voxel_size (float) – 向下采样的体素大小

min_bound (numpy.ndarray[float64[3, 1]]) – 体素边界的最小坐标

max_bound (numpy.ndarray[float64[3, 1]]) – 体素边界的最大坐标

approximate_class (bool, optional, default=False) – 近似类 可选,一般默认False

返回
Tuple[open3d.geometry.PointCloud, numpy.ndarray[int32[m, n]], 采样后的稀疏点云数据
List[open3d.utility.IntVector] 立方编号


open3d.utility.Vector3dVector

class open3d.utility.Vector3dVector

将形状(n,3)的float64 numpy数组转换为Open3D格式。

用法示例

import open3d
import numpy as np

pcd = open3d.geometry.PointCloud()
np_points = np.random.rand(100, 3)

# From numpy to Open3D
pcd.points = open3d.utility.Vector3dVector(np_points)

# From Open3D to numpy
np_points = np.asarray(pcd.points)

pcd.points = open3d.utility.Vector3dVector(np_points)
将形状(n,3)的float64 numpy数组转换为Open3D格式

np_points = np.asarray(pcd.points)
将Open3D格式转换为 numpy数组 (n,3)


get_min_bound(self)

返回几何坐标的最小范围

返回
numpy.ndarray [float64 [3,1]]

get_max_bound(self)

返回几何坐标的最大范围

返回
numpy.ndarray[float64[3, 1]]

用法示例

import open3d
min_bound = dense_pcd.get_min_bound() - voxel_size * 0.5  #获取最小点坐标 - 0.05 * 0.5
max_bound = dense_pcd.get_max_bound() + voxel_size * 0.5  

open3D_pointnet2_Semantic3d_master中利用体素进行数据降采样,首先取得体素边界的最大坐标和最小坐标。

本文地址:https://blog.csdn.net/CSDNcylinux/article/details/107339357