gusucode.com > 基于matlab软件,实现双目视觉原理的摄像机标定,能根据各视场图像求内、外部参数 > 基于matlab软件,实现双目视觉原理的摄像机标定,能根据各视场图像求内、外部参数/TOOLBOX_calib/cam_proj_calib_optim.m
load camera_results; string_global = 'global n_ima'; for kk = 1:n_ima, string_global = [string_global ' x_' num2str(kk) ' X_' num2str(kk) ' xproj_' num2str(kk) ' x_proj_' num2str(kk)]; end; eval(string_global); %----------------- global optimization: --------------------- load projector_data; % load the projector corners (previously saved) load projector_results; solution_projector = solution; load camera_results; solution_camera = solution; param_cam = solution_camera([1:10 16:end]); param_proj = solution_projector([1:10 16:end]); param = [param_cam;param_proj]; % Restart the minimization from here (if need be): load camera_results; load calib_cam_proj_optim2; options = [1 1e-4 1e-4 1e-6 0 0 0 0 0 0 0 0 0 12000 0 1e-8 0.1 0]; %if 0, % use the full distortion model: % fprintf(1,'Take the complete distortion model\n'); % test the global error function: % e_global = error_cam_proj(param); % param_init = param; % param = leastsq('error_cam_proj',param,options); %else % Use a limitd distortion model (no 6th order) fprintf(1,'Take the 6th order distortion coefficient out\n'); param = param([1:9 11:11+6*n_ima-1 11+6*n_ima:11+6*n_ima+9-1 11+6*n_ima+9+1:end]); % test the global error function: e_global2 = error_cam_proj2(param); param_init = param; param = leastsq('error_cam_proj2',param,options); param = [param(1:9);0;param(10:10+6*n_ima-1);param(10+6*n_ima:10+6*n_ima+9-1);0;param(10+6*n_ima+9:end)]; %end; % Extract the parameters: cam_proj_extract_param; % Relative prosition of camera wrt world: omc = omc_1; Rc = Rc_1; Tc = Tc_1; % relative position of projector wrt world: Rp = R*Rc; omp = rodrigues(Rp); Tp = T + R*Tc; eval(['save calib_cam_proj_optim3 R om T fc fp cc cp alpha_c alpha_p kc kp Rc Rp Tc Tp omc omp param param_init']); no_image = 0; % Image size: (may or may not be available) nx = 640; ny = 480; comp_error_calib; % Save the optimal camera parameters: saving_calib; copyfile('Calib_Results.mat','camera_results_optim3.mat'); delete('Calib_Results.mat'); % Save the optimal camera parameters: fc = fp; cc = cp; alpha_c = alpha_p; kc = kp; n_ima = 1; X_1 = X_proj; x_1 = x_proj; omc_1 = om; Tc_1 = T; Rc_1 = R; % Image size: (may or may not be available) nx = 1024; ny = 768; % No calibration image is available (only the corner coordinates) no_image = 1; comp_error_calib; saving_calib; copyfile('Calib_Results.mat','projector_results_optim3.mat'); delete('Calib_Results.mat');