【PCL】(十三)使用KdTree查找点

【PCL】(十三)使用KdTree查找点

以下代码实现使用KdTree来查找特定点的K个最近邻点,以及查找指定的某个半径内的所有邻点。

kdtree_search.cpp

#include <pcl/point_cloud.h>
#include <pcl/kdtree/kdtree_flann.h>#include <iostream>
#include <vector>
#include <ctime>int main ()
{srand (time (NULL)); // 把当前的时间作为种子,使程序每次运行产生不同的随机数pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);cloud->width = 1000;cloud->height = 1;cloud->points.resize (cloud->width * cloud->height);for (std::size_t i = 0; i < cloud->size (); ++i){(*cloud)[i].x = 1024.0f * rand () / (RAND_MAX + 1.0f);(*cloud)[i].y = 1024.0f * rand () / (RAND_MAX + 1.0f);(*cloud)[i].z = 1024.0f * rand () / (RAND_MAX + 1.0f);}// 创建kdtree对象,并将随机创建的云cloud设置为输入pcl::KdTreeFLANN<pcl::PointXYZ> kdtree;kdtree.setInputCloud (cloud);// 创建一个查询点pcl::PointXYZ searchPoint;searchPoint.x = 1024.0f * rand () / (RAND_MAX + 1.0f);  // [0,1024)searchPoint.y = 1024.0f * rand () / (RAND_MAX + 1.0f);searchPoint.z = 1024.0f * rand () / (RAND_MAX + 1.0f);/* =================  K 近邻点查找 =================*/int K = 10; // 邻点数量                                                                      std::vector<int> pointIdxKNNSearch(K); // 存储K个邻点在目标点云cloud的索引std::vector<float> pointKNNSquaredDistance(K);  // 存储K个邻点与查询点searchPoint的距离std::cout << "K nearest neighbor search at (" << searchPoint.x << " " << searchPoint.y << " " << searchPoint.z<< ") with K=" << K << std::endl;// 如果nearestKSearch返回了0个以上的邻点,则打印出这些点的坐标和离查询点的距离。if ( kdtree.nearestKSearch (searchPoint, K, pointIdxKNNSearch, pointKNNSquaredDistance) > 0 ){for (std::size_t i = 0; i < pointIdxKNNSearch.size (); ++i)std::cout << "    "  <<   (*cloud)[ pointIdxKNNSearch[i] ].x << " " << (*cloud)[ pointIdxKNNSearch[i] ].y << " " << (*cloud)[ pointIdxKNNSearch[i] ].z << " (squared distance: " << pointKNNSquaredDistance[i] << ")" << std::endl;}/* ================= 指定半径内邻点查找 =================*/std::vector<int> pointIdxRadiusSearch;std::vector<float> pointRadiusSquaredDistance;float radius = 256.0f * rand () / (RAND_MAX + 1.0f);  // 随机指定一个半径 [0,256)std::cout << "Neighbors within radius search at (" << searchPoint.x << " " << searchPoint.y << " " << searchPoint.z<< ") with radius=" << radius << std::endl;// 如果radiusSearch返回0个以上的邻居,则打印出这些点的坐标和距离查询点的距离。if ( kdtree.radiusSearch (searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0 ){for (std::size_t i = 0; i < pointIdxRadiusSearch.size (); ++i)std::cout << "    "  <<   (*cloud)[ pointIdxRadiusSearch[i] ].x << " " << (*cloud)[ pointIdxRadiusSearch[i] ].y << " " << (*cloud)[ pointIdxRadiusSearch[i] ].z << " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << std::endl;}
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.5 FATAL_ERROR)project(kdtree_search)find_package(PCL 1.2 REQUIRED)include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})add_executable (kdtree_search kdtree_search.cpp)
target_link_libraries (kdtree_search ${PCL_LIBRARIES})

编译并运行:

$ ./kdtree_search
K nearest neighbor search at (611.912 714.643 318.294) with K=10577.656 735.628 365.639 (squared distance: 3855.37)649.357 780.609 335.414 (squared distance: 6046.84)577.517 711.442 234.653 (squared distance: 8189.24)514.245 714.403 350.59 (squared distance: 10581.8)543.427 716.362 397.122 (squared distance: 10906.9)618.627 792.671 234.902 (squared distance: 13087.8)578.426 601.173 354.667 (squared distance: 15319.5)727.001 658.541 309.456 (squared distance: 16471.1)570.426 835.116 348.912 (squared distance: 17172.3)649.734 731.461 448.939 (squared distance: 18781.3)
Neighbors within radius search at (611.912 714.643 318.294) with radius=179.772577.656 735.628 365.639 (squared distance: 3855.37)649.357 780.609 335.414 (squared distance: 6046.84)577.517 711.442 234.653 (squared distance: 8189.24)514.245 714.403 350.59 (squared distance: 10581.8)543.427 716.362 397.122 (squared distance: 10906.9)618.627 792.671 234.902 (squared distance: 13087.8)578.426 601.173 354.667 (squared distance: 15319.5)727.001 658.541 309.456 (squared distance: 16471.1)570.426 835.116 348.912 (squared distance: 17172.3)649.734 731.461 448.939 (squared distance: 18781.3)743.243 723.445 256.789 (squared distance: 21108.2)473.974 706.994 251.991 (squared distance: 23481.7)621.783 651.078 178.381 (squared distance: 23713.6)598.976 828.553 210.661 (squared distance: 24727.7)745.616 724.787 235.044 (squared distance: 24910.3)651.89 622.844 195.508 (squared distance: 25101.8)569.43 822.901 210.423 (squared distance: 25160.6)718.618 605.08 262.162 (squared distance: 26541)701.311 849.097 348.259 (squared distance: 26968.1)669.089 845.626 399.293 (squared distance: 26986.7)571.297 744.318 475.38 (squared distance: 27206.2)772.471 716.909 278.333 (squared distance: 27381.2)653.716 808.661 448.121 (squared distance: 27442)514.185 849.465 270.6 (squared distance: 30002.4)718.503 851.82 287.835 (squared distance: 31107.1)619.124 787.451 479.45 (squared distance: 31324.2)733.23 588.522 281.216 (squared distance: 31999.3)

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

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

相关文章

解析 Go 编程语言数据类型:bool、整数、浮点数和字符串详细介绍

数据类型 数据类型是编程中的重要概念。数据类型指定了变量值的大小和类型。Go是静态类型的&#xff0c;这意味着一旦变量类型被定义&#xff0c;它只能存储该类型的数据。 基本数据类型 Go 有三种基本数据类型&#xff1a; bool&#xff1a;表示布尔值&#xff0c;要么是t…

龙年开工第一周谈LLM和编程

文章主要内容来自redis的作者antirez对于使用LLM后的“获奖感言” 文章要点 0、与大型语言模型(LLM)协作&#xff0c;学会让其为简单问题提供答案&#xff0c;这样可以更高效地利用时间。 1、正确地向LLM提问是一项基本技能。 2、在与他人交流时&#xff0c;提高描述问题的能…

nginx服务基础用法(概念、安装、热升级)

目录 一、I/O模型概述 1、I/O概念 1.1 计算机的I/O 1.2 Linux的I/O 2、零拷贝技术 3、同步/异步&#xff08;消息反馈机制&#xff09; 4、阻塞/非阻塞 5、网络I/O模型 5.1 阻塞型 I/O 模型&#xff08;blocking IO&#xff09; 5.2 非阻塞型 I/O 模型 (nonblocking …

外包干了两个月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

SD-WAN云专线:优越性能助力企业云上腾飞

随着企业数字化转型的推进&#xff0c;SD-WAN云专线作为一项安全、高速、低延迟、稳定可靠的专属连接通道&#xff0c;正迅速崭露头角。该技术通过连接用户办公点、数据中心以及各类云环境&#xff0c;构建强大的网络基础设施&#xff0c;助力企业轻松实现跨域云网数据互通&…

Python实现XML文件转Excel

了解xml.etree.ElementTree https://zhuanlan.zhihu.com/p/502584681?utm_id0 实现代码 运行前请确保对应的库装好 # encoding: utf-8 import os import xml.etree.ElementTree as ET import pandas as pd from tqdm import tqdmfolder_path "C:/Users/Administrato…

uniapp微信小程序解决上方刘海屏遮挡

问题 在有刘海屏的手机上&#xff0c;我们的文字和按钮等可能会被遮挡 应该避免这种情况 解决 const SYSTEM_INFO uni.getSystemInfoSync();export const getStatusBarHeight ()> SYSTEM_INFO.statusBarHeight || 15;export const getTitleBarHeight ()>{if(uni.get…

AI副业项目分享

在上一篇文章《这才是大学生该做的副业&#xff0c;别再痴迷于游戏了&#xff01;》中&#xff0c;我分享了一些副业的想法&#xff0c;接着有不少同学问我&#xff1a;具体如何做&#xff1f;这是真把我给整蒙了&#xff0c;这里分享下我可以提供的产品和服务吧&#xff0c;并…

