目录
一、概述
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()