改进的DBSCAN算法,点云可变 EPS 阈值 DBSCAN 聚类(附open3d python代码)

本文介绍了改进的DBSCAN算法,重点在于点云数据的聚类过程中使用可变的EPS阈值。通过这种方式,算法能够更好地适应不同密度的点云区域,提高聚类效果。文章提供了使用Python的open3d库实现该算法的详细步骤和代码示例。
摘要由CSDN通过智能技术生成
对传统的 DBSCAN 算法进行了改进,
聚类半径随扫描距离的变化自适应地改变,
远距离障碍物 点云聚类效果得到提高。
实验结果表明,所提方法对不同距离的障碍物都
能实现良好的聚类。

对比效果图:


激光点云数据密度与扫描距离呈负相关,扫描距离越近,点云数据越稠密,
扫描距离越远,点云数据越稀疏,DBSCAN 算法对数据密度和聚类间距差较敏感,
主要依赖对 eps 距离参数的调试,在数据分布均匀时聚类效果良好,
但在数据分布不均匀时聚 类效果较差,不同的参数对最后的聚类效果有很大影响。
针对激光点云数据量大和分布不均的问题,对传统 DBSCAN 算法
改进参数输入方式。DBSCAN 算法对参数 eps 和 MinPts 非常敏感,
当点云数据分布不均匀且聚 类间距相差较大时,很难选取一个恰当的参数值
使 得在不同距离上都能实现良好聚类。


# coding:utf-8

import numpy as np


# 点云聚类变形
def vector_distance_v2(v):
    """
    把单个向量内部的每个元素两两相减,得到一个差值矩阵,矩阵是上三角和下三角刚好相反的结果
    :param v: 可以是一个一维数组,或者一个一维的列表
    :return:
    """
    if type(v) is list:
        v = np.array(v)
    # result = []
    # for i in range(len(v)):
    #     result.append(v[i] - v)  # 可以改为列表推导式
    result = [v[i] - v  for i in range(len(v))]
    return np.vstack(result)


def point_distance(points):
    """   是否可以只计算上三角或者下三角矩阵,这样计算量减少了一半&#
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云-激光雷达-Slam-三维牙齿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值