PCL汉明距离匹配代码
时间: 2023-07-02 20:16:39 浏览: 81
以下是使用PCL库进行汉明距离匹配的示例代码:
```c++
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/search/kdtree.h>
#include <pcl/features/normal_3d.h>
#include <pcl/registration/correspondence_estimation.h>
#include <pcl/registration/correspondence_rejection_distance.h>
#include <pcl/registration/correspondence_rejection_one_to_one.h>
int main(int argc, char** argv)
{
// 读取点云数据
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_source(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_target(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile<pcl::PointXYZ>("source.pcd", *cloud_source);
pcl::io::loadPCDFile<pcl::PointXYZ>("target.pcd", *cloud_target);
// 计算法线
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
ne.setInputCloud(cloud_source);
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);
ne.setSearchMethod(tree);
pcl::PointCloud<pcl::Normal>::Ptr normals_source(new pcl::PointCloud<pcl::Normal>);
ne.setRadiusSearch(0.05);
ne.compute(*normals_source);
ne.setInputCloud(cloud_target);
pcl::PointCloud<pcl::Normal>::Ptr normals_target(new pcl::PointCloud<pcl::Normal>);
ne.compute(*normals_target);
// 计算特征
pcl::PointCloud<pcl::FPFHSignature33>::Ptr fpfh_source(new pcl::PointCloud<pcl::FPFHSignature33>);
pcl::PointCloud<pcl::FPFHSignature33>::Ptr fpfh_target(new pcl::PointCloud<pcl::FPFHSignature33>);
pcl::FPFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::FPFHSignature33> fpfh;
fpfh.setInputCloud(cloud_source);
fpfh.setInputNormals(normals_source);
fpfh.setSearchMethod(tree);
fpfh.setRadiusSearch(0.1);
fpfh.compute(*fpfh_source);
fpfh.setInputCloud(cloud_target);
fpfh.setInputNormals(normals_target);
fpfh.compute(*fpfh_target);
// 计算对应点
pcl::CorrespondencesPtr correspondences(new pcl::Correspondences);
pcl::registration::CorrespondenceEstimation<pcl::FPFHSignature33, pcl::FPFHSignature33> ce;
ce.setInputSource(fpfh_source);
ce.setInputTarget(fpfh_target);
ce.determineCorrespondences(*correspondences);
// 根据距离和一对一匹配进行筛选
pcl::CorrespondencesPtr correspondences_filtered(new pcl::Correspondences);
pcl::registration::CorrespondenceRejectorDistance rej_dist;
rej_dist.setInputCorrespondences(correspondences);
rej_dist.setMaximumDistance(0.1);
rej_dist.getCorrespondences(*correspondences_filtered);
pcl::CorrespondencesPtr correspondences_one_to_one(new pcl::Correspondences);
pcl::registration::CorrespondenceRejectorOneToOne rej_one_to_one;
rej_one_to_one.setInputCorrespondences(correspondences_filtered);
rej_one_to_one.getCorrespondences(*correspondences_one_to_one);
// 输出结果
std::cout << "Number of correspondences found: " << correspondences->size() << std::endl;
std::cout << "Number of correspondences after filtering: " << correspondences_one_to_one->size() << std::endl;
return 0;
}
```
这个示例代码展示了如何使用PCL库进行汉明距离匹配,并且使用了一些附加的特征处理和一对一匹配的筛选。你需要将其修改以适应你自己的场景。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)