📄 vgg_h_from_x_lin.m
字号:
function H = vgg_H_from_x_lin(xs1,xs2)
% H = vgg_H_from_x_lin(xs1,xs2)
%
% Compute H using linear method (see Hartley & Zisserman Alg 3.2 page 92 in
% 1st edition, Alg 4.2 page 109 in 2nd edition).
% Point preconditioning is inside the function.
%
% The format of the xs [p1 p2 p3 ... pn], where each p is a 2 or 3
% element column vector.
[r,c] = size(xs1);
if (size(xs1) ~= size(xs2))
error ('Input point sets are different sizes!')
end
if (size(xs1,1) == 2)
xs1 = [xs1 ; ones(1,size(xs1,2))];
xs2 = [xs2 ; ones(1,size(xs2,2))];
end
% condition points
C1 = vgg_conditioner_from_pts(xs1);
C2 = vgg_conditioner_from_pts(xs2);
xs1 = vgg_condition_2d(xs1,C1);
xs2 = vgg_condition_2d(xs2,C2);
D = [];
ooo = zeros(1,3);
for k=1:c
p1 = xs1(:,k);
p2 = xs2(:,k);
D = [ D;
p1'*p2(3) ooo -p1'*p2(1)
ooo p1'*p2(3) -p1'*p2(2)
];
end
% Extract nullspace
[u,s,v] = svd(D, 0); s = diag(s);
nullspace_dimension = sum(s < eps * s(1) * 1e3);
if nullspace_dimension > 1
fprintf('Nullspace is a bit roomy...');
end
h = v(:,9);
H = reshape(h,3,3)';
%decondition
H = inv(C2) * H * C1;
H = H/H(3,3);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -