www.pudn.com > ridge_extract.rar > r_extract.m, change:2007-05-08,size:1239b


function [picture,e_left,e_right,le_left,le_right]=r_extract(centerx,centery,I,D) 
bw=im2bw(I); 
% startx=zeros(1,5);%起始点横坐标 
% starty=zeros(1,5);%起始点纵坐标 
end_left=zeros(5,2);%左终点坐标 
end_right=zeros(5,2);%右终点坐标 
ridge=zeros(size(I));%脊线轨迹矩阵 
length_left=ones(1,5);%左边脊线长度 
length_right=ones(1,5);%右边脊线长度 
in=0; 
i=0; 
x=centerx;%当前起始点纵坐标 
%从中心点往上搜寻到第六条脊线开始跟踪 
while i<7 
      if (x-1>=1)&(bw(x,centery)==1)&(bw(x-1,centery)==0)%当前点为白,下一点为黑即认为跨过一条脊线 
          i=i+1; 
      elseif x-1<1 
          break; 
      end 
          x=x-1; 
end 
i=1; 
while i=5 %跟五条脊线 
%     startx(i)=x; 
%     starty(i)=centery; 
   %正向跟踪 
   [ridge,length_right(i),end_right(i,:),in]=forth_follow(x,centery,ridge,bw,D,i); 
%    ridge=ridge+r; 
   i=in; 
   %反向跟踪 
   [ridge,length_left(i),end_left(i,:),in]=back_follow(x,centery,ridge,bw,D,i); 
%    ridge=ridge+r; 
   i=in;  
%    ridge(x,centery)=i; 
   while   (x-1>=1)&((bw(x,centery)==0)|(bw(x-1,centery)==1)) 
        x=x-1; 
    end 
    x=x-1; 
    if x<1 
        break; 
    end 
    i=i+1; 
end 
picture=ridge; 
e_left=end_left; 
e_right=end_right; 
le_left=length_left; 
le_right=length_right;