返回顶部
首页 > 资讯 > 后端开发 > Python >python怎么实现CSF地面点滤波算法
  • 192
分享到

python怎么实现CSF地面点滤波算法

2023-06-20 20:06:43 192人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“python怎么实现CSF地面点滤波算法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么实现CSF地面点滤波算法”吧!目录一、算法原理二、读取las点云三、

这篇文章主要讲解了“python怎么实现CSF地面点滤波算法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么实现CSF地面点滤波算法”吧!

目录
  • 一、算法原理

  • 二、读取las点云

  • 三、算法源码

  • 四、结果展示

  • 五、CloudCompare实现

一、算法原理

布料模拟滤波处理流程:
1)利用点云滤波算法或者点云处理软件滤除异常点;
2)将激光雷达点云倒置;
3)设置模拟布料,设置布料网格分辨率 G R GR GR,确定模拟粒子数。布料的位置设置在点云最高点以上;
4)将布料模拟点和雷达点投影到水平面,为每个布料模拟点找到最相邻的激光点的高度值,将高度值设置为 I H V IHV IHV;
5)布料例子设置为可移动,布料粒子首先受到重力作用,当粒子高度 C H V CHV CHV小于 I H V IHV IHV时,将粒子高度设置为 I H V IHV IHV;粒子设置为不可移动;
6)计算布料粒子之间的内力作用,根据设置的布料刚性参数,调整布料粒子之间的相对位置;
7)重复进行5)和6)计算,迭代次数达到设置的最大迭代次数;
8)计算激光雷达点与对应布料模拟点的距离,距离小于阈值标记为地面点,距离大于阈值标记为非地面点。

点云地面点滤波(Cloth Simulation Filter, CSF)“布料”滤波算法介绍

二、读取las点云

参考链接: python读取las
1、GitHub: laspy
2、基础教程: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('点云个数:',len(inFile)) #读取点云个数#============保存点云为las文件===========h = inFile.headeroutFile = laspy.file.File('666.las', mode = "w", header=h)points = inFile #对点云进行的相关操作outFile.points = pointsoutFile.close() #关闭文件完成保存

三、算法源码

算法细节:CSF
2、源码获取:https://github.com/jianboqi/CSF
3、源码编译:下载源代码。在python文件夹下:
python setup.py build
python setup.py install
4、读取las并可视化算法结果

import laspyimport CSFimport numpy as npimport open3D as o3d#============读取las文件=============inFile = laspy.file.File(r"40m1.las", mode='r') # read a las filepoints = inFile.pointsxyz = np.vstack((inFile.x, inFile.y, inFile.z)).transpose() # extract x, y, z and put into a list#============布料模拟滤波============csf = CSF.CSF()# 参数设置csf.params.bSloopSmooth = False    #粒子设置为不可移动csf.params.cloth_resolution = 0.1  #布料网格分辨率csf.params.rigidness = 3  #布料刚性参数csf.params.time_step = 0.65csf.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()  # 地面点索引列表non_ground = CSF.VecInt() # 非地面点索引列表csf.do_filtering(ground, non_ground) # 执行滤波#============保存为las文件==========outFile = laspy.file.File(r"non_ground.las",                          mode='w', header=inFile.header)outFile.points = points[non_ground] # 提取非地面点保存到lasoutFile.close() # 关闭文件夹a=xyz[ground]b=xyz[non_ground]#=============可视化===============def view_cloud(a, b):    pcd = o3d.geometry.PointCloud()    # =====numpy转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='提取结果')    o3d.visualization.draw_geometries([pcd1],window_name='非地面点')    o3d.visualization.draw_geometries([pcd],window_name='地面点')view_cloud(a,b)

读取pcd文件并可视化结果

