Open3D 点云的圆柱形邻域搜索
目录
一、概述
1.1原理
1.2应用
二、代码实现
2.1完整代码
2.2程序说明
三、实现效果
3.1原始点云
3.2搜索后点云
一、概述
1.1原理
圆柱邻域搜索的基本思想是确定点云中的哪些点位于给定圆柱的内部。一个圆柱可以由以下几个参数定义:
- 中心点:圆柱底面的中心。
- 轴向量:圆柱的中心轴方向。
- 半径:圆柱的半径。
- 高度:圆柱的高度。
计算步骤:
1.2应用
圆柱邻域搜索是一种几何查询方法,用于在点云数据中查找与给定圆柱相交的点。该方法广泛应用于以下领域:
- 三维形状分析:用于识别和分析点云数据中的圆柱形状特征,如管道、圆柱形建筑结构等。
- 机器人导航:帮助机器人理解其周围环境的几何结构,以便在复杂的三维空间中导航。
- 工业检测:用于检测和测量工业环境中的圆柱形物体,如管道的直径、表面缺陷等。
- 计算机视觉:在3D重建和场景理解中,圆柱邻域搜索可以帮助识别和分割特定的几何形状。
二、代码实现
2.1完整代码
import open3d as o3d
import numpy as np
import matplotlib.pyplot as pltdef cylinder_neighborhood_search(pcd, center, axis, radius, height):"""计算点云中位于指定圆柱形领域内的点。参数:- pcd: open3d.geometry.PointCloud 对象- center: 圆柱中心点(numpy数组)- axis: 圆柱轴向量(numpy数组)- radius: 圆柱半径- height: 圆柱高度返回:- cylinder_points: 位于圆柱形领域内的点的索引"""points = np.asarray(pcd.points)axis = axis / np.linalg.norm(axis) # 规范化轴向量# 计算每个点到圆柱轴的距离vec = points - centerproj_len = np.dot(vec, axis)proj_points = center + np.outer(proj_len, axis)dist_to_axis = np.linalg.norm(points - proj_points, axis=1)# 计算每个点沿轴向的投影长度height_projection = np.dot(vec, axis)# 选择符合条件的点mask = (dist_to_axis <= radius) & (height_projection >= 0) & (height_projection <= height)cylinder_points = np.where(mask)[0]return cylinder_points# 读取点云数据
pcd = o3d.io.read_point_cloud("happy buddha.pcd")# 随机选择一个点作为圆柱中心点
points = np.asarray(pcd.points)
# random_index = np.random.randint(0, len(points))
center = points[1]
#
# 定义圆柱形领域的参数
axis = np.array([0, 1, 0]) # 圆柱轴向量
radius = 0.02 # 圆柱半径
height = 1000 # 圆柱高度# 获取圆柱形领域内的点
cylinder_indices = cylinder_neighborhood_search(pcd, center, axis, radius, height)# 提取圆柱形领域内的点云
cylinder_pcd = pcd.select_by_index(cylinder_indices)# 设置颜色用于区分原始点云和圆柱形领域点云
colors = np.zeros((len(pcd.points), 3))
colors[:, 0] = 1 # 原始点云颜色设为红色
colors[cylinder_indices, :] = [0, 1, 0] # 圆柱形领域点云颜色设为绿色# 应用颜色到原始点云
pcd.colors = o3d.utility.Vector3dVector(colors)# 可视化原始点云和圆柱形领域点云
o3d.visualization.draw_geometries([pcd, cylinder_pcd])
2.2程序说明
- 圆柱形邻域搜索函数:cylinder_neighborhood_search函数接收点云、圆柱的中心、轴向量、半径和高度作为参数。通过计算每个点到圆柱轴的距离和点在轴向上的投影长度来判断点是否在圆柱形领域内。
- 读取点云数据:使用o3d.io.read_point_cloud函数读取点云数据。
- 定义圆柱形领域的参数:圆柱的中心、轴向量、半径和高度。
- 获取圆柱形领域内的点:使用自定义的圆柱形邻域搜索函数获取圆柱形领域内的点索引。
- 提取圆柱形领域内的点云:使用select_by_index函数提取圆柱形领域内的点云。
- 设置颜色用于区分原始点云和圆柱形领域点云:原始点云设置为红色,圆柱形领域内的点云设置为绿色。
- 可视化:使用o3d.visualization.draw_geometries函数同时可视化原始点云和圆柱形领域点云。
三、实现效果
3.1原始点云
3.2搜索后点云
相关文章:

Open3D 点云的圆柱形邻域搜索
目录 一、概述 1.1原理 1.2应用 二、代码实现 2.1完整代码 2.2程序说明 三、实现效果 3.1原始点云 3.2搜索后点云 一、概述 1.1原理 圆柱邻域搜索的基本思想是确定点云中的哪些点位于给定圆柱的内部。一个圆柱可以由以下几个参数定义: 中心点:…...

python如何设计窗口
PyQt是一个基于Qt的接口包,可以直接拖拽控件设计UI界面,下面我简单介绍一下这个包的安装和使用,感兴趣的朋友可以自己尝试一下: 1、首先,安装PyQt模块,这个直接在cmd窗口输入命令“pip install pyqt5”就行…...
C语言获取当前时间
一共有两段代码,一个是获取当前时间,一个是获取到现在的总毫秒数 求关注😄 互粉必回 获取当前时间 #include <stdio.h> #include <time.h> int main() { time_t rawtime; struct tm * timeinfo; char buffer[20]; // 获取当前…...

