Open3D 将点云投影到球面

news2024/9/21 4:36:29

目录

一、概述

二、代码实现

2.1关键函数

2.2完整代码

三、实现效果

3.1原始点云

3.2投影后点云


前期试读,后续会将博客加入下列链接的专栏,欢迎订阅

Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客

一、概述

        将点云投影到球面是一个常见的几何操作,尤其在计算机视觉和3D图形学中。此篇博客将演示如何使用 Open3D 和 Python 将点云投影到一个给定的球面上。

        假设我们有一个点云,我们想要将其投影到一个半径为 R 的球面上。我们可以通过以下步骤来实现这一操作:

1.生成或读取点云数据:
        使用 Open3D 生成或读取点云数据。
2.计算投影向量:
        计算每个点到球心的向量,并将其归一化,使得其长度等于球的半径。
3.替换点云数据:
        用归一化后的向量替换原始点云的坐标。
4.可视化结果:
        使用 Open3D 可视化投影后的点云数据。

二、代码实现

2.1关键函数

        在 project_to_sphere 函数中,首先计算每个点到球心的向量,并将其归一化,使得其长度等于球的半径。具体来说,通过计算每个点的范数(即点到球心的距离),然后用每个点的坐标除以其范数,得到归一化的向量。

def project_to_sphere(pcd, radius):
    """
    将点云投影到给定半径的球面上。

    参数:
    pcd (open3d.geometry.PointCloud): 输入点云。
    radius (float): 球的半径。

    返回:
    open3d.geometry.PointCloud: 投影后的点云。
    """
    points = np.asarray(pcd.points)
    # 计算点到球心的向量并归一化
    norms = np.linalg.norm(points, axis=1, keepdims=True)
    projected_points = (points / norms) * radius

    # 创建新的点云
    projected_pcd = o3d.geometry.PointCloud()
    projected_pcd.points = o3d.utility.Vector3dVector(projected_points)
    return projected_pcd

2.2完整代码

import open3d as o3d
import numpy as np

def generate_random_point_cloud(num_points=1000):
    """
    生成随机点云数据。

    参数:
    num_points (int): 点的数量。

    返回:
    open3d.geometry.PointCloud: 生成的点云。
    """
    points = np.random.uniform(-1, 1, (num_points, 3))
    pcd = o3d.geometry.PointCloud()
    pcd.points = o3d.utility.Vector3dVector(points)
    return pcd

def project_to_sphere(pcd, radius):
    """
    将点云投影到给定半径的球面上。

    参数:
    pcd (open3d.geometry.PointCloud): 输入点云。
    radius (float): 球的半径。

    返回:
    open3d.geometry.PointCloud: 投影后的点云。
    """
    points = np.asarray(pcd.points)
    # 计算点到球心的向量并归一化
    norms = np.linalg.norm(points, axis=1, keepdims=True)
    projected_points = (points / norms) * radius

    # 创建新的点云
    projected_pcd = o3d.geometry.PointCloud()
    projected_pcd.points = o3d.utility.Vector3dVector(projected_points)
    return projected_pcd

# 生成随机点云
num_points = 1000
pcd = generate_random_point_cloud(num_points)

# 将点云投影到半径为1的球面上
radius = 1.0
projected_pcd = project_to_sphere(pcd, radius)

# 可视化原始点云和投影后的点云
o3d.visualization.draw_geometries([pcd], window_name="Original Point Cloud", width=800, height=600, left=50, top=50)
o3d.visualization.draw_geometries([projected_pcd], window_name="Projected Point Cloud on Sphere", width=800, height=600, left=850, top=50)

# 保存投影后的点云
# o3d.io.write_point_cloud("projected_sphere.pcd", projected_pcd)

三、实现效果

3.1原始点云

3.2投影后点云

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1943758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【表单组件】地址组件新增精简模式

07/17 主要更新模块概览 快速筛选 精简模式 触发条件 自定义域名 01 表单管理 1.1 【表单组件】-数据关联组件新增快速筛选功能 说明: 数据关联组件新增快速筛选功能,用户在数据关联组件选择数据时,可以通过快速筛选功能&#xff0…

黑马头条Day07-app端文章搜索

一、今日内容介绍 1. App端搜索效果图 2. 今日内容 (1)文章搜索 Elasticsearch环境搭建索引库创建文章搜索多条件复合查询索引数据同步 (2)搜索历史记录 MongoDB环境搭建异步保存搜索历史查看搜索历史列表删除搜索历史 &…

Linux源码安装的Redis如何配置systemd管理并设置开机启动

文章目录 实验前提实验 实验前提 已完成源码安装并能正常启动redis /usr/local/bin/redis-server能正常启动redis 实验 vim /etc/systemd/system/redis.service内容如下: [unit] Descriptionredis-server Afternetwork.target[Service] Typeforking ExecStart/…

从零开始创建vue3项目——包含项目初始化、element-plus、eslint、axios、router、pinia、echarts

项目启动 初始化vue3项目 这里建议先下载pnpm,下载速度更快,如果还没下载可以使用 npm install -g pnpm 如果遇到报错问题,如下 可以在命令行输入下面的指令以切换到淘宝镜像源 npm config set registry https://registry.npm.taobao.org…

Facebook云手机引流运营方法

Facebook,作为全球用户数达到30亿的最大社交媒体平台,汇聚了各类客户群体,蕴藏着巨大的商业潜力。对于外贸电商而言,Facebook是不可或缺的营销平台。一方面,我们可以在Facebook上发布产品信息,寻找并筛选目…

linux系统进程占cpu 100%解决步骤

