gusucode.com > 基于matlab软件,实现双目视觉原理的摄像机标定,能根据各视场图像求内、外部参数 > 基于matlab软件,实现双目视觉原理的摄像机标定,能根据各视场图像求内、外部参数/TOOLBOX_calib/saving_calib.m
if ~exist('n_ima')|~exist('fc'), fprintf(1,'No calibration data available.\n'); return; end; if ~exist('no_image'), no_image = 0; end; if ~exist('est_alpha'), est_alpha = 0; end; if ~exist('center_optim'), center_optim = 1; end; if ~exist('est_aspect_ratio'), est_aspect_ratio = 1; end; if ~exist('est_fc'); est_fc = [1;1]; % Set to zero if you do not want to estimate the focal length (it may be useful! believe it or not!) end; if exist('est_dist'), if length(est_dist) == 4, est_dist = [est_dist ; 0]; end; end; if exist('kc'), if length(kc) == 4; kc = [kc;0]; end; end; if ~exist('fc_error'), fc_error = NaN*ones(2,1); end; if ~exist('kc_error'), kc_error = NaN*ones(5,1); end; if ~exist('cc_error'), cc_error = NaN*ones(2,1); end; if ~exist('alpha_c_error'), alpha_c_error = NaN; end; check_active_images; if ~exist('solution_init'), solution_init = []; end; for kk = 1:n_ima, if ~exist(['dX_' num2str(kk)]), eval(['dX_' num2str(kk) '= dX;']); end; if ~exist(['dY_' num2str(kk)]), eval(['dY_' num2str(kk) '= dY;']); end; end; if ~exist('solution'), solution = []; end; if ~exist('param_list'), param_list = solution; end; if ~exist('wintx'), wintx = []; winty = []; end; if ~exist('dX_default'), dX_default = []; dY_default = []; end; if ~exist('dX'), dX = []; end; if ~exist('dY'), dY = dX; end; if ~exist('Hcal'), Hcal = []; end; if ~exist('Wcal'), Wcal = []; end; if ~exist('map'), map = []; end; if ~exist('wintx_default')|~exist('winty_default'), wintx_default = max(round(nx/128),round(ny/96)); winty_default = wintx_default; end; if ~exist('alpha_c'), alpha_c = 0; end; if ~exist('err_std'), err_std = [NaN;NaN]; end; for kk = 1:n_ima, if ~exist(['y_' num2str(kk)]), eval(['y_' num2str(kk) ' = NaN*ones(2,1);']); end; if ~exist(['n_sq_x_' num2str(kk)]), eval(['n_sq_x_' num2str(kk) ' = NaN;']); eval(['n_sq_y_' num2str(kk) ' = NaN;']); end; if ~exist(['wintx_' num2str(kk)]), eval(['wintx_' num2str(kk) ' = NaN;']); eval(['winty_' num2str(kk) ' = NaN;']); end; if ~exist(['Tc_' num2str(kk)]), eval(['Tc_' num2str(kk) ' = [NaN;NaN;NaN];']); end; if ~exist(['omc_' num2str(kk)]), eval(['omc_' num2str(kk) ' = [NaN;NaN;NaN];']); eval(['Rc_' num2str(kk) ' = NaN * ones(3,3);']); end; if ~exist(['omc_error_' num2str(kk)]), eval(['omc_error_' num2str(kk) ' = NaN*ones(3,1);']); end; if ~exist(['Tc_error_' num2str(kk)]), eval(['Tc_error_' num2str(kk) ' = NaN*ones(3,1);']); end; if ~exist(['Rc_' num2str(kk)]), eval(['Rc_' num2str(kk) ' = rodrigues(omc_' num2str(kk) ');']); end; end; if ~exist('small_calib_image'), small_calib_image = 0; end; if ~exist('check_cond'), check_cond = 1; end; if ~exist('MaxIter'), MaxIter = 30; end; save_name = 'Calib_Results'; if exist([ save_name '.mat'])==2, disp('WARNING: File Calib_Results.mat already exists'); if exist('copyfile'), pfn = -1; cont = 1; while cont, pfn = pfn + 1; postfix = ['_old' num2str(pfn)]; save_name = [ 'Calib_Results' postfix]; cont = (exist([ save_name '.mat'])==2); end; copyfile('Calib_Results.mat',[save_name '.mat']); disp(['Copying the current Calib_Results.mat file to ' save_name '.mat']); if exist('Calib_Results.m')==2, copyfile('Calib_Results.m',[save_name '.m']); disp(['Copying the current Calib_Results.m file to ' save_name '.m']); end; cont_save = 1; else disp('The file Calib_Results.mat is about to be changed.'); cont_save = input('Do you want to continue? ([]=no,other=yes) ','s'); cont_save = ~isempty(cont_save); end; else cont_save = 1; end; if cont_save, save_name = 'Calib_Results'; if exist('calib_name'), fprintf(1,['\nSaving calibration results under ' save_name '.mat\n']); string_save = ['save ' save_name ' center_optim param_list active_images ind_active est_alpha est_dist est_aspect_ratio est_fc fc kc cc alpha_c fc_error kc_error cc_error alpha_c_error err_std ex x y solution solution_init wintx winty n_ima type_numbering N_slots small_calib_image first_num image_numbers format_image calib_name Hcal Wcal nx ny map dX_default dY_default KK inv_KK dX dY wintx_default winty_default no_image check_cond MaxIter']; for kk = 1:n_ima, string_save = [string_save ' X_' num2str(kk) ' x_' num2str(kk) ' y_' num2str(kk) ' ex_' num2str(kk) ' omc_' num2str(kk) ' Rc_' num2str(kk) ' Tc_' num2str(kk) ' omc_error_' num2str(kk) ' Tc_error_' num2str(kk) ' H_' num2str(kk) ' n_sq_x_' num2str(kk) ' n_sq_y_' num2str(kk) ' wintx_' num2str(kk) ' winty_' num2str(kk) ' dX_' num2str(kk) ' dY_' num2str(kk)]; end; else fprintf(1,['\nSaving calibration results under ' save_name '.mat (no image version)\n']); string_save = ['save ' save_name ' center_optim param_list active_images ind_active est_alpha est_dist est_aspect_ratio est_fc fc kc cc alpha_c fc_error kc_error cc_error alpha_c_error err_std ex x y solution solution_init wintx winty n_ima nx ny dX_default dY_default KK inv_KK dX dY wintx_default winty_default no_image check_cond MaxIter']; for kk = 1:n_ima, string_save = [string_save ' X_' num2str(kk) ' x_' num2str(kk) ' y_' num2str(kk) ' ex_' num2str(kk) ' omc_' num2str(kk) ' Rc_' num2str(kk) ' Tc_' num2str(kk) ' omc_error_' num2str(kk) ' Tc_error_' num2str(kk) ' H_' num2str(kk) ' n_sq_x_' num2str(kk) ' n_sq_y_' num2str(kk) ' wintx_' num2str(kk) ' winty_' num2str(kk) ' dX_' num2str(kk) ' dY_' num2str(kk)]; end; end; %fprintf(1,'To load later click on Load\n'); eval(string_save); saving_calib_ascii; fprintf(1,'done\n'); end;