图像拼接 SIFT资料合集

转自html

http://blog.csdn.net/stellar0/article/details/8741780

 

分类: web

最近也注意一些图像拼接方面的文章,不少不少,尤为是全景图拼接的,实际上相似佳能相机附加的软件,好多具有全景图拼接,多幅图像自动软件实现拼接,构成(合成)一幅全景图像(风景)。
Sift算法,我略知一二,没法仔细描述(刚也贴了2个最近的资料)。
      当就尺度空间(scale space),我想,其在计算机视觉(Computer Vision)\图像的多分辨率分析(尤为近年来小波的多分辨率分析)是常见的概念。
人类视觉捕捉景物的时候,先粗略(rough),后细节(fine)的习惯,被研究图像视觉的采用。2点采样使用的状况,则总体图像被不断的1/2边长划 分,不一样的图像(矩阵)构成了不一样分辨率的尺度空间(咱们理解为不一样层面的矩阵),尺度,Scale,这里就表明不一样的空间比例。

       我注意到David Lowe关于Sfit算法,2004年发表在Int. Journal of Computer Vision的经典论文中,对尺度空间(scal space)是这样定义的 :
   It has been shown by Koenderink (1984) and Lindeberg (1994) that under a variety of
reasonable assumptions the only possible scale-space kernel is the Gaussian function. Therefore,
the scale space of an image is defined as a function, L(x; y; delta) that is produced from the convolution of a variable-scale Gaussian, G(x; y; delta), with an input image, I(x; y):

所以 ,一个图像的尺度空间,L(x,y,delta) ,定义为原始图像I (x,y)与一个可变尺度的2维高斯函数G(x,y,delta) 卷积运算。

    关于图象处理中的空间域卷积运算,能够参考经典的图像处理教材(好比 美国 冈萨雷斯的图象处理,第二版,或者其 Matlab版,都有如何在离散空间进行运算的例子和说明)

    注:原文中 delta为希腊字母,这里没法表示,用delta代替。

Sift算法中,提到了尺度空间,请问什么是尺度和尺度空间呢?

   在上述理解的基础上,尺度 就是受delta这个参数控制的表示。
而不一样的L(x,y,delta)就构成了尺度空间( Space ,我理解,因为描述图像的时候,通常用连续函数比较好描述公式,因此,采用空间集合 ,空间的概念正规一些),实际上,具体计算的时候,即便连续的高斯函数,都要被离散为(通常为奇数大小)(2*k+1) *(2*k+1)矩阵,来和数字图像进行卷积运算。
算法

一、 SIFT 算法提出及其改进数据库

SIFT算法由D.G.Lowe 1999年提出,2004年完善总结。表明性文献编程

[1]David G. Lowe, "Object recognition from local scale-invariant features,"International Conference on Computer Vision, Corfu, Greece (September 1999), pp.1150-1157.数组

[2] David G. Lowe, "Distinctive image features from scale-invariant keypoints,"International Journal of Computer Vision, 60, 2 (2004), pp. 91-110.数据结构

具体的MATLAB代码在app

http://www.cs.ubc.ca/~lowe/keypoints/能够下载。ide

Rob Hess 基于GSL和Opencv编写了C语言程序。具体的代码能够在函数

http://web.engr.oregonstate.edu/~hess/index.html 中下载,能够在VC++.net环境中运行,在调试时要注意对GSL和Opencv的正确配置。

后来Y.Ke将其描述子部分用PCA代替直方图的方式,对其进行改进。

[3] Y. Ke and R. Sukthankar. PCA-SIFT: A More Distinctive Representation for Local Image Descriptors.Computer Vision and Pattern Recognition, 2004

Yanke’s homepage:

http://www.andrew.cmu.edu/user/yke/

二、SIFT 算法主要思想

SIFT算法是一种提取局部特征的算法,在尺度空间寻找极值点,提取位置,尺度,旋转不变量。

三、 SIFT算法的主要特色:

a) SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持必定程度的稳定性。

b) 独特性(Distinctiveness)好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配[23]。

c) 多量性,即便少数的几个物体也能够产生大量SIFT特征向量。

d) 高速性,经优化的SIFT匹配算法甚至能够达到实时的要求。

e) 可扩展性,能够很方便的与其余形式的特征向量进行联合。

四、SIFT算法步骤:

1)检测尺度空间极值点

2)精肯定位极值点

3)为每一个关键点指定方向参数

4)关键点描述子的生成