【每日一练】python三目运算符的用法
""" 三目运算符与基础运算的对比 """ a 1 b 2#1.基础if运算判断写法: if a > b:print("基础判断输出:a大于b") else:print("基础判断输出: a不大于b")#2.三目运算法判断:…...

CentOS 7.9 停止维护(2024-6-30)后可用在线yum源 —— 筑梦之路
众所周知,centos 7 在2024年6月30日,生命周期结束,官方不再进行支持维护,而很多环境一时之间无法完全更新替换操作系统,因此对于yum源还是需要的,特别是对于互联网环境来说,在线yum源使用方便很…...
Git 常用命令备忘
1、删除 (1)、git push origin --delete dev 删除远程分支 (2)、git branch -d dev 删除本地分支 git branch -D dev 强制删除本地分支 2、创建分支 (1)、git checkout -b dev 创建本地分支 (2)、git push origin dev 创建远程分支,此时本地分支与远程…...
Ubuntu24.04安装Skynet环境
安装依赖 sudo apt-get -y install gcc sudo apt-get -y install g sudo apt-get -y install make sudo apt-get install -y autoconf automake libtool sudo apt-get install -y git 或者可以用: sudo apt-get -y install gcc g make autoconf automake libtool…...

【C++】cout.self()函数
📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文作为 JohnKi 学习笔记,借鉴了部分大佬案例 📢未来很长&#…...
VueQuill 富文本编辑器技术文档快速上手
VueQuill 富文本编辑器技术文档 1. 安装 VueQuill2. 配置 VueQuill3. 在组件中使用 VueQuill4. 配置选项5. 事件处理6. 数据格式7. 自定义工具栏8. 示例项目结构9. 常见问题如何添加图片上传功能?如何自定义编辑器主题? 在此之前,我讲解过关于…...

链式二叉树oj题
1.输入k ,找第k层节点个数 int TreeKlevel(BTNode*root,int k) {if (root NULL) {return 0;}if (k 1) {return 1;}return TreeKlevel(root->left, k - 1)TreeKlevel(root->right, k - 1); } 在这里我们要确定递归子问题,第一个就是NULL时返回&…...
Curator 是一个开源工具为 Elasticsearch 集群设计,用于自动化索引的维护任务。
Elasticsearch 使用 Curator 进行索引生命周期管理是一种常见的做法,Curator 是一个开源的 Python 工具,专为 Elasticsearch 集群设计,用于自动化索引的维护任务。以下是使用 Curator 进行索引生命周期管理的一些关键步骤和概念: …...

STM32-PWR和WDG看门狗
本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. PWR1.1 PWR简介1.2 电源框图1.3 上电复位和掉电复位1.4 可编程电压监测器1.5 低功耗模式1.6 模式选择1.7 睡眠模式1.8 停止模式1.9 待机模式1.10 库函数 2. WDG看门狗2.1 WDG简介2.2 IWDG框图2.3 IWDG键寄存器2.4 …...
C++循环队列 经典示例
循环队列(Circular Queue),又称环形缓冲区,是一种常用的数据结构,特别适用于资源有限的场合,比如操作系统中的任务调度、网络数据缓冲等。循环队列在数组的基础上实现,逻辑上首尾相连࿰…...
【程序大侠传】大表分库分表切换数据库类型导致pagehelper生成sql语法报错
前序 代码剑宗等级分明,其门下弟子等级划分如下: 入门弟子 刚刚拜入代码剑宗,学习基础编程语言和基本剑法(语法和基础概念)。他们的代码还显得生涩,但已经开始展现出对优雅代码的追求。 江湖小虾 初步掌握…...
7、Redis 队列与 Stream
引言 Redis 自 5.0 版本起引入了一种新的数据结构——Stream。这种数据结构不仅增加了 Redis 的数据处理能力,还使其在消息队列和数据流处理方面更具竞争力。Stream 提供了持久化、多播、消费组等功能,可以满足多种复杂的数据处理需求。 1. Redis Stre…...
FFT剖析
快速傅里叶变换 (fast Fourier transform) xn{x0,x1,…xn-1} (num:N) 旋转因子系数: d2pik/N 旋转因子 wk(n)(cos(dn)isin(dn)) n[0,N-1] y(k) sum(x(n)wk(n),0,N-1) y(k){y(0),y(1),…y(N-1)} 傅里叶级数 x(n)wk(n)的级数是: 1.d2pik/N 这个系数决…...
git clone报错RPC failed; curl 92 HTTP/2 stream 7 was not closed cleanly
问题描述 git clone github上的项目报错: RPC failed; curl 92 HTTP/2 stream 7 was not closed cleanly: CANCEL (err 8) 4796 bytes of body are still expected fetch-pack: unexpected disconnect while reading sideband packet early EOF fetch-pack: invalid index-pac…...

Apispec,一个用于生成 OpenAPI(Swagger)规范的 Python 库
目录 01什么是 Apispec? 为什么选择 Apispec? 安装与配置 02Apispec 的基本用法 生成简单的 API 文档 1、创建 Apispec 实例 2、定义 API 路由和视图 3、添加路径到 Apispec 集成 Flask 和 Apispec 1、安装…...
SpringBoot 自定义异常返回数据格式
Spring Boot 默认异常处理 当我们用 spring boot 开发接口是,当遇到异常时返回的数据格式是如下形式的 {"timestamp": "2024-07-06T02:48:55.79100:00","status": 404,"error": "Not Found","path":…...

【xinference】(15):在compshare上,使用docker-compose运行xinference和chatgpt-web项目,配置成功!!!
视频演示 【xinference】(15):在compshare上,使用docker-compose运行xinference和chatgpt-web项目,配置成功!!! 1,安装docker方法: #!/bin/shdistribution$(…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...