SIFT-sift.m
来源:互联网 发布:linux查看用户和组 编辑:程序博客网 时间:2024/06/18 09:37
留坑,回头来写注释
% [image, descriptors, locs] = sift(imageFile)%% This function reads an image and returns its SIFT keypoints.% Input parameters:% imageFile: the file name for the image.%% Returned:% image: the image array in double format% descriptors: a K-by-128 matrix, where each row gives an invariant% descriptor for one of the K keypoints. The descriptor is a vector% of 128 values normalized to unit length.% locs: K-by-4 matrix, in which each row has the 4 values for a% keypoint location (row, column, scale, orientation). The % orientation is in the range [-PI, PI] radians.%% Credits: Thanks for initial version of this program to D. Alvaro and % J.J. Guerrero, Universidad de Zaragoza (modified by D. Lowe)function [image, descriptors, locs] = sift(imageFile)% Load imageimage = imread(imageFile);% If you have the Image Processing Toolbox, you can uncomment the following % lines to allow input of color images, which will be converted to grayscale.% if isrgb(image) % image = rgb2gray(image);% end[rows, cols] = size(image); % Convert into PGM imagefile, readable by "keypoints" executablef = fopen('tmp.pgm', 'w');if f == -1 error('Could not create file tmp.pgm.');endfprintf(f, 'P5\n%d\n%d\n255\n', cols, rows);fwrite(f, image', 'uint8');fclose(f);% Call keypoints executableif isunix command = '!./sift ';else command = '!siftWin32 ';endcommand = [command ' <tmp.pgm >tmp.key'];eval(command);% Open tmp.key and check its headerg = fopen('tmp.key', 'r');if g == -1 error('Could not open file tmp.key.');end[header, count] = fscanf(g, '%d %d', [1 2]);if count ~= 2 error('Invalid keypoint file beginning.');endnum = header(1);len = header(2);if len ~= 128 error('Keypoint descriptor length invalid (should be 128).');end% Creates the two output matrices (use known size for efficiency)locs = double(zeros(num, 4));descriptors = double(zeros(num, 128));% Parse tmp.keyfor i = 1:num [vector, count] = fscanf(g, '%f %f %f %f', [1 4]); %row col scale ori if count ~= 4 error('Invalid keypoint file format'); end locs(i, :) = vector(1, :); [descrip, count] = fscanf(g, '%d', [1 len]); if (count ~= 128) error('Invalid keypoint file value.'); end % Normalize each input vector to unit length descrip = descrip / sqrt(sum(descrip.^2)); descriptors(i, :) = descrip(1, :);endfclose(g);
0 0
- SIFT-sift.m
- SIFT
- sift
- SIFT
- sift
- SIFT
- SIFT
- SIFT
- SIFT
- sift
- SIFT
- SIFT
- SIFT
- SIFT
- sift
- SIFT
- sift
- sift
- android——不错的网络编程知识
- Android 网络通信框架Volley简介(Google IO 2013)
- mysql基本指令
- FORM表单重复提交问题解决方法
- KMP算法中关于构造DFA部分的纠结
- SIFT-sift.m
- .NET下的内存分配机制
- 博客生涯新的开始
- 浮点数的表示
- Sephiroth Python 分割文件以及合并文件
- Recursive class initialization in Java
- Eclipse下安装GEF和AmaterasUML
- 常用正则表达式积累
- 删除.svn文件夹