import open3d as o3dimport CSFimport numpy as nppc = o3d.io.read_point_cloud("数据//100m1.pcd")xyz = np.asarray(pc.points)csf = CSF.CSF()# prameter settingscsf.params.bSloopSmooth = Falsecsf.params.cloth_resolution = 0.1csf.params.rigidness = 3csf.params.time_step = 0.65csf.params.class_threshold = 0.03csf.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 calculationnon_ground = CSF.VecInt() # a list to indicate the index of non-ground points after calculationcsf.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='提取结果')    o3d.visualization.draw_geometries([pcd1],window_name='非地面点')    o3d.visualization.draw_geometries([pcd],window_name='地面点')view_cloud(a,b)

四、结果展示

python怎么实现CSF地面点滤波算法

五、CloudCompare实现

加载点云数据,点击Plugins中的CSF Filter功能

python怎么实现CSF地面点滤波算法

弹出如下窗口:

python怎么实现CSF地面点滤波算法
python怎么实现CSF地面点滤波算法

 图中:Cloth resolution:是指用于覆盖地形的布的网格大小(单位与点云的单位相同)。你设置的布分辨率越大,你得到的DTM就越粗糙;Max iterations:是指地形仿真的最大迭代次数。500对大多数场景来说都足够了。Classification threshold:是指根据点与模拟地形之间的距离,将点云划分为地面和非地面部分的阈值。0.5适用于大多数场景
  这里的网格分辨率和距离阈值最小只能设置为10cm,地面10cm的范围默认是地面点,精确度不如自己代码实现中的高。
3、最后得到的结果:

python怎么实现CSF地面点滤波算法

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

感谢各位的阅读,以上就是“python怎么实现CSF地面点滤波算法”的内容了,经过本文的学习后,相信大家对python怎么实现CSF地面点滤波算法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: python怎么实现CSF地面点滤波算法

