Open3D中的隐藏点去除算法(Hidden Point Removal)的作用是从给定视点渲染点云时,去除背景中未被其他点遮挡的点,从而提高点云的可视化效果。Open3D库中实现了[Katz2007]提出的一种基于点云可见性近似计算的隐藏点去除方法。该方法不需要进行曲面重构或法向量估计,直接利用点云数据计算点的可见性。
凸包构造:
_, pt_map = pcd.hidden_point_removal(camera, radius)
import numpy as np
import open3d as o3d
if __name__ == '__main__':
pcd = o3d.io.read_point_cloud('res/monkey.ply')
# 计算体对角线
diameter = np.linalg.norm( # 点云数据中包围盒的对角线长度
np.asarray(pcd.get_max_bound()) # 返回包围框最大值坐标
- np.asarray(pcd.get_min_bound())) # 返回包围框最小值坐标
# o3d.visualization.draw_geometries([pcd])
# 设置参数
camera = [0, 0, diameter] # 设置点云视角
radius = diameter * 0.1 # 半径参数
# 查看点云视角位置(可删除)
camera_cloud = o3d.geometry.PointCloud() # 使用numpy生成点云
camera_cloud.points = o3d.utility.Vector3dVector([camera]) # points numpy数组
camera_cloud.paint_uniform_color([1, 0, 0]) # 渲染颜色
# 记录点云中每个点的保留状态
_, pt_map = pcd.hidden_point_removal(camera, # 确定哪些点被相机视野所覆盖,即哪些点应该被保留
radius) # 相机视野内的范围
# 获得移除隐藏点后结果
pcd = pcd.select_by_index(pt_map)
o3d.visualization.draw_geometries([pcd, camera_cloud])
算法来源(论文 Direct Visibility of Point Sets):
隐藏点云方法解释:
凸包构造:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuoyibo.net 版权所有 湘ICP备2023021910号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务