【opencv学习笔记】SURF特征点检测(未完待续)

简介

特征检测

特征检测是从图像中自动提取对象特征用以表述该对象,
同时还可以利用得到的特征数据 描述在不同的图像中发现相同的对象,
(一旦得到两个对象的描述子,
就可以使用它们实现特征数据的匹配与比对,
从而分辨出它们是否具有相似性)
而且特征对对象的旋转、缩放、光照等具有不变性

SURF(speed up robust feature)是加速版的SIFT

  • SURF可以用于对象定位和识别、人脸识别、3D重建、对象跟踪和提取兴趣点等。常用来进行物体辨识和图像匹配。
  • 检测可分为三步
    < 1 > 检测特征点
    < 2 > 描述特征点
    < 3 > 匹配特征点
  • 特征点的特性
    一、 容易被检测到,只要这个点所对应的那个物体还在摄像头的视野范围内,那么这个点就能被检测出来。比如角点,边界点,亮处的暗点,暗处的亮点等,一言以蔽之,就是与周围有反差的点
    二、 不受明暗光线变化的影响

相关函数介绍

1. 构造函数

类SURF中成员函数create()参数说明

static Ptr<SURF> create(double hessianThreshold=100,        //hessian关键点检测器的阈值,默认在300-500之间
                         int nOctaves = 4,              //表示在4个尺度空间
                         int nOctaveLayers = 3,     //每个尺度空间的层数
                         bool extended = false, //扩展描述符标志(true使用扩展的128个元素的描述符,false使用64个元素的描述符)
                         bool upright = false//旋转的特征标志(true不计算方向,false计算方向)
);

2.KeyPoint类

KeyPoint类是一个为特征点检测而生的数据结构,用于形容特征点。

class KeyPoint
{  
   Point2f pt;   // 坐标
   float size;  // 特征点领域直径
   float angle; // 特征点的方向
   float response;
   int octave;   // 特征点所在的图像金字塔的组
   int class_id;   // 用于聚类的id
}

3.detect()函数

用来检测图像或图像集中的关键点。

void detect(  InputArray image,     //图像
              vector<KeyPoint>& keypoints,//  检测到的关键点
              InputArray mask=noArray() //指定在哪里寻找关键点的掩码(必须是在感兴趣区域中具有非零值的8位整数矩阵)
);

4.drawKeypoints()函数

绘制关键点

void drawKeypoints(InputArray image,
                   //源图像
                   vector<KeyPoint>& keypoints, 
                   //根据源图像得到的特征点,输出参数
                   InputOutputArray outImage,
                   //输出图像,其内容取决于第五个参数
                   const Scalar& color=Scalar::all(-1),
                    //关键点的颜色
                   int flags=DrawMatchesFlags::DEFAULT 
                   //设置绘图功能的标志
);

关于第五个参数

  • DEFAULT=0:只绘制特征点的坐标点,显示在图像上就是一个个小圆点,每个小圆点的圆心坐标都是特征点的坐标。
  • DRAW_OVER_OUTIMG=1:函数不创建输出的图像,而是直接在输出图像变量空间绘制,要求本身输出图像变量就是一个初始化好了的,size与type都是已经初始化好的变量
  • NOT_DRAW_SINGLE_POINTS=2:单点的特征点不被绘制
  • DRAW_RICH_KEYPOINTS=4:绘制特征点的时候绘制的是一个个带有方向的圆,这种方法同时显示图像的坐标,size,和方向,是最能显示特征信息的一种绘制方式。
上一篇:android – 为什么基于flann的描述符匹配器每次都匹配不同的关键点?


下一篇:c – OpenCV将图像,关键点和描述符保存到文件中