[810]  1  %=======================================================================


[924]  2  % Copyright 20082016, LEGI UMR 5519 / CNRS UGA GINP, Grenoble, France


[810]  3  % http://www.legi.grenobleinp.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 


[725]  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 


 50  if ~exist('rosette_calibration','var')


 51  rosette_calibration = 0;


 52  end;


 53 


 54  if ~exist('n_ima'),


 55  data_calib; % Load the images


 56  click_calib; % Extract the corners


 57  end;


 58 


 59 


 60  check_active_images;


 61 


 62  check_extracted_images;


 63 


 64  check_active_images;


 65 


 66  desactivated_images = [];


 67 


 68  recompute_extrinsic = (length(ind_active) < 100); % if there are too many images, do not spend time recomputing the extrinsic parameters twice..


 69 


 70  if (rosette_calibration)


 71  %%% Special Setting for the Rosette:


 72  est_dist = ones(5,1);


 73  end;


 74 


 75 


 76  %%% MAIN OPTIMIZATION CALL!!!!! (look into this function for the details of implementation)


 77  go_calib_optim_iter;


 78 


 79 


 80  if ~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:end1) param_list];


 95 


 96  end;


 97 


 98 


 99  %%%%%%%%%%%%%%%%%%%% GRAPHICAL OUTPUT %%%%%%%%%%%%%%%%%%%%%%%%


 100 


 101  %graphout_calib;


 102 

