Opencv学习笔记(六)SURF学习笔记
原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/7392345
本人挺菜的,肯定有非常多错误纰漏之处 ,希望大家不吝指正。
看了harris角点检測之后,開始研究SURF角点检測,发现挺复杂的,一时也仅仅了解了大概,把了解的东西总结下,以便下次深入学习。
SURF角点检測算法是对SIFT的一种改进,主要体如今速度上,效率更高。它和SIFT的主要差别是图像多尺度空间的构建方法不同。
在计算视觉领域,尺度空间被象征性的表述为一个图像金字塔,向下降採样一般用高斯金字塔。当中,输入图像函数重复与高斯函数的核卷积并重复对其进行二次抽样,这样的方法主要用于SIFT算法的实现,但每层图像依赖于原图像(当前尺度可能和原图象尺度相差非常大,这时候再那原图像卷积确实有点二了),而且图像须要重设尺寸,因此,这样的计算方法运算量较大。SURF算法对积分图像进行操作,卷积仅仅和前一幅图像有关,其降採样的方法是申请添加图像核的尺寸,这也是SIFT算法与SURF算法在使用金字塔原理方面的不同。SURF算法同意尺度空间多层图像同一时候被处理,不需对图像进行二次抽样,从而提高算法性能。
其他方面的差别,以我菜鸟级的认识,差不大多。
附上两篇SIFT相关的博文,讲得还是比較透彻的,两篇结合起来看基本能明确其原理。
两篇讲的东西有点出入,只是对比着看还是能找出问题的,当然啃论文最easy找出问题了。
SIFT简单介绍:http://www.360doc.com/content/11/1230/23/3054335_176200661.shtml
SIFT算法心得:http://www.360doc.com/content/11/1207/17/3054335_170430459.shtml
其它博文:
SIFT/SURF算法的深入剖析——谈SIFT的精妙与不足:http://hi.baidu.com/xiaoduo170/blog/item/a22bcc1c2349708286d6b636.html
SIFT/SURF系列:http://www.yongblog.com/archives/tag/surf%E7%AE%97%E6%B3%95
SURF论文和源代码(论文讲得非常具体,代码c++实现):
http://download.csdn.net/detail/crzy_sparrow/4171374
opencv小试SURF算法:
#include "opencv2/opencv.hpp"
int main(){
cv::Mat image, image1 = cv::imread ("test.jpg");
//灰度变换
cv::cvtColor (image1,image,CV_BGR2GRAY);
std::vector<cv::KeyPoint> keypoints;
cv::SurfFeatureDetector surf(2500);
surf.detect (image,keypoints);
cv::drawKeypoints (image,keypoints,image,cv::Scalar::all (255),cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS); cv::namedWindow ("surf");
cv::imshow ("surf",image);
cv::waitKey (0);
return 0;
}
測试结果:

标记圈的半径长短和特征点所在尺度有关,那条半径是特征点的方向。
SIFT算法的教程、源代码及应用软件
1、ubc:DAVID LOWE---SIFT算法的创始人,两篇巨经典
http://www.cs.ubc.ca/~lowe/
2、cmu:YanKe---PCASIFT,总结的SIFT方面的文章
http://www.andrew.cmu.edu/user/yke/
3、ubc:M.BROWN---SIFT算法用于图像拼接的经典应用autopano-sift,包含一个SIFTLIB库
http://www.cs.ubc.ca/~mbrown/autostitch/autostitch.html
http://www.cs.ubc.ca/~mbrown/panorama/panorama.html
4、toronto:Jepson---Matlab SIFT tutorial, 超级超级超级经典~
http://www.cs.toronto.edu/~jepson/csc2503/
5、ucla:Vedaldi---加州大学一个博士生编的Matlab SIFT tutorial
http://www.cs.ucla.edu/~vedaldi/
6.http://en.wikipedia.org/wiki/Scale-inva ... _transform
7. 大牛整理的计算机视觉分类
http://www.cs.ubc.ca/~lowe/vision.html
8. http://note.sonots.com/SciSoftware/SIFT.html
9.提到了计算变换矩阵的RANSAC法
http://web.engr.oregonstate.edu/~hess/index.html
10. 仿射不变特征点检測,提到了性能评价的方法
http://www.robots.ox.ac.uk/~vgg/research/affine/
11. 一个日本人,挺牛的
http://note.sonots.com/
12. PCA-SIFT
http://www.cs.cmu.edu/~yke/pcasift/
13 opencv sift
http://web.engr.oregonstate.edu/~hess/index.html
14 matlab sift
http://www.vlfeat.org/~vedaldi/code/sift.html
http://www.vlfeat.org/overview/sift.html
15 Improve Scale Invariant Feature Transform (SIFT) 斯坦福
http://robots.stanford.edu/cs223b04/project9.html
16 Known implementations of SIFT mit
http://people.csail.mit.edu/albert/ladypack/wiki/index.php/Known_implementations_of_SIFT
Opencv学习笔记(六)SURF学习笔记的更多相关文章
- 智能车学习(十六)——CCD学习
一.使用硬件 1.兰宙CCD四代 优点:可以调节运放来改变放大倍数 缺点:使用软排线(容易坏),CCD容易起灰,需要多次调节 2.野火K60底层 二.CCD硬件电路 ( ...
- 【opencv学习笔记六】图像的ROI区域选择与复制
图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...
- 20145213《Java程序设计学习笔记》第六周学习总结
20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记六:接口
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- 《Linux内核分析》第六周学习笔记
<Linux内核分析>第六周学习笔记 进程的描述和创建 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
- python3.4学习笔记(六) 常用快捷键使用技巧,持续更新
python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...
- Go语言学习笔记六: 循环语句
Go语言学习笔记六: 循环语句 今天学了一个格式化代码的命令:gofmt -w chapter6.go for循环 for循环有3种形式: for init; condition; increment ...
- Linux内核分析第六周学习笔记——分析Linux内核创建一个新进程的过程
Linux内核分析第六周学习笔记--分析Linux内核创建一个新进程的过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
随机推荐
- Android虚拟机GenyMotion
GenyMotion:需要VirtualBox,安装后可以选择机型,这个应该是Android for x86的一个改进版虚拟机,在原版的基础上针对不同机型用了和原机型同样的GUI,但是发现缺少了Goo ...
- windowIsTranlucent 属性
项目中踩的大坑. 先埋. int alwaysFinish = 0; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERS ...
- 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson
根据DSqiu的blog整理出来 :http://dsqiu.iteye.com/blog/1689163 PS:模板是自己写的,如有错误欢迎指出~ 本文内容框架: §1 Dijkstra算法 §2 ...
- Log4j实现对Java日志的配置全攻略
1. 配置文件 Log4J配置文件的基本格式如下: #配置根Logger log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , ...
- 初涉JavaScript模式 (6) : 原型模式 【二】
原型与in操作符 有两种方式使用in操作符:单独使用和在for-in循环中使用. 在单独使用时,in操作符会遍历实例公开(可枚举)的属性,如果找到该指定属性则返回true,无论该指定属性是存在与实例中 ...
- C语言对数组取地址
#include <stdio.h> main() { ] = {,,,,}; printf("a=%p\n" , a); printf("a=%p\n&qu ...
- bestcoder单调区间
http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=584&pid=1006 题解:ORZ Matrix67 ht ...
- C#复习,输入学生信息排列成绩
C#复习:在控制台程序中使用结构体.集合,完成下列要求项目要求:一.连续输入5个学生的信息,每个学生都有以下4个内容:1.序号 - 根据输入的顺序自动生成,不需要手动填写,如输入第一个学生的序号是1, ...
- Android Studio 模拟器 不要皮肤,效果更好
新建或者编辑虚拟机时,皮肤选择"No Skin"即可,第二张图片就是无皮肤的效果,看着更爽啊.
- jquery ajax用例样板
$.ajax({ url: '${managerPath}/customer/updateOrder.do', type: 'POST', async: false, data: { id: date ...