📄 steer.m
字号:
% RES = STEER(BASIS, ANGLE, HARMONICS, STEERMTX)%% Steer BASIS to the specfied ANGLE. % % BASIS should be a matrix whose columns are vectorized rotated copies of a % steerable function, or the responses of a set of steerable filters.% % ANGLE can be a scalar, or a column vector the size of the basis.% % HARMONICS (optional, default is N even or odd low frequencies, as for % derivative filters) should be a list of harmonic numbers indicating% the angular harmonic content of the basis.% % STEERMTX (optional, default assumes cosine phase harmonic components,% and filter positions at 2pi*n/N) should be a matrix which maps% the filters onto Fourier series components (ordered [cos0 cos1 sin1 % cos2 sin2 ... sinN]). See steer2HarmMtx.m% Eero Simoncelli, 7/96.function res = steer(basis,angle,harmonics,steermtx)num = size(basis,2);if ( any(size(angle) ~= [size(basis,1) 1]) & any(size(angle) ~= [1 1]) ) error('ANGLE must be a scalar, or a column vector the size of the basis elements');end%% If HARMONICS are not passed, assume derivatives.if (exist('harmonics') ~= 1) if (mod(num,2) == 0) harmonics = [0:(num/2)-1]'*2 + 1; else harmonics = [0:(num-1)/2]'*2; endelse harmonics = harmonics(:); if ((2*size(harmonics,1)-any(harmonics == 0)) ~= num) error('harmonics list is incompatible with basis size'); endend%% If STEERMTX not passed, assume evenly distributed cosine-phase filters:if (exist('steermtx') ~= 1) steermtx = steer2HarmMtx(harmonics, pi*[0:num-1]/num, 'even');endsteervect = zeros(size(angle,1),num);arg = angle * harmonics(find(harmonics~=0))';if (all(harmonics)) steervect(:, 1:2:num) = cos(arg); steervect(:, 2:2:num) = sin(arg);else steervect(:, 1) = ones(size(arg,1),1); steervect(:, 2:2:num) = cos(arg); steervect(:, 3:2:num) = sin(arg);endsteervect = steervect * steermtx;if (size(steervect,1) > 1) tmp = basis' .* steervect'; res = sum(tmp)';else res = basis * steervect';end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -