目前网络上可以找到的关于SIFT算法Matlab测试代码的资源就是:
1 加拿大University of British Columbia 大学计算机科学系教授 David G. Lowe发表于2004年Int Journal of Computer Vision,2(60):91-110的那篇标题为“Distivtive Image Features from Scale -Invariant Keypoints" 的论文。作者在其学术网站上发表的Matlab程序代码(注意,这个程序代码的初始版本是 D. Alvaro and J.J. Guerrero, 来自Universidad de Zaragoza。)
上述代码可以很容易检索到,如,
http://www.cs.ubc.ca/~lowe/keypoints/
2 美国加州大学洛杉矶分校(University of California at Los Angeles) Andrea Vedaldi 博士研究生给出的基于David Lowe 发表的论文给利用Matlab和C语言混合编程给出的Sift detector and descriptor的实现过程。
Andrea Vedaldi
Ph.D. Candidate / VisionLab / UCLA
![]() |
Andrea Vedaldi (
vedaldi@cs.ucla.edu)
Boelter Hall 3811 (
Vision Lab -
map)
University of California, LA (
UCLA)
|
News
Bio. Andrea Vedaldi was born in Verona, Italy, in 1979. He received the DIng from the
University of Padova, Italy, in 2003 and the MSc in Computer Science (CS) from the
University of California, Los Angles (UCLA) in 2005. He is the recepient of the UCLA 2005 outstanding master in CS award and he is currently enrolled in the UCLA Ph.D program.
Popular code
- SIFT, SIFT++ and MSER.
- VisionLab Features Library: SIFT, MSER and more (beta).
- Bag of features.
Collaborators
- Stefano Soatto, University of California at Los Angeles, Los Angeles, USA.
- Serge Belongie, University of California at San Diego, San Diego, USA.
- Paolo Favaro, Heriot-Watt University, Riccarton, Edinburgh, UK.
- Hailin Jin, Adobe System Incorporated, California, USA.
- Andrew Rabinowich, University of California at San Diego, San Diego, USA.
- Gregorio Guidi, University of California at Los Angeles, Los Angeles, USA.
- Brian Fulkerson, University of California at Los Angeles, Los Angeles, USA.
3 以后陆续有许多基于Sift算法实现图像目标匹配和目标识别等方面的应用,大多都是基于上述的代码和算法原理来进行的。
关于第一测试代码的说明:
1 共有三段Matlab代码源文件
match.m:测试程序
功能:该函数读入两幅(灰度)图像,找出各自的 SIFT 特征, 并显示两连接两幅图像中被匹配的特征点(关键特征点(the matched keypoints)直线(将对应特征点进行连接)。判断匹配的准则是匹配距离小于distRatio倍于下一个最近匹配的距离( A match is accepted only if its distance is less than distRatio times the distance to the second closest match.
该程序返回显示的匹配对的数量。( It returns the number of matches displayed.)
调用实例: match('desk.jpg','book.jpg');
该程序返回显示的匹配对的数量。( It returns the number of matches displayed.)
调用实例: match('desk.jpg','book.jpg');
( 假如,想测试一个含有一本书的桌面的图像 和一本书的图像之间特征匹配)
调用方法和参数描述:略。
注意:(1)图像为灰度图像,如果是彩×××像,应该在调用前利用rgb2gray转换为灰度图像。
(2)参数distRatio 为控制匹配点数量的系数,这里取 0.6,该参数决定了匹配点的数量,在Match.m文件中调整该参数,获得最合适的匹配点数量。
sift.m :尺度不变特征变换(SIFT算法)的核心算法程序
具体原理详见
David G. Lowe发表于2004年Int Journal of Computer Vision,2(60):91-110的那篇标题为“Distivtive Image Features from Scale -Invariant Keypoints" 的论文
功能:该函数读入灰度图像,返回SIFT 特征关键点( SIFT keypoints.)
调用方法和参数描述:
调用方式:[p_w_picpath, descriptors, locs] = sift(p_w_picpathFile)
输入参数( Input parameters):
p_w_picpathFile: 图像文件名.
输出或返回参数( Returned):
p_w_picpath: 是具有double format格式的图像矩阵
descriptors: 一个 K-by-128 的矩阵x, 其中每行是针对找到的K个关键特征点(the K keypoints) 的不变量描述子. 这个描述子(descriptor)是一个拥有128个数值并归一化为单位长度向量.
locs: 是K-by-4 矩阵, 其中的每一行具有四个数值,表示关键点位置信息 (在图像中的行坐标,列坐标(row, column) ,注意,一般图像的左上角为坐标原点), 尺度scale,高斯尺度空间的参数,其中该参数也决定了frame(结构)确定的图像disk的大小, 最后一个参数是方向orientation). 方向参数的范围是[-PI, PI] 单位为弧度.
%
输出或返回参数( Returned):
p_w_picpath: 是具有double format格式的图像矩阵
descriptors: 一个 K-by-128 的矩阵x, 其中每行是针对找到的K个关键特征点(the K keypoints) 的不变量描述子. 这个描述子(descriptor)是一个拥有128个数值并归一化为单位长度向量.
locs: 是K-by-4 矩阵, 其中的每一行具有四个数值,表示关键点位置信息 (在图像中的行坐标,列坐标(row, column) ,注意,一般图像的左上角为坐标原点), 尺度scale,高斯尺度空间的参数,其中该参数也决定了frame(结构)确定的图像disk的大小, 最后一个参数是方向orientation). 方向参数的范围是[-PI, PI] 单位为弧度.
%
appendp_w_picpaths.m: 该函数创建一个新的图像分别包含两个匹配的图像和他们之间的匹配对的连接直线.
转载于:https://blog.51cto.com/zerol/350105