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

📄 affinefundmatrix.m

📁 MATLAB Functions for Multiple View Geometry
💻 M
字号:
% AFFINEFUNDMATRIX - computes affine fundamental matrix from 4 or more points%% Function computes the affine fundamental matrix from 4 or more matching% points in a stereo pair of images.  The Gold Standard algorithm given% by Hartley and Zisserman p351 (2nd Ed.) is used. %% Usage:   [F, e1, e2] = affinefundmatrix(x1, x2)%          [F, e1, e2] = affinefundmatrix(x)%% Arguments:%          x1, x2 - Two sets of corresponding point.  If each set is 3xN%                   it is assumed that they are homogeneous coordinates.%                   If they are 2xN it is assumed they are inhomogeneous.%         %          x      - If a single argument is supplied it is assumed that it%                   is in the form x = [x1; x2]% Returns:%          F      - The 3x3 fundamental matrix such that x2'*F*x1 = 0.%          e1     - The epipole in image 1 such that F*e1 = 0%          e2     - The epipole in image 2 such that F'*e2 = 0%% Peter Kovesi% School of Computer Science & Software Engineering% The University of Western Australia% pk at csse uwa edu au% http://www.csse.uwa.edu.au/~pk%% Feb 2005 function [F,e1,e2] = affinefundmatrix(varargin)        [x1, x2, npts] = checkargs(varargin(:));    X = [x2; x1];      % Form vectors of correspondences    Xmean = mean(X,2); % Mean     deltaX = zeros(size(X));    for k = 1:4	deltaX(k,:) = X(k,:) - Xmean(k);    end            [U,D,V] = svd(deltaX',0);        % Form  fundamental matrix from the column of V corresponding to    % smallest singular value.    v = V(:,4);    F = [ 0    0    v(1)	  0    0    v(2)	 v(3) v(4) -v'*Xmean];        % Solve for epipoles    [U,D,V] = svd(F,0);    e1 = V(:,3);    e2 = U(:,3);    %--------------------------------------------------------------------------% Function to check argument values and set defaultsfunction [x1, x2, npts] = checkargs(arg);        if length(arg) == 2        x1 = arg{1};        x2 = arg{2};        if ~all(size(x1)==size(x2))            error('x1 and x2 must have the same size');        elseif size(x1,1) == 3	    % Convert to inhomogeneous coords            x1(1,:) = x1(1,:)./x1(3,:);            x1(2,:) = x1(2,:)./x1(3,:);	                x2(1,:) = x2(1,:)./x2(3,:);            x2(2,:) = x2(2,:)./x2(3,:);	    	    	    x1 = x1(1:2,:);   x2 = x2(1:2,:);        elseif size(x1,1) ~= 2	    error('x1 and x2 must be 2xN or 3xN arrays');        end            elseif length(arg) == 1        if size(arg{1},1) == 6            x1 = arg{1}(1:3,:);            x2 = arg{1}(4:6,:);	    % Convert to inhomogeneous coords            x1(1,:) = x1(1,:)./x1(3,:);            x1(2,:) = x1(2,:)./x1(3,:);	                x2(1,:) = x2(1,:)./x2(3,:);            x2(2,:) = x2(2,:)./x2(3,:);	    	    	    	    x1 = x1(1:2,:);   x2 = x2(1:2,:);	            elseif size(arg{1},1) == 4            x1 = arg{1}(1:2,:);            x2 = arg{1}(3:4,:);	    	else	    error('Single argument x must be 6xN');        end    else        error('Wrong number of arguments supplied');    end          npts = size(x1,2);    if npts < 4        error('At least 4 points are needed to compute the affine fundamental matrix');    end    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -