SERF(speed up robust feature )特征的关键特性:

  1. 特征检测
  2. 尺度空间:缩放到不同的大小或分辨率仍能检测
  3. 选择不变性:光照不变,旋转不变
  4. 特征向量:描述为一个特征向量

DDN过程为:检测、描述、匹配

  工作原理:

  1. 选择感兴趣的区域POI,用Hessian矩阵找到,然后求取梯度
  2. 在不同尺度空间发现关键点,非最大信号压制,把不是局部的最大信号放弃
  3. 发现特征点,求取在某个方向上的特征最大值就找到了特征方向。旋转不变性
  4. 再根据光照不变性生成特征向量

  Hessian矩阵:$\left[ {\begin{array}{*{20}{c}}
{\frac{{\partial {I^2}}}{{\partial {x^2}}}}&{\frac{{\partial {I^2}}}{{\partial x\partial y}}}\\
{\frac{{\partial {I^2}}}{{\partial y\partial x}}}&{\frac{{\partial {I^2}}}{{\partial {{\rm{y}}^2}}}}
\end{array}} \right]$

  用Hessian矩阵寻找POI最好用整数特征点区域连续的浮点数特征计算

  要近似转换成近似的整数计算如下:

\[\frac{{{\partial ^2}H}}{{\partial {x^2}}} = \left[ {\begin{array}{*{20}{c}}
{{d_{xx}}}&{{d_{yx}}}&{{d_{sx}}}\\
{{d_{xy}}}&{{d_{yy}}}&{{d_{sy}}}\\
{{d_{xs}}}&{{d_{ys}}}&{{d_{ss}}}
\end{array}} \right]\]

$$\frac{{\partial H}}{{\partial x}} = \left[ {\begin{array}{*{20}{c}}
{{d_x}}\\
{{d_y}}\\
{{d_z}}
\end{array}} \right]$$

  尺度空间如下:中间X表示最大尺度空间

  Hessian矩阵在尺度空间寻找关键点:$H(x) = H + \frac{{\partial {H^T}}}{{\partial x}}x + \frac{1}{2}{x^T}\frac{{{\partial ^2}{\rm{H}}}}{{\partial {x^2}}}x$(拉格朗日泰勒级数展开形式) 求取Hessian矩阵为0时候的x值$\hat x = - \frac{{{\partial ^2}{{\rm{H}}^{ - 1}}}}{{\partial {x^2}}}\frac{{\partial H}}{{\partial x}}$就是最大值,然后每次移动0.5,不断向这个最大值逼近,这样就在空间尺度找到最大关键点。

  旋转不变性:

  如图所示,在4$ \times $4的方格中,每隔方格为5$ \times $5的像素,用如图2$ \times $2的Haar在5$ \times $5的像素求取dx,dy,得到每个方向的值,然后所有5$ \times $5内的dx加起来,dy加起来,每个5$ \times $5的区域得到一个向量

\[V = \{ \sum {dx,} \sum {\left| {dx} \right|,} \sum {dy,} \sum {\left| {dy} \right|} \} \]

  在4$ \times $4的方格中总共有16个向量。

  原图如下:

  minHessian = 400的特征点如下:

   minHessian = 100的特征点如下:

  相关函数解释:

static Ptr<SURF> create(double hessianThreshold=,        //hessian关键点检测器的阈值,默认在300-500之间
int nOctaves = , //表示在4个尺度空间
int nOctaveLayers = , //每个尺度空间的层数
bool extended = false, //扩展描述符标志(true使用扩展的128个元素的描述符,false使用64个元素的描述符)
bool upright = false //旋转的特征标志(true不计算方向,false计算方向)
);
/****************************************************************/
detect( InputArray image, //图像
vector<KeyPoint>& keypoints,// 检测到的关键点
InputArray mask=noArray() //指定在哪里寻找关键点的掩码(必须是在感兴趣区域中具有非零值的8位整数矩阵)
);
/****************************************************************/
drawKeypoints(InputArray image, //源图像
              vector<KeyPoint>& keypoints, //来自源图像的关键点
              InputOutputArray outImage,//输出图像
              const Scalar& color=Scalar::all(-), //关键点的颜色
              int flags=DrawMatchesFlags::DEFAULT //设置绘图功能的标志
);

   参考程序如下:

 #include<opencv2/opencv.hpp>
#include<opencv2/xfeatures2d.hpp>
#include<iostream> using namespace std;
using namespace cv;
using namespace cv::xfeatures2d; int main(int argc, char *argv[])
{
Mat src = imread("H:/cv_code/image/home.jpg",);
if(src.empty())
{
printf("no image");
return -;
}
namedWindow("src",CV_WINDOW_AUTOSIZE);
imshow("src", src);
//Hessian矩阵
int minHessian = ;
Ptr <SURF> detector = SURF::create(minHessian);
vector <KeyPoint> keyPoints;
detector->detect(src,keyPoints,Mat());
//绘制关键点
Mat keyPoint_result;
drawKeypoints(src, keyPoints, keyPoint_result, Scalar::all(-), DrawMatchesFlags::DEFAULT);
namedWindow("src",CV_WINDOW_AUTOSIZE);
imshow("keyPoint_result", keyPoint_result); waitKey();
return ;
}

