栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

SIFT关键点提取

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SIFT关键点提取

参考SIFT文章
SIFT的原理解释
图像处理基础(十三)Sift 关键点检测
查看pcl中SIFT类的函数
点云库PCL学习——SIFT关键点

定义:SIFT关键点:具有尺度变换(Scale-invariant feature transform, SIFT)不变性的点,在图像处理领域中,SIFT关键点是一种局部特征描述子

代码运行结果


图中蓝色的点就是SIFT关键点

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

namespace pcl
{
  template<>
    struct SIFTKeypointFieldSelector
    {
      inline float
      operator () (const PointXYZ &p) const
      {
    return p.z;
      }
    };
}

int
main(int argc, char *argv[])
{

  pcl::PointCloud::Ptr cloud_xyz (new pcl::PointCloud);
  pcl::io::loadPCDFile (argv[1], *cloud_xyz);
//stof()函数,解析字符串,将其内容解释为浮点数,该浮点数作为float类型的值返回。
//min_scale 设置尺度空间中最小尺度的标准偏差
  const float min_scale = stof(argv[2]); 
  // octave 高斯金字塔中组的数目        
  const int n_octaves = stof(argv[3]);            
  //n_scales_per_octave 每组计算的尺度数目
  const int n_scales_per_octave = stof(argv[4]);
  //  最小对比度?
  const float min_contrast = stof(argv[5]);       
 
  pcl::SIFTKeypoint sift;//创建sift关键点检测对象
  pcl::PointCloud result;
  sift.setInputCloud(cloud_xyz);//设置输入点云
  pcl::search::KdTree::Ptr tree(new pcl::search::KdTree ());
  sift.setSearchMethod(tree);//创建一个空的kd树对象tree,并把它传递给sift检测对象
  sift.setScales(min_scale, n_octaves, n_scales_per_octave);//指定搜索关键点的尺度范围
  sift.setMinimumContrast(min_contrast);//设置限制关键点检测的阈值
  //这一步代码有问题
  sift.compute(result);//执行sift关键点检测,保存结果在result

  pcl::PointCloud::Ptr cloud_temp (new pcl::PointCloud);
  copyPointCloud(result, *cloud_temp);//将点类型pcl::PointWithScale的数据转换为点类型pcl::PointXYZ的数据
 
  //可视化输入点云和关键点
  pcl::visualization::PCLVisualizer viewer("Sift keypoint");
  viewer.setBackgroundColor( 255, 255, 255 );
  viewer.addPointCloud(cloud_xyz, "cloud");
  viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR,0,0,0,"cloud");
  viewer.addPointCloud(cloud_temp, "keypoints");
  viewer.setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 9, "keypoints");
  viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR,0,0,255,"keypoints");

  while(!viewer.wasStopped ())
  {
    viewer.spinOnce ();
  }
  return 0;
  
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971552.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号