问题描述
我使用 PCL(点云库)提供的 SIFT 算法通过使用其计算出的关键点来配准两个点云。 以下函数受到 https://github.com/aosmundson/pcl-registration/blob/master/src/pipeline.cpp 的启发,效果非常好。
using point_type_normal = pcl::Pointnormal;
using point_cloud_normal = pcl::PointCloud<point_type_normal>;
point_cloud::Ptr feature_registration::sift_keypoint_estimation(
const point_cloud_normal::Ptr& normals) const
{
pcl::SIFTKeypoint<point_type_normal,point_type> sift;
point_cloud::Ptr keypoints(new point_cloud);
pcl::search::KdTree<point_type_normal>::Ptr tree_normal(
new pcl::search::KdTree<point_type_normal>());
sift.setSearchMethod(tree_normal);
sift.setScales(sift_min_scale_,sift_n_octaves_,sift_n_scales_per_octave_);
sift.setMinimumContrast(sift_min_contrast_);
sift.setInputCloud(normals);
sift.compute(*keypoints);
return std::move(keypoints);
}
我的理解是 SIFT 使用颜色提供的强度值(或梯度)来估计某些关键点。然而,在提供的示例中,他们使用了 pcl::Pointnormal
,它是与给定点的法向量配对的 xyz 信息。
那么当使用法线而不是颜色时究竟会发生什么?算法是否仅通过使用法线的 xyz 而不是颜色的 rgb 值来确定渐变,还是在背景中发生了其他一些事情?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)