?? torr_estimatef.m
字號:
% By Philip Torr 2002
% copyright Microsoft Corp.
%this is a set of functions for minimizing F
function [f, f_sq_errors, n_inliers,inlier_index,F] = torr_estimateF( matches, m3, f_optim_parameters, method, set_rank2, f_init)
no_matches = length(matches);
x1 = matches(:,1);
y1 = matches(:,2);
x2 = matches(:,3);
y2 = matches(:,4);
if nargin <5
set_rank2 = 0;
end
switch lower(method)
%as in ransac and torr mlesac/mapsac papers
case {'mlesac',0}
no_samp = f_optim_parameters(1);
T = f_optim_parameters(2);
f = torr_mlesac_F(x1,y1,x2,y2, no_matches, m3, no_samp, T);
%function f = mlesac_F(x1,y1,x2,y2, n_matches, m3, no_samp, f_threshold)
%as in ransac and torr mlesac/mapsac papers
case {'mapsac',1}
if isempty(f_optim_parameters)
no_samp =1000;
T = 4;
else
no_samp = f_optim_parameters(1);
T = f_optim_parameters(2);
end
[f,f_sq_errors, n_inliers,inlier_index] = torr_mapsac_F(x1,y1,x2,y2, no_matches, m3, no_samp, T);
case {'linear',2}
f = torr_estf(x1,y1,x2,y2, no_matches,m3);
%as in Torr & Fitzgibbon paper
case {'bookstein',3}
f = torr_estf_bookstein(x1,y1,x2,y2, no_matches,m3);
case {'b+sampson','boosam',4}
f = torr_estf_bookstein_sampson(x1,y1,x2,y2, no_matches,m3);
case {'non_linear',5}
f = torr_nonlinf_mincon2x2(f_init, x1,y1,x2,y2, no_matches, m3);
case {'lin+non_lin',6}
set_rank2 = 1;
f = torr_estimateF(matches, m3, [], 'linear',set_rank2);
f = torr_estimateF(matches, m3, [], 'non_linear',set_rank2,f);
case {'hegel1',7}
f = torr_estimateF(matches, m3, [], 'linear');
f = ant_fnsf(x1,y1,x2,y2,m3,f);
otherwise
disp('Unknown method.')
end
F = reshape(f, 3, 3);
%make it my way round
F = F';
%the F matrix is defined like:
% (nx2, ny2, m3) f(1 2 3) nx1
% (4 5 6) ny1
% (7 8 9) m3
% disp('before rank 2')
% F
if set_rank2
[U,S,V] = svd(F);
S(3,3) = 0;
F = U*S*V';
f = reshape(F',9,1);
end
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% disp('after rank 2')
% F
% % Unit fro-norm F:
% fn = norm(F(:));
% fn = 2^(-floor(log(fn) / log(2)));
% F = F * fn;
F = F/norm(F,'fro');
f = f/norm(f);
switch lower(method)
case {'bookstein',3,'linear',2,'bookstein',3,'b+sampson','boosam',4,'non_linear',5,'lin+non_lin',6, ...
'hegel1',7}
%f = reshape(F',9,1); %calculate squared errors (distance to manifold of F)
f_sq_errors = torr_errf2(f,x1,y1,x2,y2, no_matches, m3);
%next generate index set of inliers
T = 10;
inlier_index = find((f_sq_errors < T) == 1);
n_inliers = length(inlier_index);
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -