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

📄 getfundamentalmatrix.asv

📁 这是我用Delphi和Matlab写的一个程序
💻 ASV
字号:
function [F, e0, e1] = GetFundamentalMatrix(x0, x1)
%  FUNDAMENTAL_MATRIX  Return the fundamental matrix and epipolars
%  x0: 左图像的特征点。它是一个3×N的矩阵,矩阵的每一行为特征点的像素坐标(x, y, 1)'
%  x1: 右图像的特征点。它是一个3×N的矩阵,矩阵的每一行为特征点的像素坐标(x, y, 1)'
%  左右矩阵对应的一行为一对匹配点
%  F: 基本矩阵,e0: 左图像的极点,e1: 右图像的极点
%
%  刘然: liuran781101@tom.com

%  获得N的值
npts = size(x0,2);

%  Normalise each set of points so that the origin
%  is at centroid and mean distance from origin is sqrt(2).
%  normalise2dpts also ensures the scale parameter is 1. (即第三个坐标分量为1)
%  Matlab中的函数的参数都是按地址传递的
[x0, T0] = normalise2dpts(x0);  %  T0为变换矩阵
[x1, T1] = normalise2dpts(x1);  %  T1为变换矩阵

% Build the constraint matrix, 它是一个1×9的矩阵
A = [x1(1,:)'.*x0(1,:)' x1(1,:)'.*x0(2,:)' x1(1,:)' ...
    x1(2,:)'.*x0(1,:)' x1(2,:)'.*x0(2,:)'  x1(2,:)' ...
    x0(1,:)' x0(2,:)' ones(npts,1) ];

[U,D,V] = svd(A, 0); %  Under MATLAB use the economy decomposition

%  Extract fundamental matrix from the column of V corresponding to
%  smallest singular value.
F = reshape(V(:,9),3,3)';

%  Enforce constraint that fundamental matrix has rank 2 by performing
%  a svd and then reconstructing with the two largest singular values.
[U,D,V] = svd(F,0);  %  再对结果做一次奇异值分解,得到U、D、V三个矩阵
F = U*diag([D(1,1) D(2,2) 0])*V';  %  Reconstructing F with the two largest singular values

% Denormalise
F = T1' * F * T0;

if nargout == 3  	% Solve for epipoles, nargout给出的是调用程序时指定的输出宗量的个数
  [U,D,V] = svd(F,0);
  e0 = hnormalise(V(:,3));  %  让齐次坐标的h等于1
  e1 = hnormalise(U(:,3));  %  让齐次坐标的h等于1
end


⌨️ 快捷键说明

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