📄 funmatdemotest.m
字号:
% funmatdemo
% by X. Armangue
% (c) Mr3D - University of Girona, September 2002
%
% Demostration of the Fundamental Matrix Estimation Toolbox
clear all; close all;
% List of methods
p7 = 1;
ls = 2;
eig = 3;
Faugeras = 4;
ilmmdpel = 5;
nr = 6;
inmmdpel = 7;
gradls = 8;
gradeig = 9;
Mestls = 10;
Mesteig = 11;
MestTorr = 12;
LMedSls = 13;
LMedSeig = 14;
RANSAC = 15;
mtorr_estf = 16; % copyright Philip Torr and Microsoft Corp 2002
mtorr_estf_bookstein = 17; % copyright Philip Torr and Microsoft Corp 2002
mtorr_estf_bookstein_sam = 18; % copyright Philip Torr and Microsoft Corp 2002
mtorr_estf_lin_non_lin = 19; % copyright Philip Torr and Microsoft Corp 2002
mtorr_F_constrained_fit = 20; % copyright Philip Torr and Microsoft Corp 2002
mlesac = 21; % copyright Philip Torr and Microsoft Corp 2002
mapsac = 22; % copyright Philip Torr and Microsoft Corp 2002
fns = 23; % copyright Anton van den Hengel form University of Adelaide
cfns = 24; % copyright Anton van den Hengel form University of Adelaide
image=31; % choose a number of image
redraw=0; % choose draw epipolar geometry
normal=2; % choose normalization method
% choose one or more methods
%method=[1,20,2,3,16,4]; % linear methods
%method=[5,17,18,6,19,7,8,9,23,24]; % iterative methods
%method=[10,11,12,13,14,15,21,22]; % robust methods
method=[2,3,4,5,6,7,8,9,23,24,10,11,12,13,14,15,21,22]; % all methods
%method=[13,14,15,21,22];
threshold=0.75;
[M,nomia,nomib]=loadtestimages(image); % loading image points
plotimagepoints(M,nomia,nomib) % display image points
disp('Display image points. (Press Return)')
pause
disp('*******************************************************************')
% Normalization
Mini=M;
switch normal,
case 1,
disp('Normalization [-1 1]');
[M,T1,T2]=normalonetoone(Mini);
case 2,
disp('Hartley Normalization');
[M,T1,T2]=normalHartley(Mini);
case 3,
disp('No Normalization');
T1=[1 0 0; 0 1 0; 0 0 1];
T2=[1 0 0; 0 1 0; 0 0 1];
end
bars=[];
bartime=[];
xlabelbars=[];
indexbars=1;
for i=1:size(method,2),
redrawnow=0;
switch method(i),
case 1,
disp('Method: seven points')
tic
F7p=funmat7p(M(:,1:7));
time7p=toc;
F7p=T1'*F7p*T2;
F7p=F7p./norm(F7p);
[mean7p,stddev7p,minim7p,maxim7p]=funmatError(Mini,F7p);
disp('Funamental Matrix')
disp(F7p)
disp(sprintf('Distance point-epipolar line\nmean: %f stdev: %f min: %f max: %f\n',mean7p,stddev7p,minim7p,maxim7p));
disp(sprintf('Rank-2: %d',rank(F7p)==2))
disp(sprintf('Time: %f',time7p))
disp('*******************************************************************')
if redraw,
fummatplot(Mini,F7p);
end
bars=[bars;mean7p,stddev7p];
bartime=[bartime;time7p];
xlabelbars=[xlabelbars sprintf(' %d.- 7p ',indexbars)];
if mod(indexbars,8)==0, xlabelbars=[xlabelbars '\n']; end
indexbars=indexbars+1;
case 2,
disp('Method: Least-squares')
tic
Fls=funmatls(M);
timels=toc;
Fls=T1'*Fls*T2;
Fls=Fls./norm(Fls);
[meanls,stddevls,minimls,maximls]=funmatError(Mini,Fls);
disp('Funamental Matrix')
disp(Fls)
disp(sprintf('Distance point-epipolar line\nmean: %f stdev: %f min: %f max: %f\n',meanls,stddevls,minimls,maximls));
disp(sprintf('Rank-2: %d',rank(Fls)==2))
disp(sprintf('Time: %f',timels))
disp('*******************************************************************')
if redraw,
fummatplot(Mini,Fls)
end
bars=[bars;meanls,stddevls];
bartime=[bartime;timels];
xlabelbars=[xlabelbars sprintf(' %d.- ls ',indexbars)];
if mod(indexbars,8)==0, xlabelbars=[xlabelbars '\n']; end
indexbars=indexbars+1;
case 3,
disp('Method: Least-squares with eigen analysis')
tic
Feig=funmateig(M);
timeeig=toc;
Feig=T1'*Feig*T2;
Feig=Feig./norm(Feig);
[meaneig,stddeveig,minimeig,maximeig]=funmatError(Mini,Feig);
disp('Funamental Matrix')
disp(Feig)
disp(sprintf('Distance point-epipolar line\nmean: %f stdev: %f min: %f max: %f\n',meaneig,stddeveig,minimeig,maximeig));
disp(sprintf('Rank-2: %d',rank(Feig)==2))
disp(sprintf('Time: %f',timeeig))
disp('*******************************************************************')
if redraw,
fummatplot(Mini,Feig)
end
bars=[bars;meaneig,stddeveig];
bartime=[bartime;timeeig];
xlabelbars=[xlabelbars sprintf(' %d.- lseig ',indexbars)];
if mod(indexbars,8)==0, xlabelbars=[xlabelbars '\n']; end
indexbars=indexbars+1;
case 4,
disp('Method: linear rank-2 constraint (by Faugeras)')
tic
FFaugeras=funmatFaugeras(M);
timeFaugeras=toc;
FFaugeras=T1'*FFaugeras*T2;
FFaugeras=FFaugeras./norm(FFaugeras);
[meanFaugeras,stddevFaugeras,minimFaugeras,maximFaugeras]=funmatError(Mini,FFaugeras);
disp('Funamental Matrix')
disp(FFaugeras)
disp(sprintf('Distance point-epipolar line\nmean: %f stdev: %f min: %f max: %f\n',meanFaugeras,stddevFaugeras,minimFaugeras,maximFaugeras));
disp(sprintf('Rank-2: %d',rank(FFaugeras)==2))
disp(sprintf('Time: %f',timeFaugeras))
disp('*******************************************************************')
if redraw,
fummatplot(Mini,FFaugeras)
end
bars=[bars;meanFaugeras,stddevFaugeras];
bartime=[bartime;timeFaugeras];
xlabelbars=[xlabelbars sprintf(' %d.- Faugeras ',indexbars)];
if mod(indexbars,8)==0, xlabelbars=[xlabelbars '\n']; end
indexbars=indexbars+1;
case 5,
disp('Method: Iterative Linear Method Minimizing Distances of Points to Epipolar Line')
tic
Filmmdpel=funmatilmmdpel(M,funmatls(M),100,10^(-5));
timeilmmdpel=toc;
Filmmdpel=T1'*Filmmdpel*T2;
Filmmdpel=Filmmdpel./norm(Filmmdpel);
[meanilmmdpel,stddevilmmdpel,minimilmmdpel,maximilmmdpel]=funmatError(Mini,Filmmdpel);
disp('Funamental Matrix')
disp(Filmmdpel)
disp(sprintf('Distance point-epipolar line\nmean: %f stdev: %f min: %f max: %f\n',meanilmmdpel,stddevilmmdpel,minimilmmdpel,maximilmmdpel));
disp(sprintf('Rank-2: %d',rank(Filmmdpel)==2))
disp(sprintf('Time: %f',timeilmmdpel))
disp('*******************************************************************')
if redraw,
fummatplot(Mini,Filmmdpel)
end
bartime=[bartime;timeilmmdpel];
bars=[bars;meanilmmdpel,stddevilmmdpel];
xlabelbars=[xlabelbars sprintf(' %d.- ilmmdpel ',indexbars)];
if mod(indexbars,8)==0, xlabelbars=[xlabelbars '\n']; end
indexbars=indexbars+1;
case 6,
disp('Method: iterative Newton-Raphson')
tic
Fnr=funmatnr(M,funmatls(M),100,10^(-5));
timenr=toc;
Fnr=T1'*Fnr*T2;
Fnr=Fnr./norm(Fnr);
[meannr,stddevnr,minimnr,maximnr]=funmatError(Mini,Fnr);
disp('Funamental Matrix')
disp(Fnr)
disp(sprintf('Distance point-epipolar line\nmean: %f stdev: %f min: %f max: %f\n',meannr,stddevnr,minimnr,maximnr));
disp(sprintf('Rank-2: %d',rank(Fnr)==2))
disp(sprintf('Time: %f',timenr))
disp('*******************************************************************')
if redraw,
fummatplot(Mini,Fnr)
end
bartime=[bartime;timenr];
bars=[bars;meannr,stddevnr];
xlabelbars=[xlabelbars sprintf(' %d.- nr ',indexbars)];
if mod(indexbars,8)==0, xlabelbars=[xlabelbars '\n']; end
indexbars=indexbars+1;
case 7,
disp('Method: Iterative Nonlinear Method Minimizing Distances of Points to Epipolar Lines')
tic
Finmmdpel=funmatinmmdpel(M,funmatls(M),100);
timeinmmdpel=toc;
Finmmdpel=T1'*Finmmdpel*T2;
Finmmdpel=Finmmdpel./norm(Finmmdpel);
[meaninmmdpel,stddevinmmdpel,miniminmmdpel,maximinmmdpel]=funmatError(Mini,Finmmdpel);
disp('Funamental Matrix')
disp(Finmmdpel)
disp(sprintf('Distance point-epipolar line\nmean: %f stdev: %f min: %f max: %f\n',meaninmmdpel,stddevinmmdpel,miniminmmdpel,maximinmmdpel));
disp(sprintf('Rank-2: %d',rank(Finmmdpel)==2))
disp(sprintf('Time: %f',timeinmmdpel))
disp('*******************************************************************')
if redraw,
fummatplot(Mini,Finmmdpel)
end
bars=[bars;meaninmmdpel,stddevinmmdpel];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -