open3d之体素化Voxelization有关函数详情(笔记6)

点云和三角形网格是非常灵活但不规则的几何类型。体素网格是在常规 3D 网格上定义的另一种 3D 几何类型,而体素可以被认为是 2D 中像素的 3D 对应物。Open3D 具有可用于处理体素网格的几何类型 VoxelGrid

注:按照官方文档进行翻译,有空白的地方,是因为官方文档也没给出内容


从三角形网格(from triangle mesh)

Open3D 提供了方法 create_from_triangle_mesh 从三角形网格创建体素网格。它返回一个体素网格,其中与三角形相交的所有体素设置为 1,所有其他体素设置为 0。数voxel_size 定义体素网格的分辨率。

class open3d.data.BunnyMesh

介绍:

BunnyMesh 的数据类包含来自斯坦福 3D 扫描存储库的 BunnyMesh.ply。

方法:

__init__(self: open3d.data.BunnyMesh, data_root: str = '') → None

属性:

data_root获取数据根目录。数据根在构建时设置或自动确定

download_dir获取下载目录的绝对路径

extract_dir获取解压目录的绝对路径

pathBunnyMesh.ply 文件的路径

prefix获取数据集的前缀

  • open3d.geometry.VoxelGrid

create_from_triangle_mesh(inputvoxel_size)

函数功能:

从给定的 TriangleMesh 创建 VoxelGrid。不转换颜色信息。创建的 VoxelGrid 的边界是从 TriangleMesh 计算的

参数:

input (open3d.geometry.TriangleMesh)输入的三角网格

voxel_size (float)VoxelGrid 构造的体素大小

返回:

open3d.geometry.VoxelGrid


从点云(from point cloud)

体素网格也可以使用 create_from_point_cloud 方法从点云创建。如果点云的至少一个点在体素内,则占据一个体素。体素的颜色是体素内所有点的平均值。参数voxel_size 定义体素网格的分辨率。

class open3d.data.ArmadilloMesh

介绍:

ArmadilloMesh 的数据类包含来自 Stanford 3D Scanning Repository 的 ArmadilloMesh.ply

方法:

__init__(self: open3d.cpu.pybind.data.ArmadilloMesh, data_root: str = '') → None

属性:

data_root获取数据根目录。数据根在构建时设置或自动确定

download_dir获取下载目录的绝对路径

extract_dir获取解压目录的绝对路径

pathBunnyMesh.ply 文件的路径

prefix获取数据集的前缀

 

open3d.geometry.VoxelGrid

create_from_point_cloud(input, voxel_size)

函数功能:

从给定的 PointCloud 创建一个 VoxelGrid。给定体素的颜色值是落入其中的点的平均颜色值(如果点云有颜色)。创建的 VoxelGrid 的边界是从 PointCloud 计算的

参数:

input (open3d.geometry.PointCloud)输入的点云

voxel_size (float)VoxelGrid 构造的体素大小

返回:

open3d.geometry.VoxelGrid


包容性测试

体素网格也可用于测试点是否在占用的体素内。 check_if_included 方法将 (n,3) 数组作为输入并输出 bool 数组。

open3d.geometry.VoxelGrid

check_if_included(self, queries)

函数功能:

逐元素检查列表中的查询是否包含在 VoxelGrid 中。查询是双精度的,并映射到最近的体素

参数:

queries (open3d.utility.Vector3dVector)

返回:

List[bool]


体素雕刻

create_from_point_cloud 和 create_from_triangle_mesh 方法仅在几何体表面上创建占用体素。然而,可以从许多深度图或轮廓中雕刻出体素网格。Open3D 为体素雕刻提供了 carve_depth_mapcarve_silhouette 方法。

open3d.geometry.TriangleMesh

create_sphere(radius=1.0, resolution=20, create_uv_map=False)

函数功能:

用于创建以 (0, 0, 0) 为中心的球体网格的函数

参数:

radius (float, optional, default=1.0)球体的半径

