KDTree索引(K近邻搜索,半径R内近邻搜索)——PCL

news2025/1/9 1:14:27

K近邻搜索(K Nearest Neighbors)

  • K近邻搜索是一种基于点数量的搜索方法,它会找到指定点附近最接近的K个邻居点。
  • K近邻搜索中的K值是一个参数,您需要指定要搜索的邻居数量。
  • 该方法适用于需要查找固定数量邻居点的情况,例如K最近邻分类器和最近邻插值等。
	/// <summary>
	/// kdtree的k近邻索引
	/// </summary>
	/// <param name="cloud">需要所有的点云</param>
	/// <param name="searchPoint">需要索引的点</param>
	/// <param name="k">索引的个数</param>
	/// <returns>返回索引出点的编号数组</returns>
std::vector<int> PclTool::kdtreeKSearch(const pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, const pcl::PointXYZ searchPoint, const unsigned int k)
{
    // 创建KdTreeFLANN对象,并把创建的点云设置为输入,searchPoint变量作为查询点
    pcl::KdTreeFLANN<pcl::PointXYZ> kdtree; 
    // 设置搜索空间
    kdtree.setInputCloud(cloud);
    std::vector<int> pointIdxNKNSearch(k);          // 存储查询点近邻索引
    std::vector<float> pointNKNSquaredDistance(k);  // 存储近邻点对应距离平方

	  // 打印相关信息
    std::cout << "K nearest neighbor search at (" << searchPoint.x << " " << searchPoint.y << " " << searchPoint.z << ") with K=" << k << std::endl;

	if (kdtree.nearestKSearch(searchPoint, k, pointIdxNKNSearch, pointNKNSquaredDistance) > 0)  // 执行K近邻搜索
    {
        return pointIdxNKNSearch;
		 打印所有近邻坐标
		//for (size_t i = 0; i < pointIdxNKNSearch.size(); ++i)
		//{
		//	std::cout << "    " << cloud->points[pointIdxNKNSearch[i]].x << " " << cloud->points[pointIdxNKNSearch[i]].y << " " << cloud->points[pointIdxNKNSearch[i]].z << " (squared distance: " << pointNKNSquaredDistance[i] << ")" << std::endl;
		//}
    }
	else
	{
        return std::vector<int>();
	}
}

截取出兔子耳朵的部分
在这里插入图片描述

