亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python實現(xiàn)CSF地面點濾波算法原理解析

 更新時間:2021年08月07日 09:25:05   作者:點云俠  
這篇文章主要介紹了python實現(xiàn)CSF地面點濾波算法原理,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、算法原理

布料模擬濾波處理流程:
1)利用點云濾波算法或者點云處理軟件濾除異常點;
2)將激光雷達點云倒置;
3)設(shè)置模擬布料,設(shè)置布料網(wǎng)格分辨率 G R GR GR,確定模擬粒子數(shù)。布料的位置設(shè)置在點云最高點以上;
4)將布料模擬點和雷達點投影到水平面,為每個布料模擬點找到最相鄰的激光點的高度值,將高度值設(shè)置為 I H V IHV IHV;
5)布料例子設(shè)置為可移動,布料粒子首先受到重力作用,當粒子高度 C H V CHV CHV小于 I H V IHV IHV時,將粒子高度設(shè)置為 I H V IHV IHV;粒子設(shè)置為不可移動;
6)計算布料粒子之間的內(nèi)力作用,根據(jù)設(shè)置的布料剛性參數(shù),調(diào)整布料粒子之間的相對位置;
7)重復進行5)和6)計算,迭代次數(shù)達到設(shè)置的最大迭代次數(shù);
8)計算激光雷達點與對應布料模擬點的距離,距離小于閾值標記為地面點,距離大于閾值標記為非地面點。

點云地面點濾波(Cloth Simulation Filter, CSF)“布料”濾波算法介紹

二、讀取las點云

參考鏈接: python讀取las
1、GitHub: laspy
2、基礎(chǔ)教程:Laspy: Documentation
3、安裝:pip install laspy
4、使用example:

import laspy
#============讀取las格式的點云===========
inFile = laspy.file.File(r"40m1.las", mode='r') # 讀取點云
print('X,Y,Z',inFile.x,inFile.y,inFile.z) # 輸出點云坐標
print('點云個數(shù):',len(inFile)) #讀取點云個數(shù)
#============保存點云為las文件===========
h = inFile.header
outFile = laspy.file.File('666.las', mode = "w", header=h)
points = inFile #對點云進行的相關(guān)操作
outFile.points = points
outFile.close() #關(guān)閉文件完成保存

三、算法源碼

1、算法細節(jié):CSF
2、源碼獲?。?a rel="external nofollow" >https://github.com/jianboqi/CSF
3、源碼編譯:下載源代碼。在python文件夾下:
python setup.py build
python setup.py install
4、讀取las并可視化算法結(jié)果

import laspy
import CSF
import numpy as np
import open3d as o3d
#============讀取las文件=============
inFile = laspy.file.File(r"40m1.las", mode='r') # read a las file
points = inFile.points
xyz = np.vstack((inFile.x, inFile.y, inFile.z)).transpose() # extract x, y, z and put into a list
#============布料模擬濾波============
csf = CSF.CSF()
# 參數(shù)設(shè)置
csf.params.bSloopSmooth = False    #粒子設(shè)置為不可移動
csf.params.cloth_resolution = 0.1  #布料網(wǎng)格分辨率
csf.params.rigidness = 3  #布料剛性參數(shù)
csf.params.time_step = 0.65
csf.params.class_threshold = 0.03 #點云與布料模擬點的距離閾值
csf.params.interations = 500      #最大迭代次數(shù)
# more details about parameter: http://ramm.bnu.edu.cn/projects/CSF/download/
csf.setPointCloud(xyz)
ground = CSF.VecInt()  # 地面點索引列表
non_ground = CSF.VecInt() # 非地面點索引列表
csf.do_filtering(ground, non_ground) # 執(zhí)行濾波
#============保存為las文件==========
outFile = laspy.file.File(r"non_ground.las",
                          mode='w', header=inFile.header)
outFile.points = points[non_ground] # 提取非地面點保存到las
outFile.close() # 關(guān)閉文件夾

a=xyz[ground]
b=xyz[non_ground]
#=============可視化===============
def view_cloud(a, b):
    pcd = o3d.geometry.PointCloud()
    # =====numpy轉(zhuǎn)point=======
    pcd.points = o3d.utility.Vector3dVector(a)

    pcd1 = o3d.geometry.PointCloud()

    pcd1.points = o3d.utility.Vector3dVector(b)
    #=======自定義顏色========
    pcd.paint_uniform_color([0, 1, 0])
    pcd1.paint_uniform_color([1, 0, 0])
    o3d.visualization.draw_geometries([pcd, pcd1],window_name='提取結(jié)果')
    o3d.visualization.draw_geometries([pcd1],window_name='非地面點')
    o3d.visualization.draw_geometries([pcd],window_name='地面點')
view_cloud(a,b)

5、讀取pcd文件并可視化結(jié)果

import open3d as o3d
import CSF
import numpy as np

pc = o3d.io.read_point_cloud("數(shù)據(jù)//100m1.pcd")
xyz = np.asarray(pc.points)
csf = CSF.CSF()
# prameter settings
csf.params.bSloopSmooth = False
csf.params.cloth_resolution = 0.1
csf.params.rigidness = 3
csf.params.time_step = 0.65
csf.params.class_threshold = 0.03
csf.params.interations = 500
# more details about parameter: http://ramm.bnu.edu.cn/projects/CSF/download/
csf.setPointCloud(xyz)
ground = CSF.VecInt()  # a list to indicate the index of ground points after calculation
non_ground = CSF.VecInt() # a list to indicate the index of non-ground points after calculation
csf.do_filtering(ground, non_ground) # do actual filtering.

