资源简介
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_desc
目录 0 2017-12-04 15:13 sift
----------- --------- ---------- ----- ----
27703 7
- 上一篇:kpca降维算法
- 下一篇:加密软件ms转mse
相关资源
- 串行级联cpm系统MATLAB仿真
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
评论
共有 条评论