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

您所在的位置:网站首页 open3D简介 open3d函数教程学习(持续更新)

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

2024-03-16 23:18| 来源: 网络整理| 查看: 265

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 在这里插入图片描述

voxel_down_sample

voxel_down_sample(self,voxel_size) 根据体素降采样从点云输入到点云输出。如果法线和颜色存在则将其平均

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

返回 open3d.geometry.PointCloud

voxel_down_sample_and_trace

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中利用体素进行数据降采样,首先取得体素边界的最大坐标和最小坐标。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3