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

📄 dltdecomp.m

📁 一个很好用的摄像机标定程序
💻 M
字号:
function [t, r, intern, lambda] = DLTdecomp(dlt)%DLTDECOMP	Decomposition of DLT matrix%% Syntax:%  [t, r, intern, lambda] = DLTDECOMP(dlt)%% Input:%  DLT = Direct Linear Transform matrix (3 x 4)%% Output:%  T = [TX, TY, TZ] translation of camera%  R = [ROLL, PITCH, YAW] rotation of camera%  INTERN = [U0, V0, B1, B2, F] camera internal parameters (center, affine%      distortions, focal length)%  LAMBDA = scale factor (generally not needed)%% Decomposition is based on "Trond Melen: An Ambiguity Free Decomposition% of the Direct Linear Transformation (DLT) Matrix, 1995"; e-mail:% Trond.Melen@si.sintef.no. Direct method, fast and numerically stable% (QR decomposition).%% Limitations:%  the left 3 x 3 submatrix of the DLT matrix should have full rank 3%% See also: DIRANGLES%% Radim Halir (halir@prip.tuwien.ac.at), PRIP TU Wien% 26.2.96%if (size(dlt) ~= [3, 4])    error('dltdecomp: bad dlt matrix');enda = dlt(:, 1 : 3);if (rank(a) ~= 3)    error('dltdecomp: bad dlt matrix');end% translationt = a \ dlt(:, 4);t = -t';lambda = sqrt(a(3, :) * a(3, :)');% rq decomposition[q r] = qr(inv(a / lambda));q = inv(q);r = inv(r);j = eye(3);if (r(1, 1) < 0.0)    j(1, 1) = -1.0;end;if (r(2, 2) < 0.0)    j(2, 2) = -1.0;end;if (r(3, 3) < 0.0)    j(3, 3) = -1.0;end;r = r * j;temp = - r(1, 2) / (r(1, 1) + r(2, 2));cosphi = 1.0 / sqrt(1 + temp ^ 2);sinphi = temp * cosphi;s = eye(3);s(1, 1) = cosphi;s(1, 2) = sinphi;s(2, 1) = -sinphi;s(2, 2) = cosphi;% rotationg = r * s;m = s' * j * q;if (det(m) < 0.0)    m = -m;    lambda = -lambda;end    % r = dirangles(m);% beware, r is used before in different meaning% internal parametersu0 = g(1, 3);v0 = g(2, 3);temp = g(1, 1) + g(2, 2);b1 = (g(2, 2) - g(1, 1)) / temp;b2 = -2 * g(1, 2) / temp;f = 2 * (g(1, 1) * g(2, 2) - g(1, 2) ^ 2) / temp;intern = [u0, v0, b1, b2, f];

⌨️ 快捷键说明

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