【编程实践】利用open3d对点云进行聚类并可视化

功能:对点云进行DBSCAN聚类,可视化聚类结果并统计噪声比例。
输入:DungouCut.pcd点云文件。
输出:聚类数量、噪声比例及彩色可视化结果。
注意:eps和min_points需根据点云密度调整。
调优方向:通过average_distance动态设置eps,或网格搜索最佳参数组合。

# -*- coding: utf-8 -*-
"""
Created on Jan 27 16:39 2025

@author: zhiyang
"""
import open3d as o3d
import numpy as np
import matplotlib.pyplot as plt
cloud_in = o3d.io.read_point_cloud('data_input\\DungouCut.pcd')
cloud_points = np.asarray(cloud_in.points)
kdtree = o3d.geometry.KDTreeFlann(cloud_in)
distances = []

for i in range(len(cloud_points)):
    [_, idx, d] = kdtree.search_knn_vector_3d(cloud_in.points[i], 2)
    diatance = np.sqrt(d[1])
    distances.append(diatance)
average_distance = np.mean(distances)

eps = 10 * average_distance
min_points = 10
labels = np.array(cloud_in.cluster_dbscan(eps = eps, min_points = min_points, print_progress = True))
max_label = labels.max()
print(f"聚类数量:{max_label+1}")
print(f"噪声比例:{np.sum(labels == -1) / len(labels):.3f}")
colors = plt.get_cmap("tab20")(labels / (max_label if max_label > 0 else 1))
colors[labels < 0] = [0,0,0,1]
cloud_in.colors = o3d.utility.Vector3dVector(colors[:, :3])
o3d.visualization.draw_geometries([cloud_in])

运行所需要依赖第三方库如下:

# reqiurements.txt
matplotlib==3.7.5
numpy==1.24.3
numpy==1.24.4
open3d==0.17.0
pyvista==0.44.2
scikit_learn==1.3.2

运行结果如下:
在这里插入图片描述

### 关于点云数据处理中的相贯焊缝提取技术 在工业领域,尤其是涉及复杂结构件制造的过程中,焊接质量控制至关重要。对于点云数据而言,其高精度的空间信息能够有效支持复杂的几何特征识别任务,例如相贯焊缝的提取。 #### 1. 基础理论与算法概述 点云数据通常由三维扫描设备获取,这些数据包含了大量离散空间坐标点的信息。为了从点云中提取相贯焊缝,可以采用基于分割、拟合以及特征检测的方法组合来实现目标区域的精确定位[^1]。具体来说: - **分割阶段**:通过聚类或其他分割手段将原始点云划分为多个子集,以便区分不同的表面或部件接口位置。 - **边界捕捉**:利用边缘探测器或者曲率分析找到可能存在的接头部位,在此过程中可能会涉及到计算局部邻域内的法向量变化情况作为判断依据之一[^2]。 - **模型匹配/参数估计**:一旦初步定位到疑似焊缝所在的候选区,则可进一步运用最小二乘法或者其他优化策略去估算最佳拟合曲线(直线段或者是圆弧),从而描述实际物理世界里的连接形式——即所谓的“相贯线”。 #### 2. 工具推荐 针对上述提到的各种操作需求,目前市面上存在多种开源软件库可以帮助开发者快速搭建解决方案框架: - PCL (Point Cloud Library): 这是一个非常流行的C++编程环境下的跨平台集合体,提供了丰富的功能模块用于执行诸如滤波、配准、分组等一系列常见流程;同时也内置了一些高级特性比如RANSAC随机采样一致性算法可用于鲁棒地剔除异常值干扰完成平面形状重建等工作流环节[^3]。 - Open3D: 另一款新兴崛起的支持Python绑定的语言选项,它同样具备强大的可视化渲染能力外加简便易懂的应用程序界面设计风格,适合初学者上手尝试简单的原型验证项目开发活动当中去实践探索更多可能性方向上的研究进展成果展示效果等方面考虑因素影响较大程度取决于个人喜好偏好不同而定最终选择哪一种更加合适自己当前实际情况所需条件限制范围内做出明智决策考量之后再做决定比较好一点哦! #### 3. 实现代码片段示例 下面给出一段简单演示如何使用PCL来进行基本预处理工作的例子: ```cpp #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> int main () { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); // Fill in the cloud data pcl::io::loadPCDFile ("test_pcd.pcd", *cloud); std::cerr << "Cloud before filtering has: " << cloud->points.size () << " data points." << std::endl; // Create the filtering object pcl::VoxelGrid<pcl::PointXYZ> sor; sor.setInputCloud (cloud); sor.setLeafSize (0.01f, 0.01f, 0.01f); sor.filter (*cloud); std::cerr << "Cloud after filtering has: " << cloud->points.size () << " data points." << std::endl; } ``` 以上仅展示了降噪过程的一个方面,完整的应用还需要结合具体的业务逻辑定制化扩展相应部分的功能实现细节等内容才行呢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值