1 | % SaveCalPar save calibration parameters in different formats |
---|
2 | % |
---|
3 | % [Cst,Rot] = savecalpar(P,config) |
---|
4 | % P ... 3*CAM x 4 matrix containing result of selfcalibration, see EUCLIDIZE |
---|
5 | % config ... configuration structure, see CONFIGDATA |
---|
6 | % |
---|
7 | % |
---|
8 | % Cst ... CAMSx3 matrix containing the camera centers (in world coord.) |
---|
9 | % Rot ... 3*CAMSx3 matrix containing camera rotation matrices |
---|
10 | |
---|
11 | % $Author: svoboda $ |
---|
12 | % $Revision: 2.0 $ |
---|
13 | % $Id: savecalpar.m,v 2.0 2003/06/19 12:07:03 svoboda Exp $ |
---|
14 | % $State: Exp $ |
---|
15 | |
---|
16 | |
---|
17 | function [Cst,Rot] = savecalpar(P,config) |
---|
18 | |
---|
19 | idxused = config.cal.cams2use; |
---|
20 | |
---|
21 | CAMS = size(P,1)/3; |
---|
22 | |
---|
23 | Cst = zeros(CAMS,3); |
---|
24 | Pst = zeros(3*CAMS,3); |
---|
25 | Rot = []; |
---|
26 | for i=1:CAMS, |
---|
27 | % do not save P matrices in separate files |
---|
28 | if 1 |
---|
29 | Pmat = P(i*3-2:i*3,:); |
---|
30 | save(sprintf(config.files.CalPmat,idxused(i)),'Pmat','-ASCII'); |
---|
31 | end |
---|
32 | sc = norm(P(i*3,1:3)); |
---|
33 | % first normalize the Projection matrices to get normalized pixel points |
---|
34 | P(i*3-2:i*3,:) = P(i*3-2:i*3,:)./sc; |
---|
35 | % decompose the matrix by using rq decomposition |
---|
36 | [K,R] = rq(P(i*3-2:i*3,1:3)); |
---|
37 | tvec= inv(K)*P(i*3-2:i*3,4); % translation vector |
---|
38 | C = -R'*tvec; % camera center |
---|
39 | % Stephi calib params |
---|
40 | Pstephi = R'*inv(K); |
---|
41 | Pst(i*3-2:i*3,:) = Pstephi; |
---|
42 | Cst(i,:) = C'; |
---|
43 | % Stephi requires to save the pars in more "wordy" form |
---|
44 | fid = fopen(sprintf(config.files.StCalPar,idxused(i)),'wt'); |
---|
45 | if ~fid |
---|
46 | error('SaveCalPar: The camera cal file cannot be opened'); |
---|
47 | else |
---|
48 | fprintf(fid,'C1 = %f \n', C(1)); |
---|
49 | fprintf(fid,'C2 = %f \n', C(2)); |
---|
50 | fprintf(fid,'C3 = %f \n', C(3)); |
---|
51 | fprintf(fid,'\n'); |
---|
52 | fprintf(fid,'P11 = %f \n', Pstephi(1,1)); |
---|
53 | fprintf(fid,'P12 = %f \n', Pstephi(1,2)); |
---|
54 | fprintf(fid,'P13 = %f \n', Pstephi(1,3)); |
---|
55 | fprintf(fid,'P21 = %f \n', Pstephi(2,1)); |
---|
56 | fprintf(fid,'P22 = %f \n', Pstephi(2,2)); |
---|
57 | fprintf(fid,'P23 = %f \n', Pstephi(2,3)); |
---|
58 | fprintf(fid,'P31 = %f \n', Pstephi(3,1)); |
---|
59 | fprintf(fid,'P32 = %f \n', Pstephi(3,2)); |
---|
60 | fprintf(fid,'P33 = %f \n', Pstephi(3,3)); |
---|
61 | fclose(fid); |
---|
62 | end |
---|
63 | Rot = [Rot;R]; |
---|
64 | % Prithwijit requires to save the pars in more "wordy" form |
---|
65 | if 0 % do not save in the Prithwijit format |
---|
66 | fid = fopen(sprintf(config.files.CalPar,idxused(i)),'wt'); |
---|
67 | if ~fid |
---|
68 | error('SaveCalPar: The camera cal file cannot be opened'); |
---|
69 | else |
---|
70 | fprintf(fid,'R11 = %f \n',R(1,1)); |
---|
71 | fprintf(fid,'R12 = %f \n',R(1,2)); |
---|
72 | fprintf(fid,'R13 = %f \n',R(1,3)); |
---|
73 | fprintf(fid,'R21 = %f \n',R(2,1)); |
---|
74 | fprintf(fid,'R22 = %f \n',R(2,2)); |
---|
75 | fprintf(fid,'R23 = %f \n',R(2,3)); |
---|
76 | fprintf(fid,'R31 = %f \n',R(3,1)); |
---|
77 | fprintf(fid,'R32 = %f \n',R(3,2)); |
---|
78 | fprintf(fid,'R33 = %f \n',R(3,3)); |
---|
79 | fprintf(fid,'\n'); |
---|
80 | fprintf(fid,'t11 = %f \n',tvec(1)); |
---|
81 | fprintf(fid,'t21 = %f \n',tvec(2)); |
---|
82 | fprintf(fid,'t31 = %f \n',tvec(3)); |
---|
83 | fprintf(fid,'\n'); |
---|
84 | fprintf(fid,'K11 = %f \n',K(1,1)); |
---|
85 | fprintf(fid,'K12 = %f \n',K(1,2)); |
---|
86 | fprintf(fid,'K13 = %f \n',K(1,3)); |
---|
87 | fprintf(fid,'K21 = %f \n',K(2,1)); |
---|
88 | fprintf(fid,'K22 = %f \n',K(2,2)); |
---|
89 | fprintf(fid,'K23 = %f \n',K(2,3)); |
---|
90 | fprintf(fid,'K31 = %f \n',K(3,1)); |
---|
91 | fprintf(fid,'K32 = %f \n',K(3,2)); |
---|
92 | fprintf(fid,'K33 = %f \n',K(3,3)); |
---|
93 | fprintf(fid,'\n'); |
---|
94 | fclose(fid); |
---|
95 | end |
---|
96 | end |
---|
97 | end |
---|
98 | |
---|
99 | % save Stehpi params |
---|
100 | save(config.files.Pst,'Pst','-ASCII'); |
---|
101 | save(config.files.Cst,'Cst','-ASCII'); |
---|