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

3D图形编程

开发平台:

Visual C++

  1. function [f,J]=jacobc(sys,mod,nbr,p,np,cpar)
  2. %JACOBC Evaluates the camera model and approximates the partial derivates
  3. %with respect to the estimated parameters.
  4. %3-D coordinates and camera parameters. 
  5. %
  6. %Usage:
  7. %   [f,J]=jacobc(sys,mod,nbr,p)
  8. %
  9. %where       
  10. %   sys  = system configuration information (see configc.m) 
  11. %   mod  = matrix for the 3-D coordinates of the control points (n x 3)
  12. %   nbr  = number of points per frame
  13. %   p    = parameter vector (8+N*6 x 1)
  14. %          p(1:8) contains the camera intrinsic parameters
  15. %          p(9...) contains the camera position and orientation for
  16. %          each N images. 
  17. %   f    = synthetic image coordinates
  18. %   J    = Jacobian matrix evaluated at p.
  19. %   Version 2.1b  25.08.1998
  20. %   Janne Heikkila, University of Oulu, Finland
  21. delta=1e-10;
  22. if nargin==4
  23.   np=8;
  24. end
  25. if nargin<6
  26.   cpar=[];
  27. end
  28. n=length(p);
  29. t=(n-np)/6;
  30. ind=[1 cumsum(nbr)+1];
  31. f=frames(sys,mod,nbr,p,np,cpar);
  32. m=length(f)*2;
  33. J=(zeros(m,n));
  34. p=p(:);
  35. for i=1:np
  36.   q=p;
  37.   q(i)=q(i)+delta;
  38.   g=frames(sys,mod,nbr,q,np,cpar);
  39.   J(:,i)=(g(:)-f(:))/delta;
  40. end
  41.  
  42. for j=1:t
  43.   for i=1:6
  44.     q=[p(1:np);p(np+1+(j-1)*6:np+j*6)];
  45.     q(i+np)=q(i+np)+delta;
  46.     g=frames(sys,mod(ind(j):ind(j+1)-1,:),nbr(j),q,np,cpar);
  47.     r=f(ind(j):ind(j+1)-1,:);
  48.     J(ind(j):ind(j+1)-1,np+i+(j-1)*6)=(g(:,1)-r(:,1))/delta;
  49.     J(ind(j)+m/2:ind(j+1)-1+m/2,np+i+(j-1)*6)=(g(:,2)-r(:,2))/delta;
  50.   end
  51. end
  52. J=sparse(J);
  53. f=f(:);