• 大小: 10KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-16
  • 语言: Matlab
  • 标签: SIFT  matlab  

资源简介

sift算法由Lowe教授提出,在图像匹配领域有着广泛的应用,本资源包含了sift算法的所有实现,包括尺度金字塔生成,极值点检测,主方向分配,描述子生成,分模块编写,并且是可视化的。

资源截图

代码片段和文件信息

% 下一步是计算特征点的主方向.
% 在特征点的一个区域内计算其梯度直方图
g = gaussian_filter( 1.5 * absolute_sigma(1intervals+3) / subsample(1) );
zero_pad = ceil( length(g) / 2 );


% 计算高斯金字塔图像的梯度方向和幅值
if interactive >= 1
    fprintf( 2 ‘Computing gradient magnitude and orientation...\n‘ );
end
tic;
mag_thresh = zeros(size(gauss_pyr));
mag_pyr = cell(size(gauss_pyr));
grad_pyr = cell(size(gauss_pyr));
for octave = 1:octaves
    for interval = 2:(intervals+1)
        
        % 计算xy的差分
        diff_x = 0.5*(gauss_pyr{octaveinterval}(2:(end-1)3:(end))-gauss_pyr{octaveinterval}(2:(end-1)1:(end-2)));
        diff_y = 0.5*(gauss_pyr{octaveinterval}(3:(end)2:(end-1))-gauss_pyr{octaveinterval}(1:(end-2)2:(end-1)));
        
        
        % 计算梯度幅值
        mag = zeros(size(gauss_pyr{octaveinterval}));
        mag(2:(end-1)2:(end-1)) = sqrt( diff_x .^ 2 + diff_y .^ 2 );
        
        
        % 存储高斯金字塔梯度幅值
        mag_pyr{octaveinterval} = zeros(size(mag)+2*zero_pad);
        mag_pyr{octaveinterval}((zero_pad+1):(end-zero_pad)(zero_pad+1):(end-zero_pad)) = mag;
        
        
        % 计算梯度方向
        grad = zeros(size(gauss_pyr{octaveinterval}));
        grad(2:(end-1)2:(end-1)) = atan2( diff_y diff_x );   % [-pipi]
        grad(find(grad == pi)) = -pi;
        
        
        % 存储高斯金字塔梯度方向
        grad_pyr{octaveinterval} = zeros(size(grad)+2*zero_pad);
        grad_pyr{octaveinterval}((zero_pad+1):(end-zero_pad)(zero_pad+1):(end-zero_pad)) = grad;
    end
end
clear mag grad
grad_time = toc;
if interactive >= 1
    fprintf( 2 ‘Gradient calculation time %.2f seconds.\n‘ grad_time );
end


% 下一步是确定特征点的主方向
% 方法:通过寻找每个关键点的子区域内梯度直方图的峰值(注:每个关键点的主方向可以有不止一个)

% g = gaussian_filter( 1.5 * absolute_sigma(1intervals+3) / subsample(1) );
% zero_pad = ceil( length(g) / 2 );
% 将灰度直方图分为36等分,每隔10度一份
num_bins = 36;
hist_step = 2*pi/num_bins;
hist_orient = [-pi:hist_step:(pi-hist_step)];


% 初始化关键点的位置、方向和尺度信息
pos = [];
orient = [];
scale = [];


% 给关键点确定主方向
if interactive >= 1
    fprintf( 2 ‘Assigining keypoint orientations...\n‘ );
end
tic;
for octave = 1:octaves
    if interactive >= 1
        fprintf( 2 ‘\tProcessing octave %d\n‘ octave );
    end
    for interval = 2:(intervals + 1)
        if interactive >= 1
            fprintf( 2 ‘\t\tProcessing interval %d ‘ interval );
        end
        keypoint_count = 0;  

        % 构造高斯加权掩模
        g = gaussian_filter( 1.5 * absolute_sigma(octaveinterval)/subsample(octave) );
        hf_sz = floor(length(g)/2);
        g = g‘*g;
        
        
        loc_pad = zeros(size(loc{octaveinterval})+2*zero_pad);
        loc_pad((zero_pad+1):(end-zero_pad)(zero_pad+1):(end-zero_pad)) = loc{octaveinterval};
        
        
        [iy ix]=find(loc_pad==1);
        for k = 1:length(iy)
            
            x = ix(k);
            y = iy(k);
            % % 对其值进行高斯平滑
            wght = g.*mag_pyr{octaveinterval}((y-hf

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6283  2017-05-08 12:21  sift\assign_consistent_orientation.m

     文件       2646  2017-05-08 12:24  sift\display_keypoints.m

     文件       5749  2017-05-18 16:06  sift\DOG_pyramid.m

     文件       8509  2017-05-06 21:48  sift\Extreme_point_detection.m

     文件        257  2017-05-07 20:41  sift\gaussian_filter.m

     文件       4259  2017-05-10 22:22  sift\represent_descriptor.m

     目录          0  2017-12-04 15:13  sift

----------- ---------  ---------- -----  ----

                27703                    7


评论

共有 条评论