resolution (int, optional, default=20)球体的分辨率。经度将被分成分辨率段(即有分辨率 + 1 条纬线,包括北极和南极)。纬度将被分成`2 * 分辨率段(即有 2 * 分辨率经度线。)

create_uv_map (bool, optional, default=False)将默认 uv 贴图添加到网格

返回:

open3d.geometry.TriangleMesh

 

open3d.geometry.VoxelGrid

create_dense(origin, color, voxel_size, width, height, depth)

函数功能:

创建一个体素网格,其中设置了每个体素(因此是密集的)。这是体素雕刻的有用起点

参数:

origin (numpy.ndarray[numpy.float64[3, 1]])VoxelGrid 的坐标中心

color (numpy.ndarray[numpy.float64[3, 1]])所有体素的体素颜色

voxel_size (float)VoxelGrid 构造的体素大小

width (float)VoxelGrid 的空间宽度扩展

height (float)VoxelGrid 的空间高度扩展

depth (float)VoxelGrid 的空间深度扩展

返回:

open3d.geometry.VoxelGrid

 

open3d.visualization.Visualizer

create_window(self, window_name='Open3D', width=1920, height=1080, 

left=50, top=50, visible=True)

函数功能:

创建窗口并初始化 GLFW 的函数

参数:

window_name (str, optional, default='Open3D')窗口标题名称

width (int, optional, default=1920)窗口的宽度

height (int, optional, default=1080)窗口的高度

left (int, optional, default=50)窗口到屏幕的左边距

top (int, optional, default=50)窗口到屏幕的上边距

visible (bool, optional, default=True)窗口是否可见

返回:

bool

 

open3d.visualization.Visualizer

add_geometry(self, geometry, reset_bounding_box=True)

函数功能:

将几何图形添加到场景并创建相应着色器的功能

参数:

geometry (open3d.geometry.Geometry)geometry对象

reset_bounding_box (bool, optional, default=True)设置为 False 以保持当前视点

返回:

bool

 

open3d.visualization.Visualizer

get_render_option(self)

函数功能:

检索关联的 RenderOption 的函数

参数:

返回:

open3d.visualization.RenderOption

 

open3d.visualization.Visualizer

get_view_control(self)

函数功能:

检索关联的 ViewControl 的函数

参数:

返回:

open3d.visualization.ViewControl

 

open3d.visualization.ViewControl

convert_to_pinhole_camera_parameters(self)

函数功能:

将 ViewControl 转换为 camera.PinholeCameraParameters 的函数

参数:

返回:

open3d.camera.PinholeCameraParameters

 

open3d.visualization.ViewControl

convert_from_pinhole_camera_parameters(self, parameter, allow_arbitrary=False)

函数功能:

参数:

parameter (open3d.camera.PinholeCameraParameters)要转换的针孔相机参数

allow_arbitrary (bool, optional, default=False)(允许独断)

返回:

bool

 

open3d.visualization.Visualizer

poll_events(self)

函数功能:

轮询事件的函数

参数:

返回:

bool

 

open3d.visualization.Visualizer

update_renderer(self)

函数功能:

通知渲染需要更新的功能

参数:

返回:

None

 

open3d.visualization.Visualizer

capture_depth_float_buffer(self, do_render=False)

函数功能:

在浮点缓冲区中捕获深度的函数

参数:

do_render (bool, optional, default=False)设置为 True 进行渲染

返回:

open3d.geometry.Image

 

open3d.geometry.PointCloud

create_from_depth_image(depth,intrinsic,

extrinsic=(with defaul tvalue), depth_scale=1000.0, depth_trunc=1000.0, stride=1, 

project_valid_depth_only=True)

函数功能:

从深度图像和相机创建点云的工厂函数。给定 (u, v) 图像坐标处的深度值 d,对应的 3d 点为:

z = d / depth_scale

x = (u - cx) * z / fx

y = (v - cy) * z / fy

参数:

depth (open3d.geometry.Image)输入深度图像可以是浮点图像,也可以是 uint16_t 图像。

intrinsic (open3d.camera.PinholeCameraIntrinsic)相机的内在参数

extrinsic (numpy.ndarray[numpy.float64[4, 4]], optional)数组 ([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0 ., 0., 1.]])

depth_scale (float, optional, default=1000.0)深度按 1 / depth_scale 缩放

depth_trunc (float, optional, default=1000.0)在 depth_trunc 距离处截断

stride (int, optional, default=1)支持粗略点云提取的采样因子

project_valid_depth_only (bool, optional, default=True)

返回:

open3d.geometry.PointCloud

 

open3d.geometry.VoxelGrid

carve_depth_map(self, depth_map, camera_params, keep_voxels_outside_image=False)

函数功能:

从体素网格中删除所有体素,其中体素的边界点均未投影到小于或等于边界点投影深度的深度值。如果 keep_voxels_outside_image 为真,则仅当所有边界点都投影到有效图像位置时才雕刻体素

参数:

depth_map (open3d.geometry.Image)用于 VoxelGrid 雕刻的深度图(图像)

camera_params (open3d.camera.PinholeCameraParameters)

keep_voxels_outside_image (bool, optional, default=False)保留不投影到图像中像素的体素

返回:

open3d.geometry.VoxelGrid

 

open3d.geometry.VoxelGrid

carve_silhouette(selfsilhouette_maskcamera_paramskeep_voxels_outside_image=False)

函数功能:

从 VoxelGrid 中删除所有体素,其中没有体素的边界点投影到有效的掩码像素(像素值 > 0)。如果 keep_voxels_outside_image 为真,则仅当所有边界点都投影到有效图像位置时才雕刻体素

参数:

silhouette_mask (open3d.geometry.Image)用于 VoxelGrid 雕刻的剪影轮廓(图像)

camera_params (open3d.camera.PinholeCameraParameters)

keep_voxels_outside_image (bool, optional, default=False)保留不投影到图像中像素的体素

返回:

open3d.geometry.VoxelGrid

 

open3d.visualization.Visualizer

destroy_window(self)

函数功能:

销毁窗口的函数。这个函数必须从主线程调用

参数:

返回:

None

 

open3d.geometry.VoxelGrid

create_from_point_cloud_within_bounds(inputvoxel_sizemin_boundmax_bound)

函数功能:

从给定的 PointCloud 创建一个 VoxelGrid。给定体素的颜色值是落入其中的点的平均颜色值(如果点云有颜色)。创建的 VoxelGrid 的边界由给定的参数定义

参数:

input (open3d.geometry.PointCloud)输入的点云

voxel_size (float)VoxelGrid 构造的体素大小

min_bound (numpy.ndarray[numpy.float64[3, 1]])VoxelGrid 要创建的最小边界点

max_bound (numpy.ndarray[numpy.float64[3, 1]])VoxelGrid 要创建的最大边界点

返回:

open3d.geometry.VoxelGrid

 

open3d.geometry.VoxelGrid

create_from_triangle_mesh_within_bounds(inputvoxel_sizemin_boundmax_bound)

函数功能:

从给定的 TriangleMesh 创建 VoxelGrid。不转换颜色信息。创建的 VoxelGrid 的边界由给定的参数定义

参数:

input (open3d.geometry.TriangleMesh)输入的三角网格

voxel_size (float)VoxelGrid 构造的体素大小

min_bound (numpy.ndarray[numpy.float64[3, 1]])VoxelGrid 要创建的最小边界点

max_bound (numpy.ndarray[numpy.float64[3, 1]])VoxelGrid 要创建的最大边界点

返回:

open3d.geometry.VoxelGrid

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你已经将点云的三维坐标值存放在一个三维数组中,你可以使用Open3D库的`create_from_voxel_grid`函数将这个数组转换为体素网格对象。以下是一个示例代码: ```python import open3d as o3d import numpy as np def voxelization(points, voxel_size): # 创建体素网格对象 voxel_grid = o3d.geometry.VoxelGrid() # 设置体素网格的分辨率 voxel_grid.voxel_size = voxel_size # 将点云坐标转换为Open3D的Pointcloud对象 point_cloud = o3d.geometry.PointCloud() point_cloud.points = o3d.utility.Vector3dVector(points) # 根据点云创建体素网格 voxel_grid.create_from_point_cloud(point_cloud) return voxel_grid # 示例用法 points = np.random.rand(100, 3) # 假设点云三维坐标值存放在一个100x3的数组中 voxel_size = 0.1 # 体素的大小 # 进行体素 voxel_grid = voxelization(points, voxel_size) # 打印体素网格的信息 print("Voxel Grid Size:", voxel_grid.get_voxels().shape[0]) print(voxel_grid.get_voxels()) # 可视体素网格 o3d.visualization.draw_geometries([voxel_grid]) ``` 在这个示例代码中,我们首先创建一个空的体素网格对象`voxel_grid`,然后设置体素网格的分辨率。接着,将点云坐标存放在一个`numpy`数组`points`中,并将其转换为Open3D库的`PointCloud`对象。最后,使用`create_from_point_cloud`函数根据点云创建体素网格。 你可以通过`get_voxels`方法获取体素网格的信息,比如体素的数量和位置。同时,你也可以使用Open3D库提供的可视方法来展示体素网格的结果。 请确保你已经安装了Open3D库,可以使用以下命令进行安装: ``` pip install open3d ``` 需要注意的是,如果你的点云数据非常大,体素过程可能会消耗大量的内存。在这种情况下,你可能需要对点云进行分块处理,以便逐块进行体素操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值