find_extrinsics.m
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:2k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. function ret=find_extrinsics(filename, cameraname)
  2. %
  3. % Solve for the extrinsics of a camera (e.g. position and orientation)
  4. % given an imXX_correspondences.m file of the form:
  5. %   WORLDX1 WORLDY1 WORLDZ1 IMAGEX1 IMAGEY1
  6. %   WORLDX2 WORLDY2 WORLDZ2 IMAGEX2 IMAGEY2
  7. %   WORLDX3 WORLDY3 WORLDZ3 IMAGEX3 IMAGEY3
  8. %   WORLDX4 WORLDY3 WORLDZ4 IMAGEX4 IMAGEY4
  9. %   ...
  10. % these are both returned and saved to a file with the same base name
  11. % as the input file. Input foo.xyzuv, output foo.tsai. The input
  12. % arg should just be 'foo'
  13. % JED 3/12/99 - derived from lucasp stuff
  14. % setup initial paths and internal calib
  15. idealpar = load(strcat(cameraname,'.idealpar.fin'));
  16. %load idealpar.fin 
  17. % load the data for this filename
  18. if (exist(strcat(filename,'.corr')))  
  19.    xyzuv = loadxyzuvfile(strcat(filename,'.corr'));
  20. elseif (exist(strcat(filename,'.xyzuv')))
  21.        xyzuv = loadxyzuvfile(strcat(filename,'.xyzuv'));
  22. elseif (exist(filename))
  23.        xyzuv = loadxyzuvfile(filename);
  24. else
  25. disp('failed to load file');
  26. return;
  27. end
  28.   
  29. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  30. % Solve for the first camera position.  Copy this code and
  31. % Change all the "01" to "02" for the next image, etc...
  32. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  33. % Load the camera calibration done using an "ideal" calibration target,
  34. % not cyra data...
  35. % Call heikkila's solver for extrinsics
  36. [pos,iter,res,er,C]=extcal(cameraname, xyzuv, idealpar);
  37. % Write the total camera calibration (intrinsics + extrinsics) as
  38. % a tsai-format file that Szymon's pastecolor will understand.
  39. sys=configc(cameraname);
  40. tsaiparams=[sys(1:2); sys(3)/sys(1); sys(3)/sys(1); sys(4)/sys(2); sys(4)/sys(2); idealpar(3:4); idealpar(1:2); 0; pos(1:3,1); pos(4:6,1)*pi/180];
  41. save (strcat(filename,'.tsai'),'tsaiparams','-ascii');
  42. ret=tsaiparams;