条件欧几里得聚类

本教程介绍如何使用pcl::ConditionalEuclideanClustering类:一种基于欧几里得距离和用户可自定义条件对点进行聚类的分割算法。

此类使用与欧几里得聚类提取区域增长分割基于颜色的区域增长分割相同的贪婪/区域增长/洪水填充方法。与其他类相比,使用此类的优势在于用户现在可以自定义聚类约束(纯欧几里德、平滑度、RGB)。一些缺点包括:没有初始播种系统,没有过度和不足分割控制,以及从主计算循环内部调用条件函数的时间效率较低。

源码:
创建:conditional_euclidean_clustering.cpp 文件

  1#include <pcl/point_types.h>
  2#include <pcl/io/pcd_io.h>
  3#include <pcl/console/time.h>
  4
  5#include <pcl/filters/voxel_grid.h>
  6#include <pcl/features/normal_3d.h>
  7#include <pcl/segmentation/conditional_euclidean_clustering.h>
  8
  9typedef pcl::PointXYZI PointTypeIO;
 10typedef pcl::PointXYZINormal PointTypeFull;
 11
 12bool
 13enforceIntensitySimilarity (const PointTypeFull& point_a, const PointTypeFull& point_b, float /*squared_distance*/)
 14{
 15  if (std::abs (point_a.intensity - point_b.intensity) < 5.0f)
 16    return (true);
 17  else
 18    return (false);
 19}
 20
 21bool
 22enforceNormalOrIntensitySimilarity (const PointTypeFull& point_a, const PointTypeFull& point_b, float /*squared_distance*/)
 23{
 24  Eigen::Map<const Eigen::Vector3f> point_a_normal = point_a.getNormalVector3fMap (), point_b_normal = point_b.getNormalVector3fMap ();
 25  if (std::abs (point_a.intensity - point_b.intensity) < 5.0f)
 26    return (true);
 27  if (std::abs (point_a_normal.dot (point_b_normal)) > std::cos (30.0f / 180.0f * static_cast<float> (M_PI)))
 28    return (true);
 29  return (false);
 30}
 31
 32bool
 33customRegionGrowing (const PointTypeFull& point_a, const PointTypeFull& point_b, float squared_distance)
 34{
 35  Eigen::Map<const Eigen::Vector3f> point_a_normal = point_a.getNormalVector3fMap (), point_b_normal = point_b.getNormalVector3fMap ();
 36  if (squared_distance < 10000)
 37  {
 38    if (std::abs (point_a.intensity - point_b.intensity) < 8.0f)
 39      return (true);
 40    if (std::abs (point_a_normal.dot (point_b_normal)) < 0.06)
 41      return (true);
 42  }
 43  else
 44  {
 45    if (std::ab
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
欧几里聚类是一种基于欧几里得距离度量的聚类算法。该算法通过计算样本点之间的欧几里得距离来度量相似性,然后将相似性高的样本归为同一簇。欧几里聚类具有较好的可解释性和易于实现性,因此被广泛应用于许多领域。 在ROS(机器人操作系统)中实现欧几里聚类是非常容易的。ROS提供了各种强大的机器人操作函数和库,可以大大简化机器人应用程序的开发。为了实现欧几里聚类算法,需要使用ROS的机器人操作函数和库来完成机器人的相关操作。 首先,需要定义一个基于ROS的节点,用于接收和发布数据。节点可以通过ROS中的rospy库来实现。接着,需要定义消息类型和发布者/订阅者,以实现机器人和环境之间的数据传输。在此过程中,数据可以通过ROS数据可视化工具(如RViz)进行显示,以直观地观察机器人和环境之间的交互。 随着数据的接收和传输,可以计算数据的欧几里得距离,并确定相似性高的样本点。在此基础上,可以将样本点分为不同的簇并发布到节点中。最后,可以使用ROS的机器人操作函数和库来控制机器人的移动,以实现响应式控制和优化的聚类结果。 总之,通过使用ROS实现欧几里聚类算法,可以轻松地将机器人应用于各种应用场景,实现聚类分析和优化控制。同时,其易于实现和高可解释性的特点,使其在机器人工程领域具有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

目标成为slam大神

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

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

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

打赏作者

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

抵扣说明:

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

余额充值