SURF特征检测的更多相关文章

  1. 第二节,surf特征检测关键点,实现图片拼接

    初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移和合成,与图像内容无关:高级图像拼接也叫做基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接全景图. 实现步骤: 1.采 ...

  2. OpenCV——SURF特征检测、匹配与对象查找

    SURF原理详解:https://wenku.baidu.com/view/2f1e4d8ef705cc1754270945.html SURF算法工作原理 选择图像中的POI(Points of i ...

  3. OpenCV探索之路(二十三):特征检测和特征匹配方法汇总

    一幅图像中总存在着其独特的像素点,这些点我们可以认为就是这幅图像的特征,成为特征点.计算机视觉领域中的很重要的图像特征匹配就是一特征点为基础而进行的,所以,如何定义和找出一幅图像中的特征点就非常重要. ...

  4. opencv学习之路(35)、SURF特征点提取与匹配(三)

    一.简介 二.opencv中的SURF算法接口 三.特征点匹配方法 四.代码 1.特征点提取 #include "opencv2/opencv.hpp" #include < ...

  5. 第十三节、SURF特征提取算法

    上一节我们已经介绍了SIFT算法,SIFT算法对旋转.尺度缩放.亮度变化等保持不变性,对视角变换.仿射变化.噪声也保持一定程度的稳定性,是一种非常优秀的局部特征描述算法.但是其实时性相对不高. SUR ...

  6. 《opencv学习》 之 特征检测与匹配

    这几天学习SURF特征检测,直接看的视频和书本有点吃不消,现在是基本看懂了,如果写博客记录没有必要,因为网上都差不多,笔记都在书上了,以下是个人认为比较浅显易懂的文章,当然海有很多好文章我没看到. 看 ...

  7. opencv::SURF特征

    SURF特征基本介绍 SURF(Speeded Up Robust Features)特征关键特性: -特征检测 -尺度空间 -选择不变性 -特征向量 工作原理 . 选择图像中POI(Points o ...

  8. SURF算法源代码OPENSURF分析

    SURF算法源代码分析 平台:win x64 + VS2015专业版 +opencv2.4.11 配置类似参考OPENSIFT,参考我的另一篇博客:https://www.cnblogs.com/Al ...

  9. OpenCV 学习笔记 06 图像检索以及基于图像描述符的搜索

    OpenCV 可以检测图像的主要特征,然后提取这些特征,使其成为图像描述符,这些图像特征可作为图像搜索的数据库:此外可以利用关键点将图像拼接 stitch 起来,组成一个更大的图像.如将各照片组成一个 ...

随机推荐

  1. LUA学习笔记(第5-6章)

    x = a or b 如果a为真则x = a 如果a为假则x = b print(a .. b) 任何非nil类型都会被连接为字符串,输出 多重返回值 local s,e = string.find( ...

  2. js笔记(4)--关于在window.onload()里面定义函数,调用函数无法执行~

    由于本人学习js学不久,所以,今天刚好遇到了一个关于在window.onload里面定义函数,然后在html里面调用函数时出现错误.具体见下面: <!DOCTYPE html> <h ...

  3. 使用卷影拷贝提取ntds.dit

    一.简介 通常情况下,即使拥有管理员权限,也无法读取域控制器中的C:\Windows\NTDS\ntds.dit文件.使用windows本地卷影拷贝服务,就可以获得该文件的副本. 在活动目录中,所有的 ...

  4. CCF_201403-1_相反数

    按绝对值排序,因为没相同的数,直接遍历比较一遍即可. #include<iostream> #include<cstdio> #include<algorithm> ...

  5. HTML兼容问题及解决办法

    标准浏览器子元素不会撑开父元素设置好的宽度,IE6下会的: <style> .box{ width:400px;} .left{ width:200px;height:300px;back ...

  6. yukongDSRM账户安全防护

    一.DSRM简介 1.DSRM(Diretcory Service Restore Mode,目录服务恢复模式)是windows域环境中域控制器的安全模式启动选项.域控制器的本地管理员账户也就是DSR ...

  7. php 全局变量 预定义变量

    //$GLOBALS 引用全局作用域中可用的全部变量 $_SERVER['SERVER_ADDR'] 返回运行脚本所在服务器的IP地址 $_SERVER['SERVER_NAME'] 返回运行脚本所在 ...

  8. Linux文本三剑客

    grep 文本过滤工具. 作用: 文本搜索工具,根据用户指定的行进行匹配检查,打印匹配到的行. 模式: 由正则表达式字符及文本字符所编写的过滤条件. grep的使用 语法:  grep [OPTION ...

  9. [CentOS7]sed 指定字符前后添加内容

    指定字符前面添加 sed -i 's/指定的字符/需要添加的字符&/' 文件名称 修改Linux启动配置 将 GRUB_CMDLINE_LINUX="rd.lvm.lv=centos ...

  10. 1213 - Fantasy of a Summation

    1213 - Fantasy of a Summation         If you think codes, eat codes then sometimes you may get stres ...