尺度不变的额特征提取代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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层,差分高斯金字塔含

相关文档
最新文档