SIFT算法的介绍参见:SIFT 算法学习小记

     前面有朋友问到Sift特征点的提取方法,这里简单作个介绍。

      做为一种匹配能力较强的局部描述算子,SIFT算法的实现至关复杂,但从软件开发的角度来讲,只要会使用其中几个比较重要的函数就好了。这里要感谢 David Lowe这个大牛,不但提供了一种强悍的特征匹配算法,还给出了C++的实现代码,后来有人用C#实现了这个算法,须要的朋友可到网上自行下载。
       
     关键函数一:

   int sift_features( IplImage* img, struct feature** feat )

   这个函数就是用来提取图像中的特征向量。参数img为一个指向IplImage数据类型的指针,用来表示须要进行特征提取的图像。IplImage是 opencv库定义的图像基本类型(关于opencv是一个著名的图像处理类库,详细的介绍能够参见 http://www.opencv.org.cn)。参数feat 是一个数组指针,用来存储图像的特征向量。函数调用成功将返回特征向量的数目,不然返回-1.

 

   关键函数二:

   int _sift_features( IplImage* img, struct feature** feat, int intvls,double sigma, double contr_thr, int curv_thr, int img_dbl, int descr_width, int descr_hist_bins )

     这个函数是函数一的重载,做用是同样的,实际上函数一只不过是使用默认参数调用了函数二,核心的代码都是在函数二中实现的。下面将详细介绍一下其余的几个参数。

   intvls: 每一个尺度空间的采样间隔数,默认值为3.

   sigma: 高斯平滑的数量,默认值1.6.

   contr_thr:断定特征点是否稳定,取值(0,1),默认为0.04,这个值越大,被剔除的特征点就越多。

   curv_thr:断定特征点是否边缘点,默认为6.

   img_dbl:在创建尺度空间前若是图像被放大了1倍则取值为1,不然为0.

   descr_width:计算特征描述符时邻域子块的宽度,默认为4.

     descr_hist_bins:计算特征描述符时将特征点邻域进行投影的方向数,默认为8,分别是 0,45,90,135,180,215,270,315共8个方向。

      若是只是作特征提取,上面这个函数就足够了,不一样图像之间的匹配都是创建在这个基础上的,若是你有足够强的编程能力即便不懂这个算法也可以编写出像样的程 序来,由于下面的比较说白了都是数据结构的比较,跟算法已经没有太多关系了。若是想要深刻了解算法,仍是认真的看论文和代码吧。

、ubc:DAVID LOWE---SIFT算法的创始人,两篇巨经典经典的文章

二、cmu:YanKe---PCASIFT,总结的SIFT方面的文章SO全,巨经典

三、ubc:MBROWN---SIFT算法用于图像拼接的经典应用autopano-sift,包括一个SIFTLIB库

四、toronto:Jepson---Matlab SIFT tutorial, 超级超级超级经典~

五、ucla:Vedaldi---加州大学一个博士生编的SIFT,Matlab、C的都有,但没用过

六、一个小的拼接软件ptasmblr

几个关于sift的算法连接网址,之后要养成这种随时保存资料的好习惯!不然后面不知道又要花多少时间去找,最重要的是影响心情。

SIFT 关键点检测和匹配算法,这个算法在图像匹配方面具备很好的性能。

比原有的harris点匹配方式具备各高的佩准准确度,只是算法速度较慢

SIFT Keypoint Detector

This page provides access to a demo version of David Lowe's SIFT keypoint detector in the form of compiled binaries that can run under Linux or Windows. The demo software uses PGM format for image input. It can output keypoints and all information needed for matching them to a file in a simple ASCII format. A Matlab program and sample C code are provided that can read the keypoints and match them between images. 

 The image on the right shows an example of matching produced by the demo software. Features are extracted from each of the two images, and lines are drawn between features that have close matches. In this example, many matches are found and only a small fraction are incorrect. 

This software is provided for research purposes only, and a license must be obtained from the University of British Columbia for commercial applications. See the LICENSE file provided with the software. 

The program can be accessed from the following link in the form of a zip file containing the compiled binaries and demo code. To unpack, use "unzip siftDemoV4.zip" from Linux or an unzip utility in Windows. The code comes with a file README giving full details. 

SIFT demo program (Version 4, July 2005) 

Release historyVersion 4 (July 2005) There is now a Windows binary as well as one for Linux. The Matlab scripts have been improved and include code for matching keypoints between images. Version 3 (August 2004) This fixes a bug in the displayed orientation of arrows drawn for each keypoint when using the "-display" option. This affects only arrow display and not the keypoint features themselves (thanks to Yannik Fournier, Tom Stepleton, and Rob Sim for identifying the bug). In addition, a Matlab program is now provided for running the binary and loading the keypoints into Matlab when running under Linux (thanks to D. Alvaro and J.J. Guerrero for the Matlab program). Version 2 (September 2003) Fixes a bug in Version 1 of the sample code for doing matching (not the keypoints themselves) that incorrectly declared "unsigned char" as "char" (thanks to Yongqin Xiao and Suresh Lodha for their assistance in reporting this bug). This new version now finds more correct matches. The new version also contains more test data and raises the matching threshold. Version 1 (June 2003) Initial demo release. Related papers

The most complete and up-to-date reference for the SIFT feature detector is given in the following journal paper: 

David G. Lowe, "Distinctive image features from scale-invariant keypoints," International Journal of Computer Vision, 60, 2 (2004), pp. 91-110. [PDF] 

The SIFT approach to invariant keypoint detection was first described in the following ICCV 1999 conference paper, which also gives some more information on the applications to object recognition: 

David G. Lowe, "Object recognition from local scale-invariant features," International Conference on Computer Vision, Corfu, Greece (September 1999), pp. 1150-1157. [PDF]

The following paper gives methods for performing 3D object recognition by interpolating between 2D views. It also provides a probabilistic model for verification of recognition. 

David G. Lowe,  "Local feature view clustering for 3D object recognition,"  IEEE Conference on Computer Vision and Pattern Recognition, Kau
相关文章
相关标签/搜索