三维点云中DBSCAN的使用
2021/6/29 23:23:18
本文主要是介绍三维点云中DBSCAN的使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D size = 30 ##计算欧式距离 def distEuclid(x,y): return np.sqrt(np.sum((x-y)**2)) ##随机产生n个dim维度的数据 (这里为了展示结果 dim取2或者3) def genDataset(n,dim): data = [] while len(data)<n: p = np.around(np.random.rand(dim)*size,decimals=2) data.append(p) return data ##判断两点是否在范围内 def isNeighbor(x,y,eps): return distEuclid(x,y)<=eps ##获取某一点邻域内的点 def getSeedPos(pos,data,eps): seed = [] for p in range(len(data)): if isNeighbor(data[p],data[pos],eps): seed.append(p) return seed ##获取核心点列表 def getCorePointsPos(data,eps,minpts): cpoints=[] for pos in range(len(data)): if len(getSeedPos(pos,data,eps))>=minpts: cpoints.append(pos) return cpoints ##分类 def getCluster(data,eps,minpts): corePos = getCorePointsPos(data,eps,minpts) unvisited =list(range(len(data))) cluster = {} num = 0 for pos in corePos: if pos not in unvisited: continue clusterpoint = [] clusterpoint.append(pos) seedlist = getSeedPos(pos,data,eps) unvisited.remove(pos) while seedlist: p = seedlist.pop(0) if p not in unvisited: continue unvisited.remove(p) clusterpoint.append(p) if p in corePos: seedlist.extend(getSeedPos(p,data,eps)) cluster[num] = clusterpoint num+=1 cluster["noisy"]=unvisited return cluster ##展示结果 各类簇使用不同的颜色 中心点使用X表示 def Show(data,cluster): num,dim = data.shape color = ['r','g','c','y','m','b','pink','maroon','tomato','peru','lawngreen','gold','aqua','dodgerblue'] ##二维图 if dim==2: for i in cluster: pos = cluster[i] if i=="noisy": for p in pos: plt.plot(data[p,0],data[p,1],'o',c='k') else: for p in pos: plt.plot(data[p,0],data[p,1],'o',c=color[i]) ##三维图 elif dim==3: ax = plt.subplot(111,projection ='3d') for i in cluster: pos = cluster[i] if i=="noisy": for p in pos: ax.scatter(data[p,0],data[p,1],data[p,2],c='black') else: for p in pos: ax.scatter(data[p,0],data[p,1],data[p,2],c=color[i]) plt.show() data = np.array(genDataset(80,3)) print(type(data)) print(data.shape) cl = getCluster(data,6,4) Show(data,cl)
这篇关于三维点云中DBSCAN的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28pyqt 怎么打包整个项目-icode9专业技术文章分享
- 2024-09-28laravel Commands 创建带有参数的 Artisan 命令的步骤和示例-icode9专业技术文章分享
- 2024-09-28antd怎么实现渲染tiff图片-icode9专业技术文章分享
- 2024-09-28英文半角中划线和中文全角的中划线有什么区别-icode9专业技术文章分享
- 2024-09-28nvm npm 和node 他们之间有什么关系-icode9专业技术文章分享
- 2024-09-28Node Version Manager (nvm)使用教程-icode9专业技术文章分享
- 2024-09-28nvm命令太慢,是什么原因-icode9专业技术文章分享
- 2024-09-28Kotlin 如何增加、删除和修改 MutableStateFlow 中的值。-icode9专业技术文章分享
- 2024-09-28Kotlin的stateFlow.update 写法介绍-icode9专业技术文章分享
- 2024-09-28kotlin 怎么获取当前时间格式-icode9专业技术文章分享