function  seg_tumor

%En cada iteración recorre la imagen y busca SOLO los puntos del borde de la región y analiza el mejor vecino...

I=double(imread('tumor.jpg'));
[nf nc]=size(I);
subplot(1,2,1);imshow(I,[0 255]);
disp('Haga un click sobre el tumor...');
[x y]=ginput(1);
x=round(x);
y=round(y);
I2=0*I;
I2(y,x)=I(y,x);
B=0*I;
B(y,x)=1;
sum=I2(y,x);
ns=1;
prom=sum/ns;
Delta=25;

borde=[];
borde=[borde; [y x]];
nborde=1;
salir=0;
it=0;
while salir==0
   it=it+1;
   if mod(it,10)==0,subplot(1,2,2);imshow(I2,[0 255]);nborde,pause(0);end;
   min_err=255;
   fmin=-10;
   cmim=-10;
   nb=1;
   while nb<=nborde
      p=borde(nb,:);
      f=p(1);c=p(2);
      if vecino_encerrado(B,f,c)>0, 
         B(f,c)=2;
         %elimina del borde
         borde=[borde(1:nb-1,:); borde(nb+1:nborde,:)];
         nborde=nborde-1; 
		 else     
      		[ff, cc, err]=mejor_vecino(B,I,f,c,prom,Delta);
      		if err<min_err,
         		fmin=ff;
         		cmin=cc;
         		min_err=err;
      		end;
          nb=nb+1;
      end;
	end;         
  %agrega solo el mejor vecino 
  if fmin>0 & cmin>0, 
     B(fmin,cmin)=1;I2(fmin,cmin)=I(fmin,cmin);
     borde=[borde; [fmin cmin]];
     nborde=nborde+1;
     ns=ns+1;
     sum=sum+I2(fmin,cmin);
     prom=sum/ns;
  else
     %no hay mas mejores vecinos
     salir=1;
  end
end;   


function [y, x, err]=mejor_vecino(B,I,f,c,prom,Delta)

   y=-1;
   x=-1;
   err=255;
	for ff=f-1:f+1
      for cc=c-1:c+1
	      if B(ff,cc)==0 & abs(I(ff,cc)-prom)<err & abs(I(ff,cc)-prom)<Delta
	         err=abs(I(ff,cc)-prom);
	         y=ff;
            x=cc;
	      end;
	   end;
	end;
   
function ok=vecino_encerrado(B,f,c)  
   ok=-1;
   n=0;
	for ff=f-1:f+1
      for cc=c-1:c+1
         if B(ff,cc)>0 
            n=n+1;
	      end;
	   end;
	end;
   if n==9,ok=1;end;


  