1.查找进程 ps aux 查看指定进程: ps aux | grep process_name2.根据进程查找对应的主进程 pstree -p | grep process_name 3.查看主进程目录并删除 ps -axu | grep process_name rm -rf /usr/bin/2cbbb

PDF-Extract-Kit

文章目录 一、关于 PDF-Extract-Kit整体介绍效果展示 二、评测指标1、布局检测2、公式检测3、公式识别 三、安装四、模型下载1、安装 Git LFS2、从 Hugging Face 下载模型3、从 ModelScope 下载模型SDK 下载Git 下载 五、运行提取脚本六、其它待办事项协议致谢 一、关于 PDF-Ex…

Spark实时(三):Structured Streaming入门案例

文章目录 Structured Streaming入门案例 一、Scala代码如下 二、Java 代码如下 三、以上代码注意点如下 Structured Streaming入门案例 我们使用Structured Streaming来监控socket数据统计WordCount。这里我们使用Spark版本为3.4.3版本,首先在Maven pom文件中导…

Delphi 11.2 配置Android SDK 环境

打开 Delphi 11 点击 Tools–Options… 然后点击 Deployment–SDK Manager–Add… 这里如果配置64位就选 Android 64-bit,如果配置32位就选 Android 32-bit 点击 Select an SDK version–Add New… 有警告图标的就是有问题的项,需要手动更新一下&#xf…

NO.1 Hadoop概述

1.1 Hadoop是什么 1.2 Hadoop优势 1.3 Hadoop组成 1.3.1 HDFS架构概述 1.3.2 YARN架构概述 1.3.3 MapReduce架构概述 1.3.4 HDFS、YARN、MapReduce三者关系 1.4 大数据技术生态体系 1.5 推荐系统框架图

【UE5】可反射的射线检测

目录 效果 步骤 一、准备射线 二、生成第一次反射后的射线 三、多次反射 四、通过循环进行多次反射 效果 步骤 一、准备射线 1. 新建一个工程,添加一个俯视角游戏资源包 2. 双击打开俯视角游戏地图 删除大纲中的后期处理体积使得地图可以正常显示 3. 添加一…

【JavaEE初阶】线程的概念及创建

目录 📕 前言 📕 认识线程(Thread) 🚩 概念 😊线程是什么 🙂 为啥要有线程 😭 进程和线程的区别(面试题重点) 🤭 Java的线程和操作系统线程…

黑马JavaWeb企业级开发(知识清单)01——前端介绍,HTML实现标题:排版

文章目录 前言一、认识web前端、HTML、CSS二、VS Code开发工具&#xff08;插件弃用问题&#xff09;三、HTML结构标签介绍1. 标签页标题< title >2. 图片标签< img >1) 常见属性2) src路径书写方式 3. 标题标签< h >4. 水平分页线标签< hr > 四、用Vs…

“萝卜快跑”自动驾驶技术,夺走了谁的方向盘?

在前几年&#xff0c;科幻电影中无人驾驶车自如地穿梭在城市大街小巷的场景&#xff0c;似乎还遥不可及&#xff0c;然而&#xff0c;随着“萝卜快跑”无人驾驶车辆在多个城市的成功运营&#xff0c;这一愿景已悄然变为现实。由百度Apollo倾力打造的“萝卜快跑”&#xff0c;以…

基于FPGA的以太网设计(3)----详解各类xMII接口

1、什么是xMII接口 MII (Media Independent Interface)接口,即介质无关接口或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准。“介质无关” 表明在不对MAC硬件重新设计或替换的情况下,任何类型的PHY设备都可以正常工作。 MII接口是MAC和PHY之间的通信接口,MAC产生…

STM32(七):STM32指南者-串口实验

目录 一、基本概念通讯基本概念1、串行和并行2、同步通讯与异步通讯3、全双工、半双工、单工4、通讯速率 串口基本概念1、串口通讯基本概念2、物理层3、协议层 指南者的串口USART 二、串口实验前期准备1、安装安装 USB 转串口驱动_CH3402、野火多功能调试助手3、使用USB转串口&…

RedHat9 | Ansible 编写循环和条件任务

环境版本说明 RedHat9 [Red Hat Enterprise Linux release 9.0]Ansible [core 2.13.3]Python [3.9.10]jinja [3.1.2] 1. 利用循环迭代任务 通过利用循环&#xff0c;管理员无需编写多个使用同一模块的任务。Ansible支持使用loop关键字对一组项目迭代任务&#xff0c;通过配置…

基于单片机控制的变压器油压油温故障检测

摘 要 在电力系统的运行中&#xff0c;通过对其核心设备变压器的故障进行检测&#xff0c;以此能够及时、准确的发现变压器的故障&#xff0c;基于单片机控制的变压器油压油温的故障检测的方法&#xff0c;利用压力传感器、温度传感器对变压器的油压、油温进行采集并送入单片机…

靶机Metasploitable2的安装

Metasploitable2是一款基于Ubuntu Linux的操作系统。Metasploitable2是一个虚拟机文件&#xff0c;从网上下载解压之后就可以直接使用&#xff0c;无需安装。该系统本身设计作为安全工具测试和演示常见漏洞攻击的靶机&#xff0c;所以它存在大量未打补丁漏洞&#xff0c;并且开…

Xilinx Ultrascale+ FPGA 驱动MIPI DSI屏显示源码工程

作者&#xff1a;Hello&#xff0c;Panda 大家早上好&#xff0c;中午好&#xff0c;下午好&#xff0c;我是熊猫君。 曾记否&#xff0c;之前熊猫家发了一篇博文《分享一下使用Xilinx FPGA驱动MIPI DSI屏的心路历程》&#xff0c;此文发布以后&#xff0c;后台收到了不少朋友…