snakeinterp1.m
上传用户:zlding2008
上传日期:2013-05-13
资源大小:1914k
文件大小:1k
源码类别:

2D图形编程

开发平台:

Matlab

  1. function [xi,yi] = snakeinterp1(x,y,RES)
  2. % SNAKEINTERP1  Interpolate the snake to have equal distance RES
  3. %     [xi,yi] = snakeinterp(x,y,RES)
  4. %
  5. %     RES: resolution desired
  6. %     update on snakeinterp after finding a bug
  7. %      Chenyang Xu and Jerry L. Prince, 3/8/96, 6/17/97
  8. %      Copyright (c) 1996-97 by Chenyang Xu and Jerry L. Prince
  9. %      Image Analysis and Communications Lab, Johns Hopkins University
  10. % convert to column vector
  11. x = x(:); y = y(:);
  12. N = length(x);  
  13. % make it a circular list since we are dealing with closed contour
  14. x = [x;x(1)];
  15. y = [y;y(1)];
  16. dx = x([2:N+1])- x(1:N);
  17. dy = y([2:N+1])- y(1:N);
  18. d = sqrt(dx.*dx+dy.*dy);  % compute the distance from previous node for point 2:N+1
  19. d = [0;d];   % point 1 to point 1 is 0 
  20. % now compute the arc length of all the points to point 1
  21. % we use matrix multiply to achieve summing 
  22. M = length(d);
  23. d = (d'*uppertri(M,M))';
  24. % now ready to reparametrize the closed curve in terms of arc length
  25. maxd = d(M);
  26. if (maxd/RES<3)
  27.    error('RES too big compare to the length of original curve');
  28. end
  29. di = 0:RES:maxd;
  30. xi = interp1(d,x,di);
  31. yi = interp1(d,y,di);
  32. N = length(xi);
  33. if (maxd - di(length(di)) <RES/2)  % deal with end boundary condition
  34.    xi = xi(1:N-1);
  35.    yi = yi(1:N-1);
  36. end