Open3D通过索引提取点云

目录

一、概述

二、代码实现

2.1关键函数

[2.2 完整代码](#2.2 完整代码)

三、实现效果

3.1原始点云

3.2提取后点云


一、概述

在 Open3D 中,通过索引提取点云是一种常见且有效的操作,特别适用于需要处理点云子集的场景,例如提取特定区域的点、降采样、或者进行其他的后续处理。Open3D 提供了 select_by_index 方法来根据索引提取点云的子集。这个方法可以接受一个整数索引的列表,根据列表中的索引值提取对应的点云部分。

二、代码实现

2.1关键函数

Open3D中的select_by_index()使用二进制掩码只输出选定的点或非选定的点。

  • inlier_cloud = cloud.select_by_index(m_ind)提取索引对应的点;
  • outlier_cloud = cloud.select_by_index(m_ind, invert=True)提取索引之外的点。
python 复制代码
def select_by_index(self, indices, invert=False): # real signature unknown; restored from __doc__
        """
        select_by_index(self, indices, invert=False)
        
        Function to select points from input pointcloud into output pointcloud.
        
        Args:
            indices (List[int]): Indices of points to be selected.
            invert (bool, optional, default=False): Set to ``True`` to invert the selection of indices.
        
        Returns:
            open3d.cpu.pybind.geometry.PointCloud
        """

注意事项

  • 索引范围:确保索引列表中的值在点云中存在对应的点。否则,会导致错误或空的子集。
  • 灵活性:可以根据需要生成任意数量和类型的索引,例如提取连续的点、随机选择的点或者基于特定条件的点。

2.2 完整代码

python 复制代码
import open3d as o3d
import numpy as np

# 加载点云数据
pcd = o3d.io.read_point_cloud("bunny.pcd")

# 可视化原始点云
o3d.visualization.draw_geometries([pcd], window_name='Original Point Cloud')

# 生成前1000个点的索引
num_points = 1000
indices_first_1000 = list(range(num_points))

# 使用索引提取点云子集
subset_pcd_first_1000 = pcd.select_by_index(indices_first_1000)

# 可视化提取的前1000个点
o3d.visualization.draw_geometries([subset_pcd_first_1000], window_name='First 1000 Points')

# 获取点云中的所有点数
total_points = len(pcd.points)

# 随机选择1000个点的索引
indices_random_1000 = np.random.choice(total_points, num_points, replace=False)

# 使用索引提取点云子集
subset_pcd_random_1000 = pcd.select_by_index(indices_random_1000)

# 可视化提取的随机1000个点
o3d.visualization.draw_geometries([subset_pcd_random_1000], window_name='Random 1000 Points')

三、实现效果

3.1原始点云

3.2提取后点云

前1000个点

随机提取的1000个点

相关推荐
老赵聊算法、大模型备案2 小时前
北京市生成式人工智能服务已备案信息公告(2025年12月11日)
人工智能·算法·安全·aigc
workflower2 小时前
时序数据获取事件
开发语言·人工智能·python·深度学习·机器学习·结对编程
CoderYanger3 小时前
C.滑动窗口-求子数组个数-越长越合法——2799. 统计完全子数组的数目
java·c语言·开发语言·数据结构·算法·leetcode·职场和发展
C++业余爱好者3 小时前
Java 提供了8种基本数据类型及封装类型介绍
java·开发语言·python
厕所博士3 小时前
红黑树原理前置理解—— 2-3 树
算法·2-3树·红黑树原理理解前置
萌>__<新4 小时前
力扣打卡每日一题————除自身外所有元素的乘积
数据结构·算法
AI Echoes4 小时前
构建一个LangChain RAG应用
数据库·python·langchain·prompt·agent
xu_yule4 小时前
算法基础—搜索(2)【记忆化搜索+BFS+01BFS+Floodfill]
数据结构·算法
s09071365 小时前
Xilinx FPGA使用 FIR IP 核做匹配滤波时如何减少DSP使用量
算法·fpga开发·xilinx·ip core·fir滤波
老马啸西风5 小时前
成熟企业级技术平台-10-跳板机 / 堡垒机(Bastion Host)详解
人工智能·深度学习·算法·职场和发展