当前位置: 首页 > news >正文

Open3D 点云的圆柱形邻域搜索

目录

一、概述

1.1原理

1.2应用

二、代码实现

2.1完整代码

2.2程序说明

三、实现效果

3.1原始点云

3.2搜索后点云


一、概述

1.1原理

        圆柱邻域搜索的基本思想是确定点云中的哪些点位于给定圆柱的内部。一个圆柱可以由以下几个参数定义:

  • 中心点:圆柱底面的中心。
  • 轴向量:圆柱的中心轴方向。
  • 半径:圆柱的半径。
  • 高度:圆柱的高度。

计算步骤:

1.2应用

        圆柱邻域搜索是一种几何查询方法,用于在点云数据中查找与给定圆柱相交的点。该方法广泛应用于以下领域:

  1. 三维形状分析:用于识别和分析点云数据中的圆柱形状特征,如管道、圆柱形建筑结构等。
  2. 机器人导航:帮助机器人理解其周围环境的几何结构,以便在复杂的三维空间中导航。
  3. 工业检测:用于检测和测量工业环境中的圆柱形物体,如管道的直径、表面缺陷等。
  4. 计算机视觉:在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程序说明

  1. 圆柱形邻域搜索函数:cylinder_neighborhood_search函数接收点云、圆柱的中心、轴向量、半径和高度作为参数。通过计算每个点到圆柱轴的距离和点在轴向上的投影长度来判断点是否在圆柱形领域内。
  2. 读取点云数据:使用o3d.io.read_point_cloud函数读取点云数据。
  3. 定义圆柱形领域的参数:圆柱的中心、轴向量、半径和高度。
  4. 获取圆柱形领域内的点:使用自定义的圆柱形邻域搜索函数获取圆柱形领域内的点索引。
  5. 提取圆柱形领域内的点云:使用select_by_index函数提取圆柱形领域内的点云。
  6. 设置颜色用于区分原始点云和圆柱形领域点云:原始点云设置为红色,圆柱形领域内的点云设置为绿色。
  7. 可视化:使用o3d.visualization.draw_geometries函数同时可视化原始点云和圆柱形领域点云。

三、实现效果

3.1原始点云

3.2搜索后点云

相关文章:

Open3D 点云的圆柱形邻域搜索

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

python如何设计窗口

PyQt是一个基于Qt的接口包&#xff0c;可以直接拖拽控件设计UI界面&#xff0c;下面我简单介绍一下这个包的安装和使用&#xff0c;感兴趣的朋友可以自己尝试一下&#xff1a; 1、首先&#xff0c;安装PyQt模块&#xff0c;这个直接在cmd窗口输入命令“pip install pyqt5”就行…...

C语言获取当前时间

一共有两段代码&#xff0c;一个是获取当前时间&#xff0c;一个是获取到现在的总毫秒数 求关注&#x1f604; 互粉必回 获取当前时间 #include <stdio.h> #include <time.h> int main() { time_t rawtime; struct tm * timeinfo; char buffer[20]; // 获取当前…...

【每日一练】python三目运算符的用法

""" 三目运算符与基础运算的对比 """ a 1 b 2#1.基础if运算判断写法&#xff1a; if a > b:print("基础判断输出&#xff1a;a大于b") else:print("基础判断输出&#xff1a; a不大于b")#2.三目运算法判断&#xff1a;…...

CentOS 7.9 停止维护(2024-6-30)后可用在线yum源 —— 筑梦之路

众所周知&#xff0c;centos 7 在2024年6月30日&#xff0c;生命周期结束&#xff0c;官方不再进行支持维护&#xff0c;而很多环境一时之间无法完全更新替换操作系统&#xff0c;因此对于yum源还是需要的&#xff0c;特别是对于互联网环境来说&#xff0c;在线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 创建远程分支&#xff0c;此时本地分支与远程…...

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 或者可以用&#xff1a; sudo apt-get -y install gcc g make autoconf automake libtool…...

【C++】cout.self()函数

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文作为 JohnKi 学习笔记&#xff0c;借鉴了部分大佬案例 &#x1f4e2;未来很长&#…...

VueQuill 富文本编辑器技术文档快速上手

VueQuill 富文本编辑器技术文档 1. 安装 VueQuill2. 配置 VueQuill3. 在组件中使用 VueQuill4. 配置选项5. 事件处理6. 数据格式7. 自定义工具栏8. 示例项目结构9. 常见问题如何添加图片上传功能&#xff1f;如何自定义编辑器主题&#xff1f; 在此之前&#xff0c;我讲解过关于…...

链式二叉树oj题

1.输入k &#xff0c;找第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); } 在这里我们要确定递归子问题&#xff0c;第一个就是NULL时返回&…...

Curator 是一个开源工具为 Elasticsearch 集群设计,用于自动化索引的维护任务。

Elasticsearch 使用 Curator 进行索引生命周期管理是一种常见的做法&#xff0c;Curator 是一个开源的 Python 工具&#xff0c;专为 Elasticsearch 集群设计&#xff0c;用于自动化索引的维护任务。以下是使用 Curator 进行索引生命周期管理的一些关键步骤和概念&#xff1a; …...

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++循环队列 经典示例

循环队列&#xff08;Circular Queue&#xff09;&#xff0c;又称环形缓冲区&#xff0c;是一种常用的数据结构&#xff0c;特别适用于资源有限的场合&#xff0c;比如操作系统中的任务调度、网络数据缓冲等。循环队列在数组的基础上实现&#xff0c;逻辑上首尾相连&#xff0…...

【程序大侠传】大表分库分表切换数据库类型导致pagehelper生成sql语法报错

前序 代码剑宗等级分明&#xff0c;其门下弟子等级划分如下&#xff1a; 入门弟子 刚刚拜入代码剑宗&#xff0c;学习基础编程语言和基本剑法&#xff08;语法和基础概念&#xff09;。他们的代码还显得生涩&#xff0c;但已经开始展现出对优雅代码的追求。 江湖小虾 初步掌握…...

7、Redis 队列与 Stream

引言 Redis 自 5.0 版本起引入了一种新的数据结构——Stream。这种数据结构不仅增加了 Redis 的数据处理能力&#xff0c;还使其在消息队列和数据流处理方面更具竞争力。Stream 提供了持久化、多播、消费组等功能&#xff0c;可以满足多种复杂的数据处理需求。 1. Redis Stre…...

FFT剖析

快速傅里叶变换 (fast Fourier transform) xn{x0,x1,…xn-1} (num:N) 旋转因子系数&#xff1a; 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)的级数是&#xff1a; 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&#xff1f; 为什么选择 Apispec&#xff1f; 安装与配置 02Apispec 的基本用法 生成简单的 API 文档 1、创建 Apispec 实例 2、定义 API 路由和视图 3、添加路径到 Apispec 集成 Flask 和 Apispec 1、安装…...

SpringBoot 自定义异常返回数据格式

Spring Boot 默认异常处理 当我们用 spring boot 开发接口是&#xff0c;当遇到异常时返回的数据格式是如下形式的 {"timestamp": "2024-07-06T02:48:55.79100:00","status": 404,"error": "Not Found","path":…...

【xinference】(15):在compshare上,使用docker-compose运行xinference和chatgpt-web项目,配置成功!!!

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

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

Android屏幕刷新率与FPS(Frames Per Second) 120hz

Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数&#xff0c;单位是赫兹&#xff08;Hz&#xff09;。 60Hz 屏幕&#xff1a;每秒刷新 60 次&#xff0c;每次刷新间隔约 16.67ms 90Hz 屏幕&#xff1a;每秒刷新 90 次&#xff0c;…...