📄 dltdecomp.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 + -