您好,欢迎来到图艺博知识网。
搜索
您的当前位置:首页open3d 隐藏点去除算法

open3d 隐藏点去除算法

来源:图艺博知识网

一、算法原理

Open3D中的隐藏点去除算法(Hidden Point Removal)的作用是从给定视点渲染点云时,去除背景中未被其他点遮挡的点,从而提高点云的可视化效果。Open3D库中实现了[Katz2007]提出的一种基于点云可见性近似计算的隐藏点去除方法。该方法不需要进行曲面重构或法向量估计,直接利用点云数据计算点的可见性。

1.算法介绍

凸包构造:

二、代码

_, 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])

三、结果展示

3.1 原数据

3.2 隐藏点后

四、相关数据

算法来源(论文 Direct Visibility of Point Sets):

隐藏点云方法解释:

凸包构造:

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuoyibo.net 版权所有 湘ICP备2023021910号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务