# o3d.io.write_point_cloud("trans_of_source.pcd", non_ground)#保存點云
a=xyz[ground]
b=xyz[non_ground]
def view_cloud(a, b):
    pcd = o3d.geometry.PointCloud()
    # From numpy to Open3D
    pcd.points = o3d.utility.Vector3dVector(a)

    pcd1 = o3d.geometry.PointCloud()
    # From numpy to Open3D
    pcd1.points = o3d.utility.Vector3dVector(b)

    pcd.paint_uniform_color([0, 1, 0])
    pcd1.paint_uniform_color([1, 0, 0])
    o3d.visualization.draw_geometries([pcd, pcd1],window_name='提取結(jié)果')
    o3d.visualization.draw_geometries([pcd1],window_name='非地面點')
    o3d.visualization.draw_geometries([pcd],window_name='地面點')
view_cloud(a,b)

四、結(jié)果展示

五、CloudCompare實現(xiàn)

1、加載點云數(shù)據(jù),點擊Plugins中的CSF Filter功能

2、彈出如下窗口:



 圖中:Cloth resolution:是指用于覆蓋地形的布的網(wǎng)格大小(單位與點云的單位相同)。你設(shè)置的布分辨率越大,你得到的DTM就越粗糙;Max iterations:是指地形仿真的最大迭代次數(shù)。500對大多數(shù)場景來說都足夠了。Classification threshold:是指根據(jù)點與模擬地形之間的距離,將點云劃分為地面和非地面部分的閾值。0.5適用于大多數(shù)場景
  這里的網(wǎng)格分辨率和距離閾值最小只能設(shè)置為10cm,地面10cm的范圍默認是地面點,精確度不如自己代碼實現(xiàn)中的高。
3、最后得到的結(jié)果:

可以看出,非地面點中不能提取到路緣石。

到此這篇關(guān)于python實現(xiàn)CSF地面點濾波的文章就介紹到這了,更多相關(guān)python地面點濾波內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python matplotlib實現(xiàn)將圖例放在圖外

    python matplotlib實現(xiàn)將圖例放在圖外

    這篇文章主要介紹了python matplotlib實現(xiàn)將圖例放在圖外,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python的numpy選擇特定行列的方法

    Python的numpy選擇特定行列的方法

    這篇文章主要介紹了Python的numpy選擇特定行列的方法,有時需要抽取矩陣中特定行的特定列,比如,需要抽取矩陣x的0,1行的0,3列,結(jié)果為矩陣域,需要的朋友可以參考下
    2023-08-08
  • python基于pyppeteer制作PDF文件

    python基于pyppeteer制作PDF文件

    這篇文章主要介紹了python基于pyppeteer制作PDF文件的方法,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-03-03
  • Jupyter notebook命令和編輯模式常用快捷鍵匯總

    Jupyter notebook命令和編輯模式常用快捷鍵匯總

    這篇文章主要介紹了Jupyter notebook命令和編輯模式常用快捷鍵匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Python高級編程之消息隊列(Queue)與進程池(Pool)實例詳解

    Python高級編程之消息隊列(Queue)與進程池(Pool)實例詳解

    這篇文章主要介紹了Python高級編程之消息隊列(Queue)與進程池(Pool),結(jié)合實例形式詳細分析了Python消息隊列與進程池的相關(guān)原理、使用技巧與操作注意事項,需要的朋友可以參考下
    2019-11-11
  • 在Python中使用next()方法操作文件的教程

    在Python中使用next()方法操作文件的教程

    這篇文章主要介紹了在Python中使用next()方法操作文件的教程,是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • 基于jupyter代碼無法在pycharm中運行的解決方法

    基于jupyter代碼無法在pycharm中運行的解決方法

    這篇文章主要介紹了基于jupyter代碼無法在pycharm中運行的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python實戰(zhàn)基礎(chǔ)之Pandas統(tǒng)計某個數(shù)據(jù)列的空值個數(shù)

    Python實戰(zhàn)基礎(chǔ)之Pandas統(tǒng)計某個數(shù)據(jù)列的空值個數(shù)

    我們在處理數(shù)據(jù)的時候,經(jīng)常需要檢查數(shù)據(jù)的質(zhì)量,也需要知道出問題的數(shù)據(jù)在哪個位置,下面這篇文章主要給大家介紹了關(guān)于Python實戰(zhàn)基礎(chǔ)之利用Pandas統(tǒng)計某個數(shù)據(jù)列空值個數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Python多線程threading模塊用法實例分析

    Python多線程threading模塊用法實例分析

    這篇文章主要介紹了Python多線程threading模塊用法,結(jié)合實例形式分析了Python多線程threading模塊原理、功能、常見應用及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-05-05
  • Python中Numba庫裝飾器的具體使用

    Python中Numba庫裝飾器的具體使用

    Numba是一個針對Python的開源JIT編譯器,使用Numba非常方便,只需要在Python原生函數(shù)上增加一個裝飾器,本文主要介紹了Python中Numba庫裝飾器的具體使用,感興趣的可以了解一下
    2024-01-01

最新評論