www.pudn.com > ridge_extract.rar > 5_ray.asv, change:2007-05-08,size:5396b


function [x,y]=5_ray(startx,starty,I,D,flag) 
[r,c]=size(I); 
% d=zeros(r,c); 
if flag==0 %ÕýÏò¸ú×Ù 
%     for i=1:r 
%         for j=1:c 
%             if  D(i,j)~=4 
%                 d(i,j)=(D(i,j)-1)*pi/4; 
%             else 
%                 d(i,j)=(D(i,j)-1)*pi/4+pi; 
%             end 
%         end 
%     end 
    switch D(startx,starty) 
        case 1 
            if ((starty+1)=r)&(I(startx,starty+1)==0) 
                x=startx; 
                y=starty+1; 
            elseif ((starty+2)=c)&(I(startx,starty+2)==0) 
                x=startx; 
                y=starty+2; 
            elseif ((starty+3)=c)&(I(startx,starty+3)==0) 
                x=startx; 
                y=starty+3; 
            elseif ((starty+4)=c)&(I(startx,starty+4)==0) 
                x=startx; 
                y=starty+4; 
            else 
                x=0; 
                y=0; 
            end 
        case 2 
            if ((startx-1)>=1)&((starty+1)=c)&(I(startx-1,starty+1)==0) 
                x=startx-1; 
                y=starty+1; 
            elseif ((startx-2)>=1)&((starty+2)=c)&(I(startx-2,starty+2)==0) 
                x=startx-2; 
                y=starty+2; 
            elseif ((startx-3)>=1)&((starty+3)=c)&(I(startx-3,starty+3)==0) 
                x=startx-3; 
                y=starty+3; 
            elseif ((startx-4)>=1)&((starty+4)=c)&(I(startx-4,starty+4)==0) 
                x=startx-4; 
                y=starty+4; 
            else  
                x=0; 
                y=0; 
            end 
        case 3 
            if ((startx-1)>=1)&(I(startx-1,starty)==0) 
                x=startx-1; 
                y=starty; 
            elseif ((startx-2)>=1)&(I(startx-2,starty)==0) 
                x=startx-2; 
                y=starty; 
            elseif ((startx-3)>=1)&(I(startx-3,starty)==0) 
                x=startx-3; 
                y=starty; 
            elseif ((startx-4)>=1)&(I(startx-4,starty)==0) 
                x=startx-4; 
                y=starty; 
            else 
                x=0; 
                y=0; 
            end 
        case 4 
            if ((startx+1)=r)&((starty+1)=c)&(I(startx+1,starty+1)==0) 
                x=startx+1; 
                y=starty+1; 
            elseif ((startx+2)=r)&((starty+2)=c)&(I(startx+2,starty+2)==0) 
                x=startx+2; 
                y=starty+2; 
            elseif ((startx+3)=r)&((starty+3)=c)&(I(startx+3,starty+3)==0) 
                x=startx+3; 
                y=starty+3; 
            elseif ((startx+4)=r)&((starty+4)=c)&(I(startx+4,starty+4)==0) 
                x=startx+4; 
                y=starty+4; 
            else  
                x=0; 
                y=0; 
            end 
        otherwise 
            error('Do not exsit this direction!') 
    end 
elseif flag==1   %·´Ïò¸ú×Ù 
     switch D(startx,starty) 
        case 1 
            if ((starty-1)>=1)&(I(startx,starty-1)==0) 
                x=startx; 
                y=starty-1; 
            elseif ((starty-2)>=1)&(I(startx,starty-2)==0) 
                x=startx; 
                y=starty-2; 
            elseif ((starty-3)>=1)&(I(startx,starty-3)==0) 
                x=startx; 
                y=starty-3; 
            elseif ((starty-4)>=1)&(I(startx,starty-4)==0) 
                x=startx; 
                y=starty-4; 
            else 
                x=0; 
                y=0; 
            end 
        case 2 
            if ((startx+1)=r)&((starty-1)>=1)&(I(startx+1,starty-1)==0) 
                x=startx+1; 
                y=starty-1; 
            elseif ((startx+2)=r)&((starty-2)>=1)&(I(startx+2,starty-2)==0) 
                x=startx+2; 
                y=starty-2; 
            elseif ((startx+3)=r)&((starty-3)>=1)&(I(startx+3,starty-3)==0) 
                x=startx+3; 
                y=starty-3; 
            elseif ((startx+4)=r)&((starty-4)>=1)&(I(startx+4,starty-4)==0) 
                x=startx+4; 
                y=starty-4; 
            else  
                x=0; 
                y=0; 
            end 
        case 3 
            if ((startx+1)=r)&(I(startx+1,starty)==0) 
                x=startx+1; 
                y=starty; 
            elseif ((startx+2)=r)&(I(startx+2,starty)==0) 
                x=startx+2; 
                y=starty; 
            elseif ((startx+3)=r)&(I(startx+3,starty)==0) 
                x=startx-3; 
                y=starty; 
            elseif ((startx-4)>=1)&(I(startx-4,starty)==0) 
                x=startx-4; 
                y=starty; 
            else 
                x=0; 
                y=0; 
            end 
        case 4 
            if ((startx+1)=r)&((starty+1)=c)&(I(startx+1,starty+1)==0) 
                x=startx+1; 
                y=starty+1; 
            elseif ((startx+2)=r)&((starty+2)=c)&(I(startx+2,starty+2)==0) 
                x=startx+2; 
                y=starty+2; 
            elseif ((startx+3)=r)&((starty+3)=c)&(I(startx+3,starty+3)==0) 
                x=startx+3; 
                y=starty+3; 
            elseif ((startx+4)=r)&((starty+4)=c)&(I(startx+4,starty+4)==0) 
                x=startx+4; 
                y=starty+4; 
            else  
                x=0; 
                y=0; 
            end 
        otherwise 
            error('Do not exsit this direction!') 
    end 
else 
    error('The parament "flag" is error!') 
end