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

目录

一、概述

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渲染后点云

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值