(1)格式说明:
ROS知识:点云文件.pcd格式_无水先生的博客-CSDN博客_pcd文件
(2)点云滤波,对nan的滤波
Python点云数据处理(三)滤波与RANSAC分割 - 知乎
(3)点云各类处理
点云离群点剔除 — open3d python_Coding的叶子的博客-CSDN博客_离群点去除
- VERSION是指定版本号
- FIELDS是指定每一个点所拥有的的维度名字,其它的格式如下
FIELDS x y z # XYZ data FIELDS x y z rgb # XYZ + colors- SIZE是每个维度占的字节大小,其中(unsigned char/char has 1 byte,unsigned short/short has 2 bytes,unsigned int/int/float has 4 bytes,double has 8 bytes)
- TYPE是每一个维度的类型,其中(I - 表示有符号类型 int8 (char)、int16 (short) 和 int32 (int);U -代表无符号类型 uint8 (unsigned char), uint16 (unsigned short), uint32 (unsigned int);F - 表示浮点类型)
- COUNT是指 指定每个维度有多少个元素。默认情况下,如果 COUNT 不存在,则所有维度的计数都设置为 1。
- WIDTH –用点的数量表示点云数据集的宽度。根据是有序点云还是无序点云,WIDTH有两层解释:(我的这个数据应该是有序的)
1)它能确定无序数据集的点云中点的个数(和下面的POINTS一样);
2)它能确定有序点云数据集的宽度(一行中点的数目)。
- HEIGHT –用点的数目表示点云数据集的高度。类似于WIDTH ,HEIGHT也有两层解释:1)它表示有序点云数据集的高度(行的总数);2)对于无序数据集它被设置成1(被用来检查一个数据集是有序还是无序)。
- VIEWPOINT是指定数据集中点云的获取视点。VIEWPOINT有可能在不同坐标系之间转换的时候应用,在辅助获取其他特征时也比较有用,例如曲面法线,在判断方向一致性时,需要知道视点的方位,视点信息被指定为平移(txtytz)+四元数(qwqxqyqz)。默认值是:VIEWPOINT 0 0 0 1 0 0 0
- POINTS是数据的总点数
- DATA是表示数据存储的格式。有ASCII 和 二进制(binary)
标题最后一行 (DATA) 之后的下一个字节被视为点云数据的一部分,并将被解释为点云数据的一部分。
pip install open3d -i https://pypi.tuna.tsinghua.edu.cn/simple
无效值包括空值和无限值。空值一般用NaN表示。open3d中对应的剔除函数为
remove_non_finite_points。当remove_nan为True时,剔除空值。当remove_infinite为True时表示去除无限值。
(1)一开始显示一直有问题,后来看了看是Nan数据引起的,去除以后可以显示
- import open3d as o3d
- import numpy as np
-
- ##--方法(1)去除Nan------------------
- path = "D:/RGBD_CAMERA/python_3d_process/1_hezi.pcd"
- pcd = o3d.io.read_point_cloud(path) # path为文件路径
- pcd_new = o3d.geometry.PointCloud.remove_non_finite_points(
- pcd, remove_nan = True, remove_infinite = False)
- o3d.visualization.draw_geometries([pcd_new])
3.2.2方法二剔除
- import open3d as o3d
- import numpy as np
-
- ##--方法(1)去除Nan------------------
- # path = "D:/RGBD_CAMERA/python_3d_process/1_hezi.pcd"
- # pcd = o3d.io.read_point_cloud(path) # path为文件路径
- # pcd_new = o3d.geometry.PointCloud.remove_non_finite_points(
- # pcd, remove_nan = True, remove_infinite = False)
- # o3d.visualization.draw_geometries([pcd_new])
-
-
- ##--方法(2)去除Nan------------------
- path = "D:/RGBD_CAMERA/python_3d_process/1_hezi.pcd"
- pcd = o3d.io.read_point_cloud(path) # path为文件路径
- # res = pcd.remove_non_finite_points(True, True)#剔除无效值
- pcd = pcd.remove_non_finite_points(True, False)#剔除无效值
- o3d.visualization.draw_geometries([pcd])
(1)测试代码
- ##--方法(2)去除Nan------------------
- path = "D:/RGBD_CAMERA/python_3d_process/1_hezi.pcd"
- pcd = o3d.io.read_point_cloud(path) # path为文件路径
- # res = pcd.remove_non_finite_points(True, True)#剔除无效值
- pcd = pcd.remove_non_finite_points(True, False)#剔除无效值
- o3d.visualization.draw_geometries([pcd],
- window_name="窗口名字测试",
- point_show_normal=False,
- width=800, # 窗口宽度
- height=600) # 窗口高度