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

2D图形编程

开发平台:

Matlab

  1. function [xi,yi] = snakeinterp(x,y,dmax,dmin)
  2. %SNAKEINTERP  Interpolate the snake adaptively
  3. %   [xi,yi] = snakeinterp(x,y,dmax,dmin)
  4. %
  5. %   dmax: the maximum distance between two snake points
  6. %   dmin: the maximum distance between two snake points
  7. %   d(i,i+1)>dmax, then a new point is added between i and i+1
  8. %   d(i,i+1)<dmin, then either i or i+1 is removed 
  9. %  
  10. %   NOTE: the spacing of original curve must be close to the 
  11. %         range defined by dmax and dmin. For arbitrary spacing,
  12. %         try snakeinterp1.
  13. %   See also SNAKEINTERP1
  14. %    there is a bug in the program for points removal
  15. %   Chenyang Xu and Jerry L. Prince, 4/1/95, 6/17/97
  16. %   Copyright (c) 1995-97 by Chenyang Xu and Jerry L. Prince
  17. %   Image Analysis and Communications Lab, Johns Hopkins University
  18. % convert to column vector
  19. x = x(:); y = y(:);
  20. N = length(x);
  21. d = abs(x([2:N 1])- x(:)) + abs(y([2:N 1])- y(:));
  22. % remove the points which distance to neighbor points is shorter than dmin
  23. IDX = (d<dmin);
  24. idx = find(IDX==0);
  25. x = x(idx);
  26. y = y(idx);
  27. N = length(x);
  28. d = abs(x([2:N 1])- x(:)) + abs(y([2:N 1])- y(:));
  29. IDX = (d>dmax);
  30. z = snakeindex(IDX);
  31. p = 1:N+1;
  32. xi = interp1(p,[x;x(1)],z');
  33. yi = interp1(p,[y;y(1)],z');
  34. N = length(xi);
  35. d = abs(xi([2:N 1])- xi(:)) + abs(yi([2:N 1])- yi(:));
  36. while (max(d)>dmax),
  37.     IDX = (d>dmax);
  38.     z = snakeindex(IDX);
  39.     p = 1:N+1;
  40.     xi = interp1(p,[xi;xi(1)],z');
  41.     yi = interp1(p,[yi;yi(1)],z');
  42.     N = length(xi);
  43.     d = abs(xi([2:N 1])- xi(:)) + abs(yi([2:N 1])- yi(:));
  44. end