【Lidar】Open3D点云DBSCAN聚类算法:基于密度的点云聚类(单木分割)附Python代码

1 DBSCAN算法介绍

        DBSCAN聚类算法是一种基于密度的聚类算法,全称为“基于密度的带有噪声的空间聚类应用”,英文名称为Density-Based Spatial Clustering of Applications with Noise。

        DBSCAN聚类算法能够发现任意形状的类别,并且对噪音数据具有较强的鲁棒性。其基本思想是,如果一个点在给定的邻域内有足够多的相邻点,那么该点就是一个核心点;如果一个点在给定的邻域内没有足够多的相邻点,那么该点就是一个边界点;如果一个点既不是核心点也不是边界点,那么该点就是噪音点。

        DBSCAN聚类算法的优点在于,它只需要扫描一遍数据集即可完成聚类,不需迭代执行,因此具有较高的效率。此外,DBSCAN聚类算法可以发现任意形状的簇,而不仅仅是凸形簇。

        在实际应用中,DBSCAN聚类算法可以应用于许多领域,如图像处理、文本挖掘、生物信息学等。例如,在图像处理中,可以使用DBSCAN聚类算法对图像进行分割和识别;在文本挖掘中,可以使用DBSCAN聚类算法对文本进行主题分类和情感分析;在生物信息学中,可以使用DBSCAN聚类算法对基因序列进行聚类分析。总之,DBSCAN聚类算法是一种非常实用的聚类算法,可以应用于许多领域。

2 Python代码

        我这里使用的是Open3D库自带的DBSCAN算法,主要参数就两个:1、eps: 这是确定邻域的半径。它决定了在考虑一个点是否在某个点的邻域时,我们考虑的范围有多大。2、min_points: 这是构成一个簇所需要的最少点数。如果一个点的邻域中包含的点数少于这个值,那么这个点将被视为噪声点,不会加入任何簇。

# -*- coding: utf-8 -*-
"""
@Time : 2023/11/3 14:37
@Auth : RS迷途小书童
@File :Point Cloud Clustering.py
@IDE :PyCharm
@Purpose:点云聚类
"""
import open3d as o3d
import numpy as np
import matplotlib.pyplot as plt


def DBSCAN():
    # 欧式聚类,注意eps和min_points的取值
    pcd_path = r"4 - Cloud.pcd"
    pcd = o3d.io.read_point_cloud(pcd_path)
    pcd = o3d.geometry.PointCloud(pcd)
    print(pcd)
    # pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
    with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Debug) as cm:
        labels = np.array(pcd.cluster_dbscan(eps=0.045, min_points=20, print_progress=True))
        # eps: 这是确定邻域的半径。它决定了在考虑一个点是否在某个点的邻域时,我们考虑的范围有多大。
        # min_points: 这是构成一个簇所需要的最少点数。如果一个点的邻域中包含的点数少于这个值,那么这个点将被视为噪声点,不会加入任何簇。
    max_label = max(labels)  # 最大的类别值
    print(f"point cloud has {max_label + 1} clusters")
    colors = plt.get_cmap("tab20")(labels / (max_label if max_label > 0 else 1))
    colors[labels < 0] = 0  # 类别为0的,颜色设置为黑色
    pcd.colors = o3d.utility.Vector3dVector(colors[:, :3])  # ndarray to vector3d
    o3d.visualization.draw([pcd], width=1920, height=1080)
    output_path = "clustered_point_cloud.pcd"
    o3d.io.write_point_cloud(output_path, pcd)


if __name__ == "__main__":
    DBSCAN()

3 效果展示

4 总结

        总的来说,DBSCAN算法还是不错的,它作为基于欧式距离为基础的密度聚类算法在表现上还可以。但是对于完善地林业单木分割还是有些困难,可能还需要加入其他算法来修正它的结果。其次在DBSCAN算法的参数方面需要好好臻选,如果搜索半径设置的过大程序就会执行很长一段时间!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/257313.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3+Echarts:堆积柱状图的绘制