半径R内近邻搜索(Radius Neighbors):

  • 半径R内近邻搜索是一种基于距离阈值的搜索方法,它会找到距离指定点在半径R范围内的所有邻居点。
  • R是搜索半径,指定了要搜索的邻居点的最大距离。
  • 该方法适用于需要查找在一定距离范围内的邻居点的情况,例如密度估计和聚类等。
    /// <summary>
    /// kdtree的半径近邻索引
    /// </summary>
    /// <param name="cloud">需要所有的点云</param>
    /// <param name="searchPoint">需要索引的点</param>
    /// <param name="radius">索引半径</param>
    /// <returns>返回索引出点的编号数组</returns>
    static std::vector<int> kdtreeRadiusSearch(const pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, const pcl::PointXYZ searchPoint, const float radius)
    {
    // 创建KdTreeFLANN对象,并把创建的点云设置为输入,searchPoint变量作为查询点
    pcl::KdTreeFLANN<pcl::PointXYZ> kdtree;
    kdtree.setInputCloud(cloud);

    std::vector<int> pointIdxRadiusSearch;          // 存储近邻索引
    std::vector<float> pointRadiusSquaredDistance;  // 存储近邻对应距离的平方

    if (kdtree.radiusSearch(searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0)  // 执行半径R内近邻搜索方法
    {
        return pointIdxRadiusSearch;
    }
    else
    {
        return std::vector<int>();
    }
}

截取出兔子上半身
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1601896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2W 3KVDC 隔离 稳压单输出 DC/DC 电源模块——TPK-SAR 系列介绍

TPK-SAR系列产品是专门针对PCB上分布式电源系统中需要与输入电源隔离且输出精度要求较高的电源应用场合而设计。该产品适用于&#xff1b;1&#xff09;输入电源的电压变化≤5%&#xff1b;2&#xff09;输入输出之前要求隔离电压≥3000VDC&#xff1b;3&#xff09;对输出电压…

使用两台主机实现博客的搭建

1.运行环境 这里的主机IP是自己虚拟器的IP。 主机主机名系统服务192.168.179.128Server-WebLinuxWeb192.168.179.129Server-NFSDNSLinuxNFS/DNS 2.基础配置 1.配置主机名&#xff0c;静态IP地址 2.开启防火墙并配置 3.部分开启SElinux并配置 4.服务器之间使用同ntp.aliyun.com…

正整数分解-第12届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第54讲。 正整数分解&#…

Golang 开发实战day11 - Pass By Value

&#x1f3c6;个人专栏 &#x1f93a; leetcode &#x1f9d7; Leetcode Prime &#x1f3c7; Golang20天教程 &#x1f6b4;‍♂️ Java问题收集园地 &#x1f334; 成长感悟 欢迎大家观看&#xff0c;不执着于追求顶峰&#xff0c;只享受探索过程 Golang 开发实战day11 - 按值…

如何阻止访问您的网站

本周有一个客户&#xff0c;购买Hostease的HK Basic Linux虚拟主机&#xff0c;询问我们的在线客服&#xff0c;如何阻止部分地区或IP段访问他的网站。我们为用户提供教程&#xff0c;用户很快完成了设置。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以对您有帮助…

管理 nodejs 版本工具 nvm

nvm 方便切换不同版本的 node 及 对应的 npm 版本 一、安装nvm nvm官网 &#xff08;内含下载的文件&#xff0c;点击进去下载&#xff0c;并按照 网站文档步骤 操作即可&#xff09; 二、nvm 基础命令 nvm arch&#xff1a;显示node是运行在32位还是64位。nvm install <…

网上订餐系统|基于springboot的网上订餐系统设计与实现(源码+数据库+文档)

网上订餐系统目录 目录 基于springboot的网上订餐系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户功能模块的实现 &#xff08;1&#xff09;用户注册界面 &#xff08;2&#xff09;用户登录界面 &#xff08;3&#xff09;菜品详情界面 &#xff08…

随动系统同步性问题(跟随给定和跟随反馈的区别)

1、运动控制比例随动 运动控制比例随动系统_正运动随动系统-CSDN博客文章浏览阅读1.4k次,点赞2次,收藏5次。PLC如何测量采集编码器的位置数据,不清楚的可以参看我的另一篇博文:三菱FX3U PLC高速计数器应用(附代码)_RXXW_Dor的博客-CSDN博客本文主要以三菱FX3U系列的高速…

Groovy程序设计-【第一部分Groovy起步】-02-面向Java开发者的Groovy

前言&#xff1a; 知识点记录来源于【Groovy程序设计】一书中&#xff0c;本文仅作知识点记录供日后使用查询&#xff0c;不做教程使用。 groovy支持java语法&#xff0c;并且保留了java的语义&#xff0c;所以我们可以随心所欲的混用两种语言。 1.从Java到Groovy 先看一个…

vr兽医设备操作模拟仿真教学平台提升教学效果

在兽医教育的传统领域中&#xff0c;动物诊疗一直是一项不可或缺的实践环节。然而&#xff0c;传统的解剖教学方式受限于动物数量、种类以及安全隐患&#xff0c;无法充分满足学生的学习需求。随着VR虚拟仿真技术的不断精进&#xff0c;VR动物诊疗仿真实训系统为兽医教育带来了…

数字藏品app开发

数字藏品是指使用区块链技术&#xff0c;对应特定的作品、艺术品生成的唯一数字凭证。在保护其数字版权的基础上&#xff0c;数字藏品实现了真实可信的数字化发行、购买、收藏和使用。数字藏品是数字出版物的一种新形态&#xff0c;具有唯一的IP数字身份和所有权信息&#xff0…

什么是人才测评工具?

人才测评工具是指企业通过一系列科学的手段和方法对人的基本素质及其潜能进行测量和评定的活动。它的具体对象不是抽象的人&#xff0c;而是作为个体存在的人其内在素质及其表现出的绩效。随着经济的发展&#xff0c;企业对人才的渴求日益增加&#xff0c;这也导致各企业单位人…

Java与Kotlin语言的特色之处

一、Java特色之处&#xff1a; 1.多异常捕获 一个try块可能捕获到多个异常&#xff0c;可以使用多个catch块分别处理每个异常&#xff0c;也可以使用一个catch块处理多个异常&#xff08;多个异常使用管道符|分隔&#xff09;。 多个catch块代码&#xff1a; try{ }catch(IOExc…

海外仓管理系统的“实用性”讨论:没办法自由设置信息的,都是伪功能

和很多经营海外仓的企业都聊过这样一个问题&#xff1a;对于海外仓的管理系统&#xff0c;到底什么样的设计&#xff0c;什么样的功能才是真的有价值的。 那这就不得不说到一个概念&#xff1a;自由性。什么意思呢&#xff0c;海外仓看似都一样&#xff0c;大家都在经营仓储、…

基于Springboot+Vue的Java项目-口腔管理平台系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

5种语言实现 | 使用Dijkstra算法从起点到所有节点找到最短路径

编辑&#xff1a;东岸因为一点人工一点智能 5种语言实现 | 使用Dijkstra算法从起点到所有节点找到最短路径C\x5cJava\x5cPython\x5cC#\x5cJavascript&#xff0c;五种语言实现使用Dijkstra算法从起点到所有节点找到最短路径https://mp.weixin.qq.com/s/6NAClr51zR_GLZGyKkr32A…

RTT学习

中断管理 什么是中断&#xff1f;简单的解释就是系统正在处理某一个正常事件&#xff0c;忽然被另一个需要马上处理的紧急事件打断&#xff0c;系统转而处理这个紧急事件&#xff0c;待处理完毕&#xff0c;再恢复运行刚才被打断的事件。生活中&#xff0c;我们经常会遇到这样…

本地部署运行大模型ollama

本地部署运行大模型ollama ollama模型下载地址 在我使用 vscode 开发时&#xff0c;使用 coplit 或 chatgpt 来辅助过于昂贵&#xff0c;于是我希望找到一个可以调用本地大模型的工具来辅助编程。 ollama 就是这样一个工具。 ollama使用 ollama 是一个可以将训练好的模型部署到…

前端开发攻略---在页面上渲染大量元素,使用defer减少白屏等待时间,优化页面响应速度

1、优化前 2、优化后 3、优化思路 1、在元素数量不变的情况下&#xff0c;进行一步一步的渲染&#xff0c;先渲染一些重要的元素或者需要用户第一时间看到的元素。 2、使用Hooks封装优化函数 4、优化代码 拥有大量元素的组件&#xff08;Item&#xff09;&#xff1a;文件位置&…

嵌入式系统中的嵌入式主板,你了解多少?

嵌入式主板&#xff0c;也称为嵌入式计算机主板&#xff0c;是一种专门设计用于嵌入式系统的计算机主板。与台式机和笔记本电脑中使用的常规主板不同&#xff0c;嵌入式主板设计用于集成到更大的电子设备中&#xff0c;例如汽车、医疗设备或自动售货机。在本文中&#xff0c;我…