source: trunk/src/toolbox_calib/go_calib_optim.m @ 907

Last change on this file since 907 was 810, checked in by g7moreau, 10 years ago
  • Add license
File size: 3.7 KB
Line 
1%=======================================================================
2% Copyright 2008-2014, LEGI UMR 5519 / CNRS UJF G-INP, Grenoble, France
3%   http://www.legi.grenoble-inp.fr
4%   Joel.Sommeria - Joel.Sommeria (A) legi.cnrs.fr
5%
6%     This file is part of the toolbox UVMAT.
7%
8%     UVMAT is free software; you can redistribute it and/or modify
9%     it under the terms of the GNU General Public License as published
10%     by the Free Software Foundation; either version 2 of the license,
11%     or (at your option) any later version.
12%
13%     UVMAT is distributed in the hope that it will be useful,
14%     but WITHOUT ANY WARRANTY; without even the implied warranty of
15%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16%     GNU General Public License (see LICENSE.txt) for more details.
17%=======================================================================
18
19%go_calib_optim
20%
21%Main calibration function. Computes the intrinsic andextrinsic parameters.
22%Runs as a script.
23%
24%INPUT: x_1,x_2,x_3,...: Feature locations on the images
25%       X_1,X_2,X_3,...: Corresponding grid coordinates
26%
27%OUTPUT: fc: Camera focal length
28%        cc: Principal point coordinates
29%        alpha_c: Skew coefficient
30%        kc: Distortion coefficients
31%        KK: The camera matrix (containing fc and cc)
32%        omc_1,omc_2,omc_3,...: 3D rotation vectors attached to the grid positions in space
33%        Tc_1,Tc_2,Tc_3,...: 3D translation vectors attached to the grid positions in space
34%        Rc_1,Rc_2,Rc_3,...: 3D rotation matrices corresponding to the omc vectors
35%
36%Method: Minimizes the pixel reprojection error in the least squares sense over the intrinsic
37%        camera parameters, and the extrinsic parameters (3D locations of the grids in space)
38%
39%Note: If the intrinsic camera parameters (fc, cc, kc) do not exist before, they are initialized through
40%      the function init_intrinsic_param.m. Otherwise, the variables in memory are used as initial guesses.
41%
42%Note: The row vector active_images consists of zeros and ones. To deactivate an image, set the
43%      corresponding entry in the active_images vector to zero.
44%
45%VERY IMPORTANT: This function works for 2D and 3D calibration rigs, except for init_intrinsic_param.m
46%that is so far implemented to work only with 2D rigs.
47%In the future, a more general function will be there.
48%For now, if using a 3D calibration rig, set quick_init to 1 for an easy initialization of the focal length
49
50if ~exist('rosette_calibration','var')
51    rosette_calibration = 0;
52end;
53
54if ~exist('n_ima'),
55   data_calib; % Load the images
56   click_calib; % Extract the corners
57end;
58
59
60check_active_images;
61
62check_extracted_images;
63
64check_active_images;
65
66desactivated_images = [];
67
68recompute_extrinsic = (length(ind_active) < 100); % if there are too many images, do not spend time recomputing the extrinsic parameters twice..
69
70if (rosette_calibration)
71  %%% Special Setting for the Rosette:
72  est_dist = ones(5,1);
73end;
74
75
76%%% MAIN OPTIMIZATION CALL!!!!! (look into this function for the details of implementation)
77go_calib_optim_iter;
78
79
80if ~isempty(desactivated_images),
81   
82   param_list_save = param_list;
83   
84   fprintf(1,'\nNew optimization including the images that have been deactivated during the previous optimization.\n');
85   active_images(desactivated_images) = ones(1,length(desactivated_images));
86   desactivated_images = [];
87   
88   go_calib_optim_iter;
89   
90   if ~isempty(desactivated_images),
91      fprintf(1,['List of images left desactivated: ' num2str(desactivated_images) '\n' ] );
92   end;
93   
94   param_list = [param_list_save(:,1:end-1) param_list];
95   
96end;
97
98
99%%%%%%%%%%%%%%%%%%%% GRAPHICAL OUTPUT %%%%%%%%%%%%%%%%%%%%%%%%
100
101%graphout_calib;
102
Note: See TracBrowser for help on using the repository browser.