一、需求 在Vue3项目中&#xff0c;想用Echarts来绘制堆积柱状图&#xff0c;去展示最近一周APP在不同渠道的登录人数效果如下&#xff1a; 二、实现 (关于Echarts的下载安装以及图表的样式设计&#xff0c;此处不展开&#xff01;) 1、Templates部分 <template>&l…

Metashape 自定义比例尺 / 无POS时如何制作DEM

前言操作步骤 前言 Metashape 自定义比例尺 和 无POS时如何制作DEM&#xff0c;此二者的操作步骤本质上是一样的。 当我们输入的照片没有POS&#xff0c;且没有做像控点的时候&#xff0c;比如我们仅仅拍摄了一个比较小的物体&#xff0c;可能是一瓶饮料或者一个椅子。 那么此…

用于噪声和分段相位测量的鲁棒相位展开算法(全文翻译-2区Optics Express)

摘要&#xff1a;本文提出了一种在存在噪声和分段相位的情况下进行相位展开的鲁棒相位展开算法&#xff08;RPUA&#xff09;。RPUA方法提出了一种新的相位导数模型&#xff0c;结合纠错迭代来实现抗噪声效果。此外&#xff0c;它使用数值载波频率和条纹外推法在空间域中桥接相…

git缓存区、本地仓库、远程仓库的同步问题(初始化库无法pull和push)

git新建库与本地库同步 gitee使用教程&#xff0c;git的下载与安装接不在叙述了。 新建远程仓库 新建远程仓库必须要使用仓库提供的api&#xff0c;也就是仓库门户网站&#xff0c;例如gitee&#xff0c;github&#xff0c;gitlab等。在上图中使用gitee网址中新建了一个test仓…

你真的会写 Prompt ? 剖析 RAG 应用中的指代消解

随着 ChatGPT 等大语言模型(LLM)的不断发展&#xff0c;越来越多的研究人员开始关注语言模型的应用。 其中&#xff0c;检索增强生成&#xff08;Retrieval-augmented generation&#xff0c;RAG&#xff09;是一种针对知识密集型 NLP 任务的生成方法&#xff0c;它通过在生成过…

带外应用程序安全测试 (OAST)

Burp Suite的polling.oastify.com的dns请求类似全流量中的旁路检测&#xff0c;或是云原生中的边车模式检测&#xff0c;类似引用带外的DNSLog。 一、传统的动态测试 传统的动态测试简单而优雅。从本质上讲&#xff0c;它将有效负载发送到目标应用程序并分析返回的响应 - 就像…

清华提出ViLa,揭秘 GPT-4V 在机器人视觉规划中的潜力

人类在面对简洁的语言指令时&#xff0c;可以根据上下文进行一连串的操作。对于“拿一罐可乐”的指令&#xff0c;若可乐近在眼前&#xff0c;下意识的反应会是迅速去拿&#xff1b;而当没看到可乐时&#xff0c;人们会主动去冰箱或储物柜中寻找。这种自适应的能力源于对场景的…

Vim命令大全(超详细,适合反复阅读学习)

Vim命令大全 Vim简介Vim中的模式光标移动命令滚屏与跳转文本插入操作文本删除操作文本复制、剪切与粘贴文本的修改与替换文本的查找与替换撤销修改、重做与保存编辑多个文件标签页与折叠栏多窗口操作总结 Vim是一款文本编辑器&#xff0c;是Vi编辑器的增强版。Vim的特点是快速、…

云仓酒庄的品牌雷盛红酒LEESON分享起泡酒要醒酒吗?

常喝葡萄酒的朋友知道&#xff0c;陈年酒、单宁含量重的红酒都需要在喝之前进行醒酒&#xff0c;有朋友问了&#xff0c;起泡酒需要醒酒吗&#xff1f;关于起泡酒醒酒有两种声音&#xff0c;有人反对&#xff0c;认为醒酒会让起泡酒失去细腻的泡泡。有人支持认为醒酒可以让起泡…

