Open3D 使用Jet颜色映射渲染点云

news2024/9/23 19:24:57

目录

一、概述

1.1Jet颜色映射的定义

1.2Jet颜色映射的应用

二、代码实现

2.1关键函数

2.2完整代码

三、实现效果

3.1原始点云

3.2渲染后点云


Open3D点云算法汇总及实战案例汇总的目录地址:

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


一、概述

        在点云处理和可视化中,颜色渲染可以帮助更直观地展示点云的属性。Jet 颜色映射是一种广泛应用于科学计算和可视化中的颜色映射方法,它通过将数值数据映射到一种特定的颜色梯度来展示数据的不同特征,通常用于将数值信息直观地表示为颜色。

1.1Jet颜色映射的定义

        Jet 颜色映射是一种伪彩色(pseudo-color)映射,它将数值数据转换为颜色值。Jet 颜色映射的颜色梯度从蓝色到绿色再到红色,具体来说,大致按照以下顺序变化:

  • 深蓝色(最低值)
  • 浅蓝色
  • 青色
  • 绿色
  • 黄色
  • 橙色
  • 红色(最高值)

        这种颜色映射有助于区分数据中的不同数值区域,特别是在数据范围较大时,颜色变化可以显著提高可视化效果。

1.2Jet颜色映射的应用

Jet 颜色映射主要用于:

  • 热力图
  • 数值模拟结果的可视化
  • 点云数据的颜色渲染
  • 图像处理中的伪彩色处理

二、代码实现

2.1关键函数

def apply_jet_colormap(points):
    """
    将点云的高度应用Jet颜色映射。

    参数:
    points (numpy.ndarray): 点云数据,形状为 (N, 3)。

    返回:
    numpy.ndarray: 映射后的颜色数据,形状为 (N, 3)。
    """
    # 获取点云的高度 (z 坐标)
    z = points[:, 2]

    # 将 z 坐标归一化到 [0, 1]
    z_normalized = (z - z.min()) / (z.max() - z.min())

    # 使用 plt.get_cmap('jet') 获取颜色映射
    cmap = plt.get_cmap('jet')
    colors = cmap(z_normalized)[:, :3]  # 获取 RGB 颜色

    return colors

2.2完整代码

import open3d as o3d
import numpy as np
import matplotlib.pyplot as plt

def apply_jet_colormap(points):
    """
    将点云的高度应用Jet颜色映射。

    参数:
    points (numpy.ndarray): 点云数据,形状为 (N, 3)。

    返回:
    numpy.ndarray: 映射后的颜色数据,形状为 (N, 3)。
    """
    if points.size == 0:
        raise ValueError("点云数据为空。")

    # 获取点云的高度 (z 坐标)
    z = points[:, 2]

    # 将 z 坐标归一化到 [0, 1]
    z_min, z_max = z.min(), z.max()
    if z_min == z_max:
        # 如果所有的z值相同,给一个默认的颜色
        return np.full((points.shape[0], 3), [0, 0, 1])

    z_normalized = (z - z_min) / (z_max - z_min)

    # 使用 plt.get_cmap('jet') 获取颜色映射
    cmap = plt.get_cmap('jet')
    colors = cmap(z_normalized)[:, :3]  # 获取 RGB 颜色

    return colors

def main():
    # 读取点云数据
    pcd = o3d.io.read_point_cloud("many_tree.pcd")
    o3d.visualization.draw_geometries([pcd], window_name="Jet Colormap Point Cloud")
    # 检查点云是否为空
    if not pcd.has_points():
        raise ValueError("读取的点云数据为空。")

    # 获取点云数据
    points = np.asarray(pcd.points)

    # 应用Jet颜色映射
    colors = apply_jet_colormap(points)

    # 设置点云的颜色
    pcd.colors = o3d.utility.Vector3dVector(colors)

    # 可视化点云
    o3d.visualization.draw_geometries([pcd], window_name="Jet Colormap Point Cloud")

