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

3D图形编程

开发平台:

Visual C++

  1. function ic=cmodel(sys,cpts,pos,par)
  2. %CMODEL Camera model that generates synthetic image coordinates from 
  3. %3-D coordinates and camera parameters. 
  4. %
  5. %Usage:
  6. %   ic = cmodel(sys,cpts,pos,par)
  7. %
  8. %where       
  9. %   sys  = system configuration information (see configc.m) 
  10. %   cpts = coordinates for the 3-D control points
  11. %   pos  = camera position and orientation
  12. %   par  = camera intrinsic parameters:
  13. %          par(1) = scale factor ~1
  14. %          par(2) = effective focal length
  15. %          par(3:4) = principal point
  16. %          par(5:6) = radial distortion coefficients
  17. %          par(7:8) = tangential distortion coefficients
  18. %   ic   = synthetic image coordinates
  19. %   Version 2.0  15.5.-97
  20. %   Janne Heikkila, University of Oulu, Finland
  21. NDX=sys(1); NDY=sys(2); Sx=sys(3); Sy=sys(4);
  22. if length(pos)~=6
  23.   error('Position vector should contain [x y z w p r].');
  24. end
  25. if length(par)~=8
  26.   error('Parameter vector should be 1 x 8 matrix.');
  27. end
  28. if size(cpts,2)~=3
  29.   error('Control point matrix should have three columns [xp yp zp]');
  30. end
  31. n=size(cpts,1);
  32. Asp=par(1); Foc=par(2);
  33. Cpx=par(3); Cpy=par(4);
  34. Rad1=par(5); Rad2=par(6);
  35. Tan1=par(7); Tan2=par(8);
  36. M=eye(4);
  37. wa=pos(4)*pi/180;
  38. pa=pos(5)*pi/180;
  39. ra=pos(6)*pi/180;
  40. cw=cos(wa); sw=sin(wa);
  41. cp=cos(pa); sp=sin(pa);
  42. cr=cos(ra); sr=sin(ra);
  43. M(1,:)=[cr*cp -sr*cw+cr*sp*sw sr*sw+cr*sp*cw pos(1)];
  44. M(2,:)=[sr*cp cr*cw+sr*sp*sw -cr*sw+sr*sp*cw pos(2)];
  45. M(3,:)=[-sp cp*sw cp*cw pos(3)];
  46. c=M*[cpts';ones(1,n)];
  47. x=[Foc.*c(1,:)./c(3,:)]';
  48. y=[Foc.*c(2,:)./c(3,:)]';
  49. r2=x.*x+y.*y;
  50. delta=Rad1*r2+Rad2*r2.*r2;
  51. xn=x.*(1+delta)+2*Tan1*x.*y+Tan2*(r2+2*x.*x); 
  52. yn=y.*(1+delta)+Tan1*(r2+2*y.*y)+2*Tan2*x.*y; 
  53.   
  54. ic=NDX*Asp*xn/Sx+Cpx;
  55. ic(:,2)=NDY*yn/Sy+Cpy;