• 点云库PCL学习——点云的格式、PCD文件的打开和显示


    1、主要参考

    (1)格式说明:

    点云库PCL学习——点云的格式、PCD文件的打开和显示

    ROS知识:点云文件.pcd格式_无水先生的博客-CSDN博客_pcd文件

    (2)点云滤波,对nan的滤波

    Python点云数据处理(三)滤波与RANSAC分割 - 知乎

    (3)点云各类处理

    点云离群点剔除 — open3d python_Coding的叶子的博客-CSDN博客_离群点去除

    2、格式说明

    2.1直接用notepad++打开pcd文件后如下

     2.2、格式说明

    1. VERSION是指定版本号
    2. FIELDS是指定每一个点所拥有的的维度名字,其它的格式如下
      FIELDS x y z                                # XYZ data
      FIELDS x y z rgb                            # XYZ + colors
    3. SIZE是每个维度占的字节大小,其中(unsigned char/char has 1 byte,unsigned short/short has 2 bytes,unsigned int/int/float has 4 bytesdouble has 8 bytes)
    4. TYPE是每一个维度的类型,其中(I - 表示有符号类型 int8 (char)、int16 (short) 和 int32 (int);U -代表无符号类型 uint8 (unsigned char), uint16 (unsigned short), uint32 (unsigned int);F - 表示浮点类型
    5. COUNT是指 指定每个维度有多少个元素默认情况下,如果 COUNT 不存在,则所有维度的计数都设置为 1。
    6. WIDTH –用点的数量表示点云数据集的宽度。根据是有序点云还是无序点云,WIDTH有两层解释:(我的这个数据应该是有序的

       1)它能确定无序数据集的点云中点的个数(和下面的POINTS一样);

       2)它能确定有序点云数据集的宽度(一行中点的数目)。

    7. HEIGHT –用点的数目表示点云数据集的高度。类似于WIDTH ,HEIGHT也有两层解释:1)它表示有序点云数据集的高度(行的总数);2)对于无序数据集它被设置成1(被用来检查一个数据集是有序还是无序)。
    8. VIEWPOINT是指定数据集中点云的获取视点。VIEWPOINT有可能在不同坐标系之间转换的时候应用,在辅助获取其他特征时也比较有用,例如曲面法线,在判断方向一致性时,需要知道视点的方位,视点信息被指定为平移(txtytz)+四元数(qwqxqyqz)。默认值是:VIEWPOINT 0 0 0 1 0 0 0
    9. POINTS是数据的总点数
    10. DATA是表示数据存储的格式。有ASCII  和 二进制(binary)

           标题最后一行 (DATA) 之后的下一个字节被视为点云数据的一部分,并将被解释为点云数据的一部分。

          

    3、点云读取和显示

    3.1安装open3d

    pip install open3d -i https://pypi.tuna.tsinghua.edu.cn/simple 

    3.2 去除Nan后的数据显示

     无效值包括空值和无限值。空值一般用NaN表示。open3d中对应的剔除函数为remove_non_finite_points。当remove_nan为True时,剔除空值。当remove_infinite为True时表示去除无限值。

    3.2.1方法一剔除

    (1)一开始显示一直有问题,后来看了看是Nan数据引起的,去除以后可以显示

    1. import open3d as o3d
    2. import numpy as np
    3. ##--方法(1)去除Nan------------------
    4. path = "D:/RGBD_CAMERA/python_3d_process/1_hezi.pcd"
    5. pcd = o3d.io.read_point_cloud(path) # path为文件路径
    6. pcd_new = o3d.geometry.PointCloud.remove_non_finite_points(
    7. pcd, remove_nan = True, remove_infinite = False)
    8. o3d.visualization.draw_geometries([pcd_new])

     3.2.2方法二剔除

    1. import open3d as o3d
    2. import numpy as np
    3. ##--方法(1)去除Nan------------------
    4. # path = "D:/RGBD_CAMERA/python_3d_process/1_hezi.pcd"
    5. # pcd = o3d.io.read_point_cloud(path) # path为文件路径
    6. # pcd_new = o3d.geometry.PointCloud.remove_non_finite_points(
    7. # pcd, remove_nan = True, remove_infinite = False)
    8. # o3d.visualization.draw_geometries([pcd_new])
    9. ##--方法(2)去除Nan------------------
    10. path = "D:/RGBD_CAMERA/python_3d_process/1_hezi.pcd"
    11. pcd = o3d.io.read_point_cloud(path) # path为文件路径
    12. # res = pcd.remove_non_finite_points(True, True)#剔除无效值
    13. pcd = pcd.remove_non_finite_points(True, False)#剔除无效值
    14. o3d.visualization.draw_geometries([pcd])

     3.3 给显示窗口命名和大小设置

    (1)测试代码

    1. ##--方法(2)去除Nan------------------
    2. path = "D:/RGBD_CAMERA/python_3d_process/1_hezi.pcd"
    3. pcd = o3d.io.read_point_cloud(path) # path为文件路径
    4. # res = pcd.remove_non_finite_points(True, True)#剔除无效值
    5. pcd = pcd.remove_non_finite_points(True, False)#剔除无效值
    6. o3d.visualization.draw_geometries([pcd],
    7. window_name="窗口名字测试",
    8. point_show_normal=False,
    9. width=800, # 窗口宽度
    10. height=600) # 窗口高度

  • 相关阅读:
    Java Character.SubSet equals()方法具有什么功能呢?
    Spring和Spring Boot的区别
    事务的传播机制
    递归神经网络 (RNN)
    基于java图书馆借阅管理系统获取(java毕业设计)
    多智能体深度强化学习的多无人机协同空战决策
    java Spring Boot自定义错误页面
    山区自建房BCD浪涌保护器接线方案(自建房用电防雷)
    编写 bzt 脚本的正确姿势
    前端flex布局
  • 原文地址:https://blog.csdn.net/chencaw/article/details/128077269