资源简介
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
相关资源
- matlab处理来自串口的数据并绘图
- MATLAB的FFT算法实现
- SVG无功补偿仿真
- 相移光纤光栅的MATLAB仿真.
- matlab代码DFT.zip
- 电机map图绘制
- MATLAB2012B+CCS3.3+TI28035TI28335代码生成配
- EKF扩展卡尔曼在线滤波
-
异步电机矢量控制仿真模型simuli
n - anfis matlab
- BPSk循环谱
- MATLAB 使用混沌算法对图像进行加密
- SNV变换算法
- matlab实现基于Household变换的QR分解程序
- K-mean聚类、LVQ聚类和混合高斯聚类的
- SVM MATLAB toolbox
- matlab nasch双车道模型
- 基于体绘制的头部三维重建,并用m
- 脉冲响应模型辨识 matlab
- MATLAB SYSTEM VIEW通信原理实验及系统仿
- MATLAB SVD
- 欧拉法解常微分方程组数值解的MATL
- matlab对有周期性噪声的图像去噪
- 基于MUSIC的均匀矩形阵DOT估计matlab仿真
- 钢琴曲《卡农》的matlab程序
- MATLAB 回声状态网络ESN工具箱 ESN_Tool
- MATLAB数字图像处理算法演示程序GUI
- patchwork算法matlab实现代码
- matlab中实现IGBT仿真
- matlab水锤程序
评论
共有 条评论