PCL Harris3D关键点提取【2024最新版】

260 篇文章 7778 订阅 ¥19.90 ¥99.00
本文详细介绍了PCL库中的Harris3D关键点提取算法,从2D Harris算法原理出发,解释了如何将其扩展到3D场景中。3D-Harris算法通过计算点云法线的协方差矩阵来检测特征点,适用于点云处理。需要注意,Harris算法的输出点云需有强度信息,并需通过原始点云重新获取关键点。文章还提及了计算角点响应值的不同方法和参考文献。
摘要由CSDN通过智能技术生成

在这里插入图片描述
本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸抄袭狗。
博客长期更新,最近一次更新时间为:2024年8月31日。

一、算法原理

1、原理概述

  pcl::HarrisKeypoint3D使用2D Harris关键点的思想,但不是使用图像的梯度,而是使用点云的表面法线。该算法需对整个点云空间进行三维网格化,

以下是使用PCL库中的NARF算法进行关键点提取的示例代码: ``` #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pcl/features/range_image_border_extractor.h> #include <pcl/features/narf_descriptor.h> #include <pcl/io/pcd_io.h> #include <iostream> int main(int argc, char **argv) { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); if (pcl::io::loadPCDFile<pcl::PointXYZ>(argv[1], *cloud) == -1) // 从PCD文件中读取点云数据 { PCL_ERROR("Couldn't read file test_pcd.pcd \n"); return (-1); } // 将点云转换为深度图像 float angular_resolution = 0.5f; float support_size = 0.2f; pcl::RangeImage::Ptr range_image(new pcl::RangeImage); pcl::RangeImageBorderExtractor range_image_border_extractor; pcl::NarfDescriptor narf_descriptor(&range_image_border_extractor); range_image_border_extractor.setRangeImage(range_image); range_image_border_extractor.compute(); narf_descriptor.compute(*cloud, pcl::PointCloud<int>(), range_image_border_extractor.getBorderDescription(), pcl::PointCloud<int>()); // 提取关键点 std::vector<int> keypoint_indices; narf_descriptor.getKeypoints(keypoint_indices, support_size); // 输出关键点数量 std::cout << "Number of keypoints: " << keypoint_indices.size() << std::endl; return 0; } ``` 在代码中,首先读取PCD文件中的点云数据,然后将点云转换为深度图像,接着使用NARF算法进行关键点提取,最后输出关键点数量。需要注意的是,NARF算法需要先将点云转换为深度图像才能进行关键点提取
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

点云侠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值