Open3D 计算点云平均密度(版本二)
一、算法原理
采样设备不同、设备距离场景远近不同,会使点云密度产生差异。现有的对点云密度的估算方法有基于距离的方法和基于分块的方法。基于距离的平均距离密度密度表示法是通过计算点云各点的距离平均值来估算点云分布疏密程度,点的距离一般点云某一点
则点云的平均距离密度为:
平均距离
二、代码实现
python
import open3d as o3d
import numpy as np
from matplotlib import pyplot as plt
# -------------------------读取点云-----------------------------
pcd = o3d.io.read_point_cloud("data//tree.pcd")
print(pcd)
# ------------------------计算平均密度--------------------------
nndist = pcd.compute_nearest_neighbor_distance()
nndist = np.array(nndist)
density = np.mean(nndist) # 计算平均密度
print("点云密度为 denstity=", density)
# ---------------------使用伪颜色显示最近邻点--------------------
density_colors = plt.get_cmap('hot')(
(nndist - nndist.min()) / (nndist.max() - nndist.min()))
density_colors = density_colors[:, :3]
pcd.colors = o3d.utility.Vector3dVector(density_colors)
o3d.visualization.draw_geometries([pcd], window_name="计算平均密度",
width=1024, height=768,
left=50, top=50,
mesh_show_back_face=False)
三、结果展示
点云密度为 denstity= 0.02979291524516438