输入:点云数据,栅格图像分辨率,图像分块的尺寸
输出:按照固定尺寸分块的图像集合
实现细节:
(1)采用open3d库读取点云,计算点云的包围盒。
(2)根据包围盒和图像分辨率计算图像的行列数。
(3)定义图像数组
(4)遍历点云中的每一个点,判断点所在的像素行列号,将数组中对应行列号的像素赋值。
(5)根据图像分块尺寸,计算分块的行列数目
(6)对每一个分块图像中的像素赋值,输出分块图像
import open3d as o3d
import numpy as np
import cv2
#读取点云,转换为栅格图像
#将栅格图像分块
resolution = 0.2
save_path = r"data/dsm.png"
print("->正在加载点云... ")
m_pc = o3d.io.read_point_cloud("WHU.ply")
print(m_pc)
print('体素化')
points = np.asarray(m_pc.points) # 将点云数据转化为 numpy 数组
print("数组形状:", points.shape) # 输出数组的形状(行列数)
x = points[:, 0]
y = points[:, 1]
z = points[:, 2]
# 获取栅格范围
xmin, xmax = np.nanmin(x), np.nanmax(x)
ymin, ymax = np.nanmin(y), np.nanmax(y)
# 创建栅格, dtype=np.uint8
arr_width = int((xmax - xmin) / resolution)