% hartley constraint % finds the calibration matrix from a collection of "p" vectors... function K=dummy(p) [M,N]=size(p); if N~=8 error('input parameter list must be an M by 8 matrix') end%if if M<=3 error('input parameter list should be quite long to get a good estimate') end%if X=[]; % initialize the ``X'' of Hartley, page 8 for m=1:M p11=p(m,1); p12=p(m,2); p13=p(m,3); p21=p(m,4); p22=p(m,5); p23=p(m,6); p31=p(m,7); p32=p(m,8); p33=1; P=[p(m,1) p(m,2) p(m,3); p(m,4) p(m,5) p(m,6); p(m,7) p(m,8) 1]; Q=inv(P'); Q=Q/Q(3,3); q=[Q(1,1) Q(1,2) Q(1,3) Q(2,1) Q(2,2) Q(2,3) Q(3,1) Q(3,2)]; q11=q(1); q12=q(2); q13=q(3); q21=q(4); q22=q(5); q23=q(6); q31=q(7); q32=q(8); q33=1; Xm=[q11-p11 q21-p12 q31-p13 0 0 0 ;... q12 q22-p11 q32 -p12 -p13 0 ;... q13 q23 q33-p11 0 -p12 -p13;... ... -p21 q11-p22 -p23 q21 q31 0 ;... 0 q12-p21 0 q22-p22 q32-p23 0 ;... 0 q13 -p21 q23 q33-p22 -p23;... ... -p31 -p32 q11-p33 0 q21 q31 ;... 0 -p31 q12 -p32 q22-p33 q32 ;... 0 0 q13-p31 0 q23-p32 q33-p33;... ]; X=[X;Xm]; end%for [v d]=eig(X'*X); d=diag(d); [trash location]=min(d); % choose least eigenvalue answer=v(:,location); C=[answer(1) answer(2) answer(3);... answer(2) answer(4) answer(5);... answer(3) answer(5) answer(6);... ]; %%%K=chol(C); wrong because C=KK' not K'K eig(C) K = inv(chol(inv(C))); K=K/K(3,3);