Open3d处理点云数据-点云按高程进行渲染赋色(二)
·
1.高程渲染原理与实现流程
1.1 基本原理
- 基于高程的色彩渲染通过将点云Z坐标(高程)映射到色谱,实现高程信息的可视化表达。核心思想:
- 高程值归一化:将Z值映射到[0,1]区间
- 颜色映射:使用预定义色谱(如Matplotlib的jet/viridis)进行RGB转换
- 颜色赋值:将计算后的RGB值赋予点云颜色属性
1.2 算法流程
- 读取PCD文件
- 提取高程范围:计算min_z和max_z
- 归一化高程值:(z - min_z)/(max_z - min_z)
- 颜色映射转换
- 颜色赋值与可视化
- 结果保存
1.3 参考文献
[1] Open3D官方文档:http://www.open3d.org/docs/release/
[2] Zhou Q Y, et al. Open3D: A Modern Library for 3D Data Processing
2.代码实现
import open3d as o3d
import numpy as np
import matplotlib.pyplot as plt
def save_visualization(pcd, view_params, output_path, is_raw=False):
"""通用可视化保存函数"""
vis = o3d.visualization.Visualizer()
vis.create_window(window_name="点云原始数据" if is_raw else "高程渲染结果",
width=800, height=800)
vis.add_geometry(pcd)
# 统一视角控制
ctr = vis.get_view_control()
ctr.set_front(view_params["front"]) # 相同观察角度
ctr.set_up(view_params["up"])
ctr.set_zoom(view_params["zoom"])
vis.poll_events()
vis.update_renderer()
vis.capture_screen_image(output_path)
vis.destroy_window()
def dual_output(pcd_path, raw_output, render_output):
# 公共视角参数
view_config = {
"front": [0, 0, -1],
"up": [0, -1, 0],
"zoom": 0.6
}
# 原始点云处理
raw_pcd = o3d.io.read_point_cloud(pcd_path)
raw_pcd.paint_uniform_color([0.7, 0.7, 0.7]) # 浅灰色
# 高程渲染处理
render_pcd = o3d.io.read_point_cloud(pcd_path) # 重新加载避免污染原始数据
z_coords = np.asarray(render_pcd.points)[:, 2]
colors = plt.get_cmap('viridis')((z_coords - z_coords.min()) / (z_coords.max() - z_coords.min()))[:, :3]
render_pcd.colors = o3d.utility.Vector3dVector(colors)
# 分两次生成图像
save_visualization(raw_pcd, view_config, raw_output, is_raw=True)
save_visualization(render_pcd, view_config, render_output)
if __name__ == "__main__":
dual_output(
pcd_path = "terrain.pcd",
raw_output = "raw_cloud.png",
render_output = "rendered_cloud.png"
)
3.结果输出

输入点云图

高程渲染图
更多推荐
所有评论(0)