snakeinterp.m
资源名称:Snakes.rar [点击查看]
上传用户:zlding2008
上传日期:2013-05-13
资源大小:1914k
文件大小:2k
源码类别:
2D图形编程
开发平台:
Matlab
- function [xi,yi] = snakeinterp(x,y,dmax,dmin)
- %SNAKEINTERP Interpolate the snake adaptively
- % [xi,yi] = snakeinterp(x,y,dmax,dmin)
- %
- % dmax: the maximum distance between two snake points
- % dmin: the maximum distance between two snake points
- % d(i,i+1)>dmax, then a new point is added between i and i+1
- % d(i,i+1)<dmin, then either i or i+1 is removed
- %
- % NOTE: the spacing of original curve must be close to the
- % range defined by dmax and dmin. For arbitrary spacing,
- % try snakeinterp1.
- %
- % See also SNAKEINTERP1
- % there is a bug in the program for points removal
- % Chenyang Xu and Jerry L. Prince, 4/1/95, 6/17/97
- % Copyright (c) 1995-97 by Chenyang Xu and Jerry L. Prince
- % Image Analysis and Communications Lab, Johns Hopkins University
- % convert to column vector
- x = x(:); y = y(:);
- N = length(x);
- d = abs(x([2:N 1])- x(:)) + abs(y([2:N 1])- y(:));
- % remove the points which distance to neighbor points is shorter than dmin
- IDX = (d<dmin);
- idx = find(IDX==0);
- x = x(idx);
- y = y(idx);
- N = length(x);
- d = abs(x([2:N 1])- x(:)) + abs(y([2:N 1])- y(:));
- IDX = (d>dmax);
- z = snakeindex(IDX);
- p = 1:N+1;
- xi = interp1(p,[x;x(1)],z');
- yi = interp1(p,[y;y(1)],z');
- N = length(xi);
- d = abs(xi([2:N 1])- xi(:)) + abs(yi([2:N 1])- yi(:));
- while (max(d)>dmax),
- IDX = (d>dmax);
- z = snakeindex(IDX);
- p = 1:N+1;
- xi = interp1(p,[xi;xi(1)],z');
- yi = interp1(p,[yi;yi(1)],z');
- N = length(xi);
- d = abs(xi([2:N 1])- xi(:)) + abs(yi([2:N 1])- yi(:));
- end