% This function reads a siftgeo binary file %读取siftgeo格式的二进制文件
%
% Usage: [v, meta] = siftgeo_read (filename, maxdes)
% filename the input filename
% maxdes maximum number of descriptors to be loaded 要加载的描述子最大数量
% (default=unlimited)%默认无限制
%
% Returned values %返回值
% v the sift descriptors (1 descriptor per line) %每行一个sift描述子
% meta meta data for each descriptor, i.e., per line: %每个描述子的元数据
% x, y, scale, angle, mi11, mi12, mi21, mi22, cornerness
function [v, meta] = siftgeo_read (filename, maxdes) if nargin < 2 %nargin:number of arguments input %nargout:number of arguments ouput
maxdes = 100000000; %1亿
end % open the file and count the number of descriptors
fid = fopen (filename, 'r'); fseek (fid, 0, 1); %fseek(fid, 0, 'eof'); 跳到文件末尾 %'bof' or -1 Beginning of file; 'cof' or 0 Current position in file; 'eof' or 1 End of file
n = ftell (fid) / (9 * 4 + 1 * 4 + 128); %n是descriptors的数量 %return the current position (number of bytes from the file beginning)
fseek (fid, 0, -1); %fseek(fid, 0, 'bof') 跳到文件开头 if n > maxdes
n = maxdes;
end; % first read the meta information associated with the descriptor
meta = zeros (n, 9, 'single'); %n*9矩阵
v = zeros (n, 128, 'single'); %n*128矩阵 % read the elements
for i = 1:n %n是要读区的descriptors数量
meta(i,:) = fread (fid, 9, 'float'); %(float)*9 元数据信息
d = fread (fid, 1, 'int'); %(int)*1
v(i,:) = fread (fid, d, 'uint8=>single'); %(uint8=>single)*d 描述子
end fclose (fid);