点云描述符 shot 的局部坐标系的构建c++
时间: 2023-08-14 19:03:42 浏览: 229
在使用SHOT描述符之前,需要先构建点云的局部坐标系。SHOT描述符是一种基于法向量的描述符,因此需要先计算出每个点的法向量。下面是构建局部坐标系的C++代码示例:
```c++
#include <pcl/features/shot.h>
#include <pcl/features/normal_3d.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
void computeSHOT(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud)
{
// Estimate surface normals
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
ne.setInputCloud(cloud);
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);
ne.setSearchMethod(tree);
pcl::PointCloud<pcl::Normal>::Ptr cloud_normals(new pcl::PointCloud<pcl::Normal>);
ne.setRadiusSearch(0.03);
ne.compute(*cloud_normals);
// Construct the local reference frame
pcl::SHOTLocalReferenceFrameEstimation<pcl::PointXYZ, pcl::Normal, pcl::SHOT352> shot;
shot.setInputCloud(cloud);
shot.setInputNormals(cloud_normals);
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree2(new pcl::search::KdTree<pcl::PointXYZ>);
shot.setSearchMethod(tree2);
pcl::PointCloud<pcl::SHOT352>::Ptr shot_descriptors(new pcl::PointCloud<pcl::SHOT352>);
shot.setRadiusSearch(0.05);
shot.compute(*shot_descriptors);
}
```
在上述代码中,我们使用了PCL库中的SHOTLocalReferenceFrameEstimation类来计算点云的局部坐标系。该类的实例化需要传入点云和法向量点云,以及一个KdTree对象用于近邻搜索。我们还设置了搜索半径和SHOT描述符的计算半径。最后,调用compute()方法计算SHOT描述符。
阅读全文