資源簡介
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
評論
共有 條評論