蜘点云原生之 KubeSphere 落地实践过程

作者&#xff1a;池晓东&#xff0c;蜘点商业网络服务有限公司技术总监&#xff0c;从事软件开发设计 10 多年&#xff0c;喜欢研究各类新技术&#xff0c;分享技术。 来源&#xff1a;本文由 11 月 25 日广州站 meetup 中讲师池晓东整理&#xff0c;整理于该活动中池老师所分享…

内网安全—Windows系统内核溢出漏洞提权

系统内核溢出漏洞提权 往缓冲区中写入超出限定长度的内容&#xff0c;造成缓冲区溢出&#xff0c;从而破坏程序的堆栈进而运行自己精心准备的指定代码&#xff0c;达到攻击的目的。 分类&#xff1a; 堆溢出 栈溢出 查找补丁的方法 1、手工查找补丁情况 systeminfo Wmic qfe…

福德植保无人机:让植保工作更轻松

亲爱的读者们&#xff0c;欢迎来到我们的公众号&#xff01;今天&#xff0c;我想和大家分享一个我们生活中不可或缺的东西——福德植保无人机。它不仅改变了我们的植保工作&#xff0c;更提升了工作效率&#xff0c;减少了人工负担。福德植保无人机&#xff0c;一家在植保无人…

3ds max软件中的一些常用功能分享!

3ds max软件有很多小伙伴反馈说&#xff0c;明明有很多3ds max教程资料。却不知道如何入门3dmax。 掌握3dmax基本功能是开始使用3dmax的基础之一&#xff0c;所以&#xff0c;小编带大家盘点一下3dmax常用操作。 3dmax常用功能介绍如下&#xff0c;快快跟着小编一起看起来。 1…

回归预测 | MATLAB实现GA-LSSVM基于遗传算法优化最小二乘向量机的多输入单输出数据回归预测模型 (多指标,多图)

回归预测 | MATLAB实现GA-LSSVM基于遗传算法优化最小二乘向量机的多输入单输出数据回归预测模型 &#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现GA-LSSVM基于遗传算法优化最小二乘向量机的多输入单输出数据回归预测模型 &#xff08;多指标&#…

红外二极管发射电路图大全

红外二极管发射电路图&#xff08;一&#xff09; 传感器检测及声光报警电路 传感器模块由热释电传感器、烟雾传感器MQ211和红外传感器组成。 烟雾传感器的内部电阻是随着烟雾的浓度的变化而变化&#xff0c;因此要将其转化为变化的电压信号&#xff0c;在此通过电压比较器LM…

智能监控平台/视频共享融合系统EasyCVR如何做到不被其他软件强制终止?具体如下

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。国标GB28181流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频…

linux 多路径multipath的安装

1. 什么是多路径 在计算机系统中&#xff0c;多路径是指在存储系统中使用多个物理路径来连接主机和存储设备&#xff0c;以增加系统的可用性和容错性。多路径技术的目标是提供冗余路径&#xff0c;以确保在某个路径发生故障时&#xff0c;数据仍然可以通过其他路径进行传输具体…

【UE5.1】M4自动地形材质+UltraDynamicSky+Oceanology插件的使用记录

目录 效果 步骤 一、项目准备 二、插件使用记录 准备过程 M4自动地形插件使用过程 超动态天空插件使用过程 运行时修改天空效果 运行时修改天气效果 海洋插件使用过程 在海洋中游泳 效果 步骤 一、项目准备 1. 创建一个第三人称游戏工程 2. 将M4文件夹和Ultr…

解决ZooKeeper中/rmstore无法删除问题

无法删除znode /rmstore的原因在于yarn在注册时候候自己添加上ACL&#xff0c;导致无法直接删除。解决办法&#xff1a;重新设置ACL。 首先&#xff0c;查看ACL&#xff1a;getAcl /rmstore/ZKRMStateRoot 之后&#xff0c;重新设置ACL&#xff1a;setAcl /rmstore/ZKRMState…

产品入门第六讲:Axure中继器

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Axure》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c…