📄 snakeinterp.m
字号:
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -