(2)点云库处理学习——剔除点云值
创始人
2024-02-28 20:00:29
0

1、主要参考

1.1参考地址

(1)

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

(2)

open3d之点云异常值去除(笔记5)_Satellite_H的博客-CSDN博客

(3)斯坦福经典兔子的点云数据下载地址

下载地址

Model : Bunny

1.2兔子的实验

(1)代码

import open3d as o3d
import numpy as np
# from copy import deepcopy
# from matplotlib import pyplot as pltpath = "D:/RGBD_CAMERA/python_3d_process/bunny.ply"
pcd = o3d.io.read_point_cloud(path)  # path为文件路径# o3d.io.write_point_cloud("chenbunny.pcd",pcd)  #可以保存数据,或者修改为其它格式的如pcdo3d.visualization.draw_geometries([pcd])

(2)通过键盘的+和-可以控制点云大小,鼠标可以滚动视角

2、剔除的方法 

2.1无效值剔除

详见我的上一篇blob

(1)点云库PCL学习——点云的格式、PCD文件的打开和显示_chencaw的博客-CSDN博客

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

2.2统计方式剔除

(1)函数的具体定义

remove_statistical_outlier(nb_neighbors,std_ratio,print_progress = False)

该函数用于删除距离其邻居较远的点

(2)参数定义

  1.  nb_neighbors : 目标点周围的点数。它指定考虑多少邻居来计算给定点的平均距离。
  2. std_ratio : std_ratio标准差比率。它允许根据跨点云的平均距离的标准偏差设置阈值级别。这个数字越低,过滤器就越激进。
  3. print_progress : 为True时,可以显示处理进度 打印进度条

 (3)测试代码

import open3d as o3d
import numpy as np
from copy import deepcopy##--(1)去除无效值------------------
path = "D:/RGBD_CAMERA/python_3d_process/1_hezi.pcd"
pcd = o3d.io.read_point_cloud(path)  # path为文件路径
# pcd.paint_uniform_color([0, 0, 1])#指定显示为蓝色
pcd = pcd.remove_non_finite_points(remove_nan = True, remove_infinite = False)  #剔除无效值nan##--(2)统计方法剔除-----------------
##--拷贝一波,对比一起显示--chen 20221129
pcd2 = deepcopy(pcd)
# pcd2.paint_uniform_color([1, 0, 0])#指定显示为蓝色
pcd2.translate((0, 800, 0)) #整体进行y轴方向平移
res2 = pcd2.remove_statistical_outlier(20, 0.5, print_progress = False)#统计方法剔除
# res2 = pcd2.remove_statistical_outlier(20, 0.1, print_progress = False)#统计方法剔除
# res2 = pcd2.remove_statistical_outlier(20, 0.01, print_progress = False)#统计方法剔除
# res2 = pcd2.remove_statistical_outlier(50, 0.1, print_progress = False)#统计方法剔除
pcd2 = res2[0]  #返回点云,和点云索引##--(3)显示一下-----------------
o3d.visualization.draw_geometries([pcd,pcd2],      #点云列表window_name="离群点剔除对比显示",point_show_normal=False)  # 窗口高度
# o3d.visualization.draw_geometries([pcd,pcd2],      #点云列表
#                                       window_name="离群点剔除对比显示",
#                                       point_show_normal=False,
#                                       width=800,  # 窗口宽度
#                                       height=600)  # 窗口高度

(4)测试结果,

1)左图的参数(20, 0.5)

 2)左图的参数(20, 0.1)

 3)左图的参数(20, 0.01)

 4)左图参数(50, 0.1)

2.3 半径滤波方式剔除

(1)函数

remove_radius_outlier(nb_points, radius,print_progress = False)

函数功能:删除给定半径的给定球体中小于 nb_points 的点的函数

(2)参数说明

nb_points (int)半径内的点数。它允许您选择球体应包含的最少点数

radius (float)球体半径。它定义了将用于计算邻居的球体的半径

print_progress (bool, optional, default=False)设置为 True 以打印进度条

(3)测试代码

(4)测试结果

1)左图的统计滤波参数(20, 0.5),中间为原图,右侧半径滤波参数(20,2)

 2)左图的统计滤波参数(20, 0.5),中间为原图,右侧半径滤波参数(10,2)

 3)左图的统计滤波参数(20, 0.5),中间为原图,右侧半径滤波参数(10,5)

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...