(2)点云库处理学习——剔除点云值
1、主要參考
1.1參考地址
(1)
點云離群點剔除 — open3d python_Coding的葉子的博客-CSDN博客_離群點去除
(2)
open3d之點云異常值去除(筆記5)_Satellite_H的博客-CSDN博客
(3)斯坦福經(jīng)典兔子的點云數(shù)據(jù)下載地址
下載地址
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) #可以保存數(shù)據(jù),或者修改為其它格式的如pcdo3d.visualization.draw_geometries([pcd])(2)通過鍵盤的+和-可以控制點云大小,鼠標(biāo)可以滾動視角
2、剔除的方法?
2.1無效值剔除
詳見我的上一篇blob
(1)點云庫PCL學(xué)習(xí)——點云的格式、PCD文件的打開和顯示_chencaw的博客-CSDN博客
?無效值包括空值和無限值。空值一般用NaN表示。open3d中對應(yīng)的剔除函數(shù)為remove_non_finite_points。當(dāng)remove_nan為True時,剔除空值。當(dāng)remove_infinite為True時表示去除無限值。?
2.2統(tǒng)計方式剔除
(1)函數(shù)的具體定義
remove_statistical_outlier(nb_neighbors,std_ratio,print_progress = False)
該函數(shù)用于刪除距離其鄰居較遠(yuǎn)的點
(2)參數(shù)定義
?(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])#指定顯示為藍(lán)色 pcd = pcd.remove_non_finite_points(remove_nan = True, remove_infinite = False) #剔除無效值nan##--(2)統(tǒng)計方法剔除----------------- ##--拷貝一波,對比一起顯示--chen 20221129 pcd2 = deepcopy(pcd) # pcd2.paint_uniform_color([1, 0, 0])#指定顯示為藍(lán)色 pcd2.translate((0, 800, 0)) #整體進(jìn)行y軸方向平移 res2 = pcd2.remove_statistical_outlier(20, 0.5, print_progress = False)#統(tǒng)計方法剔除 # res2 = pcd2.remove_statistical_outlier(20, 0.1, print_progress = False)#統(tǒng)計方法剔除 # res2 = pcd2.remove_statistical_outlier(20, 0.01, print_progress = False)#統(tǒng)計方法剔除 # res2 = pcd2.remove_statistical_outlier(50, 0.1, print_progress = False)#統(tǒng)計方法剔除 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)測試結(jié)果,
1)左圖的參數(shù)(20, 0.5)
?2)左圖的參數(shù)(20, 0.1)
?3)左圖的參數(shù)(20, 0.01)
?4)左圖參數(shù)(50, 0.1)
2.3 半徑濾波方式剔除
(1)函數(shù)
remove_radius_outlier(nb_points, radius,print_progress = False)
函數(shù)功能:刪除給定半徑的給定球體中小于 nb_points 的點的函數(shù)
(2)參數(shù)說明
nb_points?(int):半徑內(nèi)的點數(shù)。它允許您選擇球體應(yīng)包含的最少點數(shù)
radius?(float):球體半徑。它定義了將用于計算鄰居的球體的半徑
print_progress?(bool,?optional,?default=False):設(shè)置為 True 以打印進(jìn)度條
(3)測試代碼
(4)測試結(jié)果
1)左圖的統(tǒng)計濾波參數(shù)(20, 0.5),中間為原圖,右側(cè)半徑濾波參數(shù)(20,2)
?2)左圖的統(tǒng)計濾波參數(shù)(20, 0.5),中間為原圖,右側(cè)半徑濾波參數(shù)(10,2)
?3)左圖的統(tǒng)計濾波參數(shù)(20, 0.5),中間為原圖,右側(cè)半徑濾波參數(shù)(10,5)
總結(jié)
以上是生活随笔為你收集整理的(2)点云库处理学习——剔除点云值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab 五子棋代码,matlab编
- 下一篇: 商业图表案例10.2-重庆的日照