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

3D图形编程

开发平台:

Visual C++

  1. function a=invmodel(name,par)
  2. %INVMODEL calculates the parameters of the inverse camera model, which
  3. %can be used to correct measured image coordinates to correspond a simple
  4. %pinhole model.
  5. %
  6. %Usage:
  7. %   a=invmodel(name,par)
  8. %
  9. %where
  10. %   name = string that is specific to the camera and the framegrabber.
  11. %          This string must be defined in configc.m
  12. %   par  = camera intrinsic parameters
  13. %   a    = eight implicit parameters of the inverse camera model
  14. %   Version 2.0  15.5.-97
  15. %   Janne Heikkila, University of Oulu, Finland
  16. sys=configc(name);
  17. NDX=sys(1); NDY=sys(2); Sx=sys(3); Sy=sys(4);
  18. Asp=par(1); Foc=par(2);
  19. Cpx=par(3); Cpy=par(4);
  20. Rad1=par(5); Rad2=par(6);
  21. Tan1=par(7); Tan2=par(8);
  22. cpx=Cpx/NDX*Sx/Asp;
  23. cpy=Cpy/NDY*Sy;
  24. xs=-cpx*1.1; xe=(Sx-cpx)*1.1;
  25. ys=-cpy*1.1; ye=(Sy-cpy)*1.1;
  26. px=Sx/40; py=Sy/40;
  27. [cx,cy]=meshgrid(xs:px:xe,ye:-py:ys); cx=cx(:); cy=cy(:);
  28. r2=cx.*cx+cy.*cy;
  29. delta=Rad1*r2+Rad2*r2.*r2;
  30. dx=cx.*(1+delta)+2*Tan1*cx.*cy+Tan2*(r2+2*cx.*cx); 
  31. dy=cy.*(1+delta)+Tan1*(r2+2*cy.*cy)+2*Tan2*cx.*cy; 
  32. r2=dx.*dx+dy.*dy;
  33.   
  34. Tx=[-dx.*r2 -dx.*r2.^2 -2*dx.*dy -(r2+2*dx.^2) cx.*r2.^2 cx.*dx.*r2 ...
  35. dy.*cx.*r2 cx.*r2];
  36. Ty=[-dy.*r2 -dy.*r2.^2 -(r2+2*dy.^2) -2*dx.*dy cy.*r2.^2 cy.*dx.*r2 ...
  37. cy.*dy.*r2 cy.*r2];
  38. T=[Tx;Ty];
  39. e=[dx-cx;dy-cy];
  40. a=pinv(T)*e;
  41.