资源简介
SIFT基于特征点配准算法的matlab实现,可以直接运行,运行方法参见run_demo; SIFT是一种经典算法,原理可查看wiki
代码片段和文件信息
function descriptors = do_descriptor(octave ... % 一组的高斯尺度空间
oframes ... % frames 包含关键点相关的尺度和主方向
sigma0 ... % 基本 sigma 值
S ... % 该组的尺度层数
smin ...
varargin)
for k=1:2:length(varargin)
switch lower(varargin{k})
case ‘magnif‘
magnif = varargin{k+1} ;
case ‘numspatialbins‘
NBP = varargin{k+1} ;
case ‘numorientbins‘
NBO = varargin{k+1} ;
otherwise
error([‘Unknown parameter ‘ varargin{k} ‘.‘]) ;
end
end
num_spacialBins = NBP;
num_orientBins = NBO;
key_num = size(oframes 2);
% 计算该图的向量和方向
[M N s_num] = size(octave); % M 是图像的高度 N 是图像的宽度; num_level is the number of scale level of the octave
descriptors = [];
magnitudes = zeros(M N s_num);
angles = zeros(M N s_num);
% compute image gradients
for si = 1: s_num
img = octave(::si);
dx_filter = [-0.5 0 0.5];
dy_filter = dx_filter‘;
gradient_x = imfilter(img dx_filter);
gradient_y = imfilter(img dy_filter);
magnitudes(::si) =sqrt( gradient_x.^2 + gradient_y.^2);
% if sum( gradient_x == 0) > 0
% fprintf(‘00‘);
% end
angles(::si) = mod(atan(gradient_y ./ (eps + gradient_x)) + 2*pi 2*pi);
end
x = oframes(1:);
y = oframes(2:);
s = oframes(3:);
% round off
x_round = floor(oframes(1:) + 0.5);
y_round = floor(oframes(2:) + 0.5);
scales = floor(oframes(3:) + 0.5) - smin;
for p = 1: key_num %对各个关键点处理
s = scales(p);
xp= x_round(p);
yp= y_round(p);
theta0 = oframes(4p);%关键点的主方向
sinth0 = sin(theta0) ;
costh0 = cos(theta0) ;
sigma = sigma0 * 2^(double (s / S)) ;
SBP = magnif * sigma;
%W = floor( sqrt(2.0) * SBP * (NBP + 1) / 2.0 + 0.5);
W = floor( 0.8 * SBP * (NBP + 1) / 2.0 + 0.5);
descriptor = zeros(NBP NBP NBO);
% within the big square select the pixels with the circle and put into
% the histogram. no need to do rotation which is very expensive
%在大正方形中用高斯加权圆选择像素点放入方向直方图中,不需要做昂贵的图像旋转
for dxi = max(-W 1-xp): min(W N -2 - xp)
for dyi = max(-W 1-yp) : min(+W M-2-yp)
mag = magnitudes(yp + dyi xp + dxi s); % 当前点(yp + dyi xp + dxi)的梯度幅值
angle = angles(yp + dyi xp + dxi s) ; % 当前点(yp + dyi xp + dxi)的梯度幅角
% angle = mod(-angle + theta0 2*pi); % 用关键点的主方向调整角度 并且 mod it with 2*pi
angle = mod(angle - theta0 2*pi);
dx = double(xp + dxi - x(p)); % x(p) 是关键点的精确位置 (浮点数). dx 相对于该关键点当前像素的位置
dy = double(yp + dyi - y(p)); % dy 相对于该关键点当前像素的位置
nx = ( costh0 * dx + sinth0 * dy) / SBP ; % nx 是旋转(dx dy)后的规格化位置 with the major orientation angle. this tells which x-axis spatial bin the pixel falls in
ny = (-sint
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-02-17 18:18 dosift\
文件 5412 2013-03-14 16:27 dosift\do_desc
文件 464 2013-03-14 16:27 dosift\do_diffofg.m
文件 4322 2013-03-14 16:27 dosift\do_extrefine.m
文件 2964 2013-03-14 16:27 dosift\do_gaussian.m
文件 2133 2013-03-14 16:27 dosift\do_localmax.m
文件 2505 2013-03-14 16:27 dosift\do_orientation.m
文件 3838 2013-03-14 16:27 dosift\do_sift.m
文件 378 2019-02-17 18:24 dosift\run_demo.m
文件 215 2013-03-14 16:27 dosift\smooth.m
- 上一篇:数字图像处理图像压缩MATLAB程序及仿真
- 下一篇:matlab解N维方程组的代码
相关资源
- matlab解N维方程组的代码
- 数字图像处理图像压缩MATLAB程序及仿
- 数字图像处理图像增强MATLAB程序及仿
- matlab在距地面10m的高度以15m/s的初速度
- matlab版SVM代码,线性和非线性,拿来
- 人脸表情识别MATLAB
- 高斯肤色模型分割matlab
- 自适应全变分图像去噪Matlab源代码
- 势函数的matlab实现
- adaboost算法Matlab代码及训练数据
- 近似熵算法
- MATLAB-脑电信号处理程序
- 谢菲尔德matlab遗传工具箱
- MIMO-OFDM不同信道估计的对比matlab代码
- 粒子群优化CLPSO的MATLAB源代码
- 直接序列扩频通信系统与MATLAB仿真
- mclmcrrt8_3.dll
- 基于matlab的canny算子的实现
- 史密斯圆图的matlab程序
- SVM算法仿真matlab代码
- MATLAB R2012b crack 安装密钥
- 中国人口结构预测模型Matlab源程序
- Matlab+2017a+Win64+Crack
- rs(204188)编码器工程及matlab仿真
- matlab解方程与函数极值
- 基于样本块修补算法代码matlab
- MATLAB-批转换MP3文件为语谱图,并保存
- 真彩色图像转 256 色图像的MATLAB实现
- BPSK调制解调MATLAB程序
- 单列多服务台排队matlab仿真系统
评论
共有 条评论