4.3 DBSCAN聚类算法(自己写的函数python)

news/2024/5/20 9:22:40 标签: 算法, python, 聚类

代码如下:

import numpy as np
import cv2
import time
import os


#聚类算法
def cluster(points, radius=100,nums=250):
    """
    points: pointcloud
    radius: max cluster range
    """
    print("................", len(points))
    items = []
    while len(points)>1:
        item = np.array([points[0]])
        base = points[0]
        points = np.delete(points, 0, 0)
        distance = (points[:,0]-base[0])**2+(points[:,1]-base[1])**2#获得距离
        infected_points = np.where(distance <= radius**2)#与base距离小于radius**2的点的坐标
        item = np.append(item, points[infected_points], axis=0)
        border_points = points[infected_points]
        points = np.delete(points, infected_points, 0)
        while len(border_points) > 0:
            border_base = border_points[0]
            border_points = np.delete(border_points, 0, 0)
            border_distance = (points[:,0]-border_base[0])**2+(points[:,1]-border_base[1])**2
            border_infected_points = np.where(border_distance <= radius**2)
            #print("/",border_infected_points)
            item = np.append(item, points[border_infected_points], axis=0)
            if len(border_infected_points)>0:
                for k in border_infected_points:
                    if points[k] not in border_points:
                        border_points=np.append(border_points,points[k], axis=0)
                #border_points = points[border_infected_points]
            points = np.delete(points, border_infected_points, 0)
        if len(item) >= nums:
            items.append(item)
    return items



if __name__ == '__main__':

    start=time.time()
    img_paths = r"D:\AI\project\eye_hand_biaoding\railways\dbscan\img\000003.jpg"
    img = cv2.imread(img_paths,0)
    clusters=cluster(points, radius=100,nums=250)



        代码中的第一个函数是聚类算法,输入的参数是灰度图片,聚类的半径,和成为类的最少点的个数。建议使用该算法时尽量减小数据量,如果图片的像素很大,可以截取成几个部分进行聚类


http://www.niftyadmin.cn/n/5416637.html

相关文章

点云数据切片及使用threejs加载

测试点云数数据大小 2.94G cesium 加载&#xff1a; 数据处理&#xff1a;cesiumlab 点云切片->cesium 3Dtiles API 加载 threejs 加载 只支持 pcd 格式&#xff0c;故将 lsa 数据导入&#xff0c;在导出为了 pcd&#xff0c;在将数据直接转出 pcd 会直接闪退&#xff0…

Spring Boot中实现图片上传功能的两种策略

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

IntelliJ IDEA Dev 容器

​一、dev 容器 开发容器&#xff08;dev 容器&#xff09;是一个 Docker 容器&#xff0c;配置为用作功能齐全的开发环境。 IntelliJ IDEA 允许您使用此类容器来编辑、构建和运行您的项目。 IntelliJ IDEA 还支持多个容器连接&#xff0c;这些连接可以使用 Docker Compose …

如何修复eutil.dll文件,eutil.dll下载安装教程

在我们使用计算机的时候&#xff0c;偶尔会遭遇一些技术问题&#xff0c;其中一个比较常见的问题就是出现了"丢失eutil.dll文件"的提示。当我们的电脑告诉我们缺少了eutil.dll文件时&#xff0c;常常是因为某些程序无法找到这个文件而导致了程序的运行异常。那我们应…

设计模式-行为型模式-职责链模式

在软件系统运行时&#xff0c;对象并不是孤立存在的&#xff0c;它们可以通过相互通信协作完成某些功能&#xff0c;一个对象在运行时也将影响到其他对象的运行。行为型模式&#xff08;Behavioral Pattern&#xff09;关注系统中对象之间的交互&#xff0c;研究系统在运行时对…

一、NLP中的文本分类

目录 1.0 文本分类的应用场景 1.1 文本分类流程 ​编辑 1.2 判别式模型 1.3 生成式模型 1.4 评估 1.5 参考文献 1.0 文本分类的应用场景 &#xff08;1&#xff09;情感分析&#xff1a;中性&#xff0c;正向评论&#xff0c;负向评论&#xff0c;黄色言论&#xff0c;暴…

《MySQL数据库》day2--连接查询、子查询、union、limit、DML语句

文章目录 1.把查询结果去除重复记录 -》distinct2.连接查询2.1什么是连接查询&#xff1f;2.2连接查询的分类2.3笛卡尔积现象2.4内连接2.4.1内连接之等值连接。2.4.2内连接之非等值连接2.4.3内连接之自连接 2.5外连接2.6三张表&#xff0c;四张表怎么连接&#xff1f; 3.子查询…

AI + X 三月组队学习来了!

Datawhale学习 联合发起&#xff1a;阿里云ModelScope、趋动云 AIX系列&#xff1a;和学习生态伙伴联合发起&#xff0c;将人工智能&#xff08;AI&#xff09;与各个学科、领域、行业&#xff08;X&#xff09;结合&#xff0c; 激发无限潜力和创造力&#xff08;X&#xff0…