I have a problem regarding matching the results of two descriptors. I am using FPFH descriptor of Point Cloud Library as shown in code below.
// Compute the normals
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> normalEstimation;
normalEstimation.setInputCloud(source_cloud);
normalEstimation.setSearchMethod(tree);
pcl::PointCloud<pcl::Normal>::Ptr source_normals(new pcl::PointCloud< pcl::Normal>);
normalEstimation.setRadiusSearch(0.1);
normalEstimation.compute(*source_normals);
pcl::PointCloud<pcl::FPFHSignature33>::Ptr source_features(new pcl::PointCloud<pcl::FPFHSignature33>());
pcl::FPFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::FPFHSignature33> fpfh;
fpfh.setInputCloud(source_cloud);
fpfh.setInputNormals(source_normals);
boost::shared_ptr<std::vector<int> > indicesptr(new std::vector<int>(Source_keypoint_indices));
fpfh.setIndices(indicesptr);
fpfh.setSearchMethod(tree);
fpfh.setRadiusSearch(0.1);
fpfh.compute(*source_features);
and the same is used for the target cloud however, when using PCL correspondences estimation as shown below the result is wrong matches
pcl::registration::CorrespondenceEstimation<pcl::FPFHSignature33, pcl::FPFHSignature33> est;
pcl::CorrespondencesPtr correspondences(new pcl::Correspondences());
est.setInputSource(source_features);
est.setInputTarget(target_features);
est.determineCorrespondences(*correspondences);
So is there any other method I can use for matching features ??
Finally, Thanks for your time considering my question .. :)
Are you sure that your feautures are correct? For fpfh feature estimation you must set search radius > than normal estimation radius.
Also you can try some CorrespondenceReejction techniques to get better results for matches.