本文链接: https://www.lsjlt.com/news/299915.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python怎么实现CSF地面点滤波算法
    这篇文章主要讲解了“python怎么实现CSF地面点滤波算法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python怎么实现CSF地面点滤波算法”吧!目录一、算法原理二、读取las点云三、...
    99+
    2023-06-20
  • python实现CSF地面点滤波算法原理解析
    目录一、算法原理二、读取las点云三、算法源码四、结果展示五、CloudCompare实现一、算法原理 布料模拟滤波处理流程: 1)利用点云滤波算法或者点云处理软件滤除异常点; 2)...
    99+
    2024-04-02
  • 点云地面点滤波(Cloth Simulation Filter, CSF)
    目录1. 引言2. 基本思想3. CSF算法实现步骤3.1 “布料”模拟3.2 外部/内部因素驱动3.3 具体实现3.4 后处理4. 算法使用本篇博客参考Wuming Zhang的文章“An Easy-to-Use ...
    99+
    2022-06-02
    python 点云地面点滤波 python 点滤波
  • python 点云地面点滤波-progressive TIN densification(PTD)算法介绍
    目录1.引言1.1什么是地面点滤波?1.2地面点滤波的相关方法2.PTD具体介绍2.1去除孤立点 2.2参数说明2.3选择种子点并构建TIN模型2.4迭代加密TIN模型本篇博客参考: 1)DEM gener...
    99+
    2022-06-02
    python PTD点云地面点滤波 python PTD python点云地面点滤波
  • python点云地面点滤波(Progressive Morphological Filter)算法介绍(PCL库)
    目录1. 引言2. Morphological Filters(形态学滤波) 2.1 膨胀/腐蚀2.2 形态学滤波3. Progressive Morphological Filters3.1 参数计算(窗...
    99+
    2022-06-02
    python点云地面点滤波PCL库 python点云地面点滤波 python PCL库
  • OpenCV实现双边滤波算法
    本文实例为大家分享了OpenCV实现双边滤波算法的具体代码,供大家参考,具体内容如下 一、双边滤波 双边滤波是一种综合考虑滤波器内图像空域信息和滤波器内图像像素灰度值相似性的滤波算法...
    99+
    2024-04-02
  • python opencv图像的高通滤波和低通滤波怎么实现
    这篇文章主要介绍“python opencv图像的高通滤波和低通滤波怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python opencv图像的高通滤波和低通滤波怎么实...
    99+
    2023-07-02
  • python怎么实现图像简单滤波
    这篇文章主要介绍“python怎么实现图像简单滤波”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python怎么实现图像简单滤波”文章能帮助大家解决问题。引言对图像进行滤波,可以有两种效果:一种是平...
    99+
    2023-07-02
  • Python基本形态学滤波怎么实现
    最基础的形态学操作有四个,分别是腐蚀、膨胀、开计算和闭计算,`scipy.ndimage分别实现了二值数组和灰度数组的这四种运算二值灰度binary_erosiongrey_erosion腐蚀binary_dilationgrey_dila...
    99+
    2023-05-22
    Python
  • python实现对图片进行均值滤波、中值滤波、高斯滤波处理及其原理和特点
    1.高斯滤波         1)原理:对图像邻域内像素进行平滑时,邻域内不同位置的像素被赋予不同的权值。         2)特点:对图像进行平滑的同时,同时能够更多的保留图像的总体灰度分布特征。         3)代码 import ...
    99+
    2023-10-18
    python 开发语言
  • python怎么实现卡尔曼滤波数据处理
    这篇文章主要介绍“python怎么实现卡尔曼滤波数据处理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python怎么实现卡尔曼滤波数据处理”文章能帮助大家解决问题。什么是卡尔曼滤波先看看百度百科解...
    99+
    2023-06-30
  • C#实现一阶卡尔曼滤波算法的示例代码
    //FilterKalman.cs namespace FusionFiltering { public class FilterKalman { ...
    99+
    2024-04-02
  • Python怎么实现低通滤波器模糊图像功能
    使用低通滤波器模糊图像0. 前言低通滤波器 (Low Pass Filter, LPF) 过滤了图像中的高频部分,并仅允许低频部分通过。因此,在图像上应用 LPF 会删除图像中的细节/边缘和噪声/离群值,此过程也称为图像模糊(或平滑),图像...
    99+
    2023-05-14
    Python
  • Python基于DFA算法怎么实现内容敏感词过滤
    这篇文章主要讲解了“Python基于DFA算法怎么实现内容敏感词过滤”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python基于DFA算法怎么实现内容敏感词过滤”吧!DFA 算法是通过提前...
    99+
    2023-06-30
  • Python协同过滤算法怎么用
    本篇内容介绍了“Python协同过滤算法怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、数据准备L...
    99+
    2024-04-02
  • c语言斐波那契数列算法怎么实现
    斐波那契数列是指每个数都是前两个数之和的数列,即F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2)(n...
    99+
    2023-10-30
    c语言
  • Java怎么使用DFA算法实现敏感词过滤
    本篇内容主要讲解“Java怎么使用DFA算法实现敏感词过滤”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么使用DFA算法实现敏感词过滤”吧!1 前言敏感词过滤就是你在项目中输入某些字(...
    99+
    2023-07-05
  • python斐波那契数列递归算法怎么用
    要编写斐波那契数列的递归算法,可以按照以下步骤进行: 确定递归的结束条件:斐波那契数列的前两个数为1和1,所以当序号为1或2时,...
    99+
    2023-10-22
    python
  • Python怎么实现斐波那契数列
    这篇文章主要介绍“Python怎么实现斐波那契数列”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么实现斐波那契数列”文章能帮助大家解决问题。1、递归方法输出斐波那契数列第n个元素的值2...
    99+
    2023-06-28
  • Python基于DFA算法实现内容敏感词过滤
    DFA 算法是通过提前构造出一个 树状查找结构,之后根据输入在该树状结构中就可以进行非常高效的查找。 设我们有一个敏感词库,词酷中的词汇为: 我爱你我爱他我爱她我爱你呀我爱他呀我爱她...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作