用法线而不是颜色理解 SIFT 关键点估计 [PCL, C++]

问题描述

我使用 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 (将#修改为@)