if __name__ == "__main__":
    main()

三、实现效果

3.1原始点云

3.2渲染后点云

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

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

相关文章

书生大模型实战营闯关记录----第六关:大语言模型微调实战,LoRA和QLoRA微调,理论+Xtuner微调实操

文章目录 大语言模型微调基础1 基本概念1.1 Finetune简介1.1.1 Finetune的两种范式 1.2 微调技术1.2.1 LoRA简介1.2.2 QLoRA简介 1 微调前置基础2 准备工作2.2 创建虚拟环境2.3 安装 XTuner2.4 模型准备 3 快速开始3.1 微调前的模型对话3.2 指令跟随微调3.2.1 准数据文件3.2.2 …

ELK架构介绍

一、ELK简介 ELK 是由三个开源软件组成的,分别是:Elasticsearch、Logstash和Kibana,这三个软件各自在日志管理和数据分析领域发挥着重要作用。Elasticsearch提供分布式存储和搜索能力;Logstash负责数据收集和处理,而K…

如何简单粗暴的下载m3u8视频并转换为mp4格式

m3u8文件介绍 M3U(Moving Picture Experts Group Audio Layer 3 Uniform Resource Locator)这种文件格式是音视频文件的列表文件,是纯文本文件。你下载下来打开它,播放软件并不是播放它,而是根据它的记录找到网络地址…

react+taro的文字粘贴识别功能

效果图 <View className"components-page"><Textareastyle"font-size:12PX"className"textareaStyle"placeholderClass"placeholderStyle"placeholder"例&#xff1a;公司&#xff1a;xxxx公司, 电话:13*********, 地址…

MybatisPlus——service批量新增

Service接口 批量新增 批量插入10万条用户数据&#xff0c;并作出对比&#xff1a; 普通for循环插入IService的批量插入 Test void testSaveOneByOne() {long b System.currentTimeMillis();for (int i 1; i < 100000; i) {userService.save(buildUser(i));}long e Sy…

leetcode递归(LCR 024. 反转链表)

前言 经过前期的基础训练以及部分实战练习&#xff0c;粗略掌握了各种题型的解题思路。现阶段开始专项练习。 描述 给定单链表的头节点 head &#xff0c;请反转链表&#xff0c;并返回反转后的链表的头节点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&am…

2024年6月scratch图形化编程等级考试四级真题

202406 青少年软件编程等级考试Scratch四级真题 试卷总分数&#xff1a;100分 考试时长&#xff1a;60 分钟 第 1 题 运行下列程序&#xff0c;输入单词“PLAY”&#xff0c;最后角色说&#xff1f;&#xff08; &#xff09; A&#xff1a;LY4AP B&#xff1a;AP4LY C&am…

【Linux】【git】创建使用+分支管理+场景模拟

文章目录 引子1. 创建 提交 删除init - - 创建一个初始化的本地仓库config - - 对本地仓库的配置add - - 新增commit - - 提交rm - - 删除 2. 状态查看 和 版本回退log - - 日志status - - 查看diff - - 比较reset - - 版本回退场景模拟1_1 reflog - - 参考日志场景模拟1_2 3. …

K短路(A*算法)

K短路&#xff1a; 在图论中&#xff0c;K短路问题是指在一个图中找到从起点s到终点t的第K短的路径。其中&#xff0c;第1短路径即为最短路径。K短路算法在实际应用中有着广泛的用途&#xff0c;如在通信网络中找到替代的最短路径等。 基本概念 K短路&#xff1a;从起点s到终…

美国服务器稳定么?影响服务器稳定性的6个因素

美国服务器稳定么&#xff1f;美国服务器的稳定性是相当不错的&#xff0c;这主要得益于其先进的技术、成熟的基础设施以及严格的管理措施。美国拥有众多知名的服务器提供商&#xff0c;这些提供商通常会采用顶级的硬件设施&#xff0c;如英特尔、AMD等知名品牌的处理器&#x…

