尺度不变的额特征提取代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function [ pos, scale, orient, desc ] = SIFT( im, octaves, intervals, object_mask, contrast_threshold, curvature_threshold, interactive )
% 功能:提取灰度图像的尺度不变特征(SIFT特征)
% 输入:
% im - 灰度图像,该图像的灰度值在0到1之间(注意:应首先对输入图像的灰度值进行归一化处理)
% octaves - 金字塔的组数:octaves (默认值为4).
% intervals - 该输入参数决定每组金字塔的层数(默认值为2).
% object_mask - 确定图像中尺度不变特征点的搜索区域,如果没有特别指出,则算法将搜索整个图像
% contrast_threshold - 对比度阈值(默认值为0.03).
% curvature_threshold - 曲率阈值(默认值为10.0).
% interactive - 函数运行显示标志,将其设定为1,则显示算法运行时间和过程的相关信息;% 如果将其设定为2,则仅显示最终运行记过(default = 1).
% 输出:
% pos - Nx2 矩阵,每一行包括尺度不变特征点的坐标(x,y)
% scale - Nx3 矩阵,每一行包括尺度不变特征点的尺度信息(第一列是尺度不变特征点所在的组,
% 第二列是其所在的层, 第三列是尺度不变特征点的sigma).
% orient - Nx1 向量,每个元素是特征点的主方向,其范围在[-pi,pi)之间.
% desc - Nx128 矩阵,每一行包含特征点的特征向量.
% 参考文献:
% [1] David G. Lowe, "Distinctive Image Features from Sacle-Invariant Keypoints",
% accepted for publicatoin in the International Journal of Computer
% Vision, 2004.
% [2] David G. Lowe, "Object Recognition from Local Scale-Invariant Features",
% Proc. of the International Conference on Computer Vision, Corfu,
% September 1999.
%
% Xiaochuan ZHAO;zhaoxch@
% 设定输入量的默认值
if ~exist('octaves')
octaves = 4;
end
if ~exist('intervals')
intervals = 2;
end
if ~exist('object_mask')
object_mask = ones(size(im));
end
if size(object_mask) ~= size(im)
object_mask = ones(size(im));
end
if ~exist('contrast_threshold')
contrast_threshold = 0.02; %0.03吧
end
if ~exist('curvature_threshold')
curvature_threshold = 10.0;
end
if ~exist('interactive')
interactive = 1;
end
% 检验输入灰度图像的像素灰度值是否已归一化到[0,1]
if( (min(im(:)) < 0) | (max(im(:)) > 1) )
fprintf( 2, 'Warning: image not normalized to [0,1].\n' );
end
% 将输入图像经过高斯平滑处理,采用双线性差值将其扩大一倍.
if interactive >= 1
fprintf( 2, 'Doubling image size for first octave...\n' );
end
tic;
antialias_sigma = 0.5;
if antialias_sigma == 0
signal = im;
else
g = gaussian_filter( antialias_sigma );
if exist('corrsep') == 3
signal = corrsep( g, g, im );
else
signal = conv2( g, g, im, 'same' );
end
end
signal = im;
[X Y] = meshgrid( 1:0.5:size(signal,2), 1:0.5:size(signal,1) );
signal = interp2( signal, X, Y, '*linear' );
subsample = [0.5]; % 降采样率;
%下一步是生成高斯和差分高斯(DOG)金字塔,这两个金字塔的数据分别存储在名为gauss_pyr{orient,interval}
% 和DOG_pyr{orient,interval}的元胞数字中。高斯金字塔含有s+3层,差分高斯金字塔含