Vant轮播多个div结合二维数组的运用

需求说明 在开发H5的时候&#xff0c;结合Vant组件的轮播组件Swipe实现如下功能。我们查阅vant组件库官方文档可以得知&#xff0c;每个SwipeItem组件代表一个卡片&#xff0c;实现的是每屏展示单张图片或者单个div轮播方式&#xff0c;具体可以查阅&#xff1a;Vant 2 - 轻量、…

JavaScript基础和数据类型

【一】JavaScipt基础 【1】什么是JavaScript &#xff08;1&#xff09;定义 JavaScript最初由Netscape公司&#xff08;现在的Mozilla基金会&#xff09;的Brendan Eich在1995年创造。 JavaScript是一种广泛用于网页开发的脚本语言。 它是一种动态、解释性的语言&#xff…

什么是智能指针?请列举几种智能指针的类型,并说明其区别。

什么是智能指针&#xff1f;请列举几种智能指针的类型&#xff0c;并说明其区别。 智能指针是一种 C 标准库提供的高级指针类&#xff0c;它能够自动管理动态分配的内存资源&#xff0c;并在适当的时候释放该资源&#xff0c;从而避免内存泄漏和野指针等常见问题。智能指针的主…

Mysql中like %xxx% 模糊查询该如何优化

背景&#xff1a; 实际项目中&#xff0c;like %xxx%的情况其实挺多的&#xff0c;比如某个表单如果支持根据公司名进行搜索&#xff0c;用户一般都是输入湖南xxx有限公司中的xxx进行搜索&#xff0c;所以对于接口而言&#xff0c;就必须使用like %xxx%来支持&#xff0c;从而…

C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示

上一篇&#xff1a; C#&#xff0c;入门教程(04)——Visual Studio 2022 数据编程实例&#xff1a;随机数与组合https://blog.csdn.net/beijinghorn/article/details/123533838 新来的徒弟们交上来的C#代码&#xff0c;可读性往往很差。 今天一问才知道&#xff0c;他们居然不…

MIT6.S081学习——二、相关命令行整理

MIT6.S081学习——二、相关命令行整理 1 添加user代码到xv6中并编译2 git版本管理 1 添加user代码到xv6中并编译 问题&#xff1a;如何让在xv6中运行copy.c 答&#xff1a;在xv6中运行copy.c文件&#xff0c;你需要先将该文件添加到xv6源代码目录中&#xff0c;然后修改Makefil…

笔试题讲解(C语言进阶)

目录 前言 1、题目 2、答案 3、解析 结语 前言 “纸上得来终觉浅&#xff0c;绝知此事要躬行”。本篇通过对指针实际案例的分析&#xff0c;由浅入深&#xff0c;来加强我们对指针的理解。 1、题目 这是一道难题&#xff0c;小心哦。 #include <stdio.h> int main(…

值类型:左值、纯右值、将亡值

值类型是一个古老的概念&#xff0c;早在C98就存在了&#xff0c;但在C11之前这些都无关紧要&#xff0c;随着C11右值引用的产生值类型也被赋予了新的含义。 但问题是C11并未给出清晰的定义&#xff0c;比如在C11的标准文档中&#xff0c;左值的概念只有一句话&#xff1a;“指…

使用向量数据库pinecone构建应用02:检索增强生成RAG

Building Applications with Vector Databases 下面是这门课的学习笔记&#xff1a;https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement them using Pinecon…

Vue单文件学习项目综合案例Demo,黑马vue教程

文章目录 前言一、小黑记事本二、购物车三、小黑记账清单 前言 bilibili视频地址 一、小黑记事本 效果图 主代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible&…

Open CASCADE学习|绘制砂轮

今天绘制一个砂轮&#xff0c;其轮廓由两条直线段和两段圆弧构成&#xff0c;圆弧分别与直线相切&#xff0c;两条圆弧之间相交而非相切。建模思路是&#xff1a;先给定两条直线段的起始点及长度&#xff0c;画出直线段&#xff0c;然后给定其中一圆弧的半径及圆心角&#xff0…

4核8G服务器能承受多少并发?

腾讯云4核8G服务器能承受多少并发&#xff1f;阿腾云的4核8G服务器可以支持20个访客同时访问&#xff0c;关于4核8G服务器承载量并发数qps计算测评&#xff0c;云服务器上运行程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#x…