Chromium编译指南2024 - Android篇:前置要求(一)

1.引言 欢迎阅读《Chromium编译指南2024 - Android篇》。本指南旨在帮助开发者理解和掌握在Android平台上编译Chromium的全过程。Chromium是一个开源的浏览器项目&#xff0c;由Google主导开发&#xff0c;并为多个现代浏览器提供基础代码。Android作为全球使用最广泛的移动操…

DirectX_web_setup.exe

F:\Downloads\录屏软件\OBS DirectX_web_setup.exe

IP实现https访问的简易方式

很多项目怕麻烦不愿意申请域名&#xff0c;也不想备案&#xff0c;所以直接用服务器IP地址做WEB项目更快一些&#xff0c;但又想给IP地址申请SSL证书&#xff0c;这种情况下需要用到IP类型的专用SSL证书。 IP SSL证书是支持IP地址实现HTTPS加密的SSL证书&#xff0c;为不能提供…

Linux服务管理(五)Apache服务优化

CustomLog "|/bin/rotatelogs -l /wwwlogs/access_%Y%m%d.log 86400" combined日志旋转可参考这篇文章&#xff1a; https://blog.csdn.net/weixin_43576565/article/details/139989701 要优化首先你得有Apache yum -y install httpd启动 service httpd start写入…

[Qt][按钮类控件]详细讲解

目录 0.按钮状态说明1.Push Button2.Radio Button3.Check Box4.Tool Button 0.按钮状态说明 clicked&#xff1a;⼀次 ⿏标按下⿏标释放 触发pressed&#xff1a;鼠标按下时触发released&#xff1a;鼠标释放时触发toggled&#xff1a;checked属性改变时触发 1.Push Button QP…

seaborn与pandas绘图入门

导入环境 import numpy as np import pandas as pd from numpy.random import randn import matplotlib.pyplot as plt 若是在jupyter notebook编译&#xff0c;需要额外执行下列语句 %matplotlib notebook 该语句在Jupyter Notebook或JupyterLab中使用的IPython魔法命令&…

最新版的AutoGPT,我搭建好了

最近AutoGPT不是更新了嘛 安装 我按照官方的教程 在本地搭建好了 改动 可见的改动&#xff0c;主要是把原来的纯命令行改成前后端的形式 看下前端界面 界面比较简单&#xff0c;主要分3个大块 监控 第一个是监控 主要是看你在 build 里构建的Agents的运行情况 build 第一个是Ag…

C++笔试练习笔记【7】:力扣 91. 解码方法 动态规划练习

文章目录 题目题目分析思路解法正常解法优化解法 题目 题目链接&#xff1a;力扣 91. 解码方法 备用链接&#xff1a;https://leetcode.cn/problems/decode-ways/description/ 题目分析 1.首先我们知道题目给定A~Z编码为1 ~26 &#xff0c;而数字十一字符串的形式给出所以…

js构造函数的prototype赋值总结

我们知道通过构造函数的prototype,可以生成让所有实例对象访问的通用属性和方法,下面通过代码来解释这个过程 function Person(name){this.name name; }Person.prototype.sex man我们定义了一个构造函数Person,然后给它的prototype添加了一个sex的属性,下面我们来看看Person…

MySQL:复杂查询 (一)——聚合函数分组查询联合查询

目录 1、聚合查询 1.1 聚合函数 1.1.1 COUNT() 1.1.2 SUM() 1.1.3 AVG() 1.1.4 MAX()&#xff0c;MIN() 1.2 分组查询 1.2.1 GROUP BY子句 1.2.1.1 round() 1.2.2 HAVING 1.2.3 示例 2、联合查询 2.1 ①取相关表笛卡尔积 2.2 ②过滤无效数据 2.3 ③精简查询结果…