⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 funmatdemotest.m

📁 计算基本矩阵的matlab例程
💻 M
📖 第 1 页 / 共 3 页
字号:
% 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 + -