1、背景介绍
点云分类/分割时,常需要对分类结果进行可视化,其中给点云赋予不同颜色是一种最直接方法。介绍基于python中matplotlib进行点云颜色渲染显示。
2、点云颜色渲染
2.1 有限种颜色渲染
matplotlib在点云颜色渲染时,使用表示颜色的关键词来表示,如scatter为常见可视化函数,其中表示颜色的关键词有限,如下所示:
- ‘red’:红色
- ‘blue’:蓝色
- ‘green’:绿色
- ‘yellow’:黄色
- ‘purple’:紫色
- ‘orange’:橙色
- ‘cyan’:青色
- ‘magenta’:品红色
- ‘pink’:粉红色
- ‘black’:黑色
- ‘white’:白色
- ‘gray’ 或 ‘grey’:灰色
- ‘brown’:棕色
scatter(xarr, yarr, c='brown', marker='.')
2.1.1 三维空间有限颜色渲染
需要说明的是,使用 ax.scatter(xarr, yarr, c='brown', marker='.')命令进行点云可视化,其可以同时可视化二维与三维。 可视化结果与代码如下:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体
plt.rcParams['axes.unicode_minus'] = False # 正确显示负号with open('E:\\工.txt', 'r') as file:# 初始化一个列表来存储所有的点points3D = []# 逐行读取数据for line in file:# 去除行尾的换行符并分割字符串x, y, z= line.strip().split(',')# 将字符串转换为浮点数x = float(x)y = float(y)z = float(z)# 将点添加到列表中points3D.append((x, y, z))
xarr,yarr,zarr=zip(*points3D)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# ax.scatter(xarr, yarr, zarr, c='brown', marker='.')
ax.scatter(xarr, yarr, c='red', marker='.')#显示红色
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')# 显示图形
plt.show()
三维可视化 | 二维可视化 |
2.1.2 二维(平面)空间有限颜色渲染
若只对其进行二维可视化(投影到水平面上),需要如下效果,则可以使用plt.scatter()函数
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体
plt.rcParams['axes.unicode_minus'] = False # 正确显示负号points2D=[]
x_arr=[]
y_arr=[]
with open('E:\\工.txt', 'r') as file:# 初始化一个列表来存储所有的点points2D = []color_arr=[]xarr=[]yarr=[]zarr=[]# 逐行读取数据for line in file:# 去除行尾的换行符并分割字符串x, y, z= line.strip().split(',')# 将字符串转换为浮点数x = float(x)y = float(y)z = float(z)points2D.append((x,y))color_arr.append((0.0,1.0,0.0))xarr.append(x)yarr.append(y)zarr.append(z)plt.scatter(*zip(*points2D), marker='o', color='blue',s=5)
# 显示图表
plt.show()
2.2 任意颜色渲染
2.2.1 三维空间任意颜色渲染
上述介绍的是有限种颜色渲染,任意颜色渲染,若是三维空间,则可以按照如下代码:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体
plt.rcParams['axes.unicode_minus'] = False # 正确显示负号points2D=[]
x_arr=[]
y_arr=[]
with open('E:\\工.txt', 'r') as file:# 初始化一个列表来存储所有的点points2D = []color_arr=[]xarr=[]yarr=[]zarr=[]# 逐行读取数据for line in file:# 去除行尾的换行符并分割字符串x, y, z= line.strip().split(',')# 将字符串转换为浮点数x = float(x)y = float(y)z = float(z)points2D.append((x,y))#r g b颜色随意添加,0-1.0之间# color_arr.append((0.0, 1.0, 0.0))#显示绿色color_arr.append((np.random.rand(), np.random.rand(), np.random.rand()))#任意颜色xarr.append(x)yarr.append(y)zarr.append(z)color_arr=np.array(color_arr)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# ax.scatter(xarr, yarr, c='brown', marker='.')
ax.scatter(xarr, yarr, zarr, c=color_arr, marker='.')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
每个点颜色相同 | 每个点颜色不相同 |
2.2.2 二维(平面)空间任意颜色渲染
每个点的r、g、b颜色均不相同,如下所示:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体
plt.rcParams['axes.unicode_minus'] = False # 正确显示负号points2D=[]
x_arr=[]
y_arr=[]
with open('E:\\工.txt', 'r') as file:# 初始化一个列表来存储所有的点points2D = []color_arr=[]xarr=[]yarr=[]zarr=[]# 逐行读取数据for line in file:# 去除行尾的换行符并分割字符串x, y, z= line.strip().split(',')# 将字符串转换为浮点数x = float(x)y = float(y)z = float(z)points2D.append((x,y))#r g b颜色随意添加,0-1.0之间# color_arr.append((0.0, 1.0, 0.0))#显示绿色color_arr.append((np.random.rand(), np.random.rand(), np.random.rand()))#任意颜色xarr.append(x)yarr.append(y)zarr.append(z)color_arr=np.array(color_arr)
plt.scatter(*zip(*points2D), marker='o', color=color_arr,s=5)
plt.show()
每个点颜色相同 | 每个点颜色不相同 |
3、总结
介绍了基于matplotlib库对点云进行渲染可视化,根据需要可以设置不同颜色,同时展示了三维、二维可视化角度效果。