% APRENDIZAJE AUTOMÁTICO (G. Pajares y J. M. de la Cruz, Eds.)
% Editorial: RA-MA
% Capítulo 11: Razonamiento Basado en Casos
% Autores: Ángela Ribeiro, Xavier P. Burgos Artizzu y Jesús M. Conesa Muńoz

% Método de Eliminación de líneas de cultivo E2
% Analysis of natural images processing for the extraction of agricultural
% elements. Image Vision Comput. 28(1): 138-149 (2010)
function proporcion_eliminados = eliminaLineasE2(im)
  
  [f,c,x] = size(im);
  
  ims = segmenta(im);
  ims = ims/255;
  
  tam = 35;
  totIni = 15;
  
  proporcion_eliminados=0;
  
  aux = ims;
  aux2 = zeros(f,c,3);
  aux2(:,:,1) = ims;
  aux2(:,:,2) = ims;
  aux2(:,:,3) = ims;
    
  v = sum(aux(:,:));
  maximo = max(v);
  ptoIni = find(v==maximo);
  ptoIni = ptoIni(1,1);
   
  mediaD=0;
  mediaI=0;
  for i=1:f
        totD = totIni;
        totI = totIni;
        pto = ptoIni;
        ptoD = pto;
        ptoI = pto;
        if(pto+tam<=c) 
               der = pto+tam;
        else der = c;
        end;
        if(pto-tam>=1) 
               izq = pto-tam;
        else izq = 1;
        end;
        vder = ims(i,ptoD:der);
        vizq = ims(i,izq:ptoI);
        sigueDer = true;
        sigueIzq = true;
        while(sigueDer || sigueIzq)
            if(sigueDer && sum(vder)>=totD)
                aux(i,ptoD:der)=0;
                 aux2(i,ptoD:der,1)=255;
                 aux2(i,ptoD:der,2)=255;
                 aux2(i,ptoD:der,3)=0;
                 proporcion_eliminados = proporcion_eliminados+(der-ptoD);
               if(der==c)
                   sigueDer = false;
               end;
           else sigueDer = false;
           end;
           if(sigueIzq && sum(vizq)>=totI)
               aux(i,izq:ptoI)=0;
               aux2(i,izq:ptoI,1)=255;
               aux2(i,izq:ptoI,2)=255;
               aux2(i,izq:ptoI,3)=0;
               proporcion_eliminados = proporcion_eliminados+(ptoI-izq);
               if(izq==1)
                   sigueIzq = false;
               end;
           else sigueIzq = false;
           end;
           if(sigueDer && der+tam<=c) 
               ptoD = der;
               der = der+tam;
               %totD = totIni;
           elseif (sigueDer)
               ptoD = der;
               der = c;
               totD = ceil((totIni*(c-ptoD))/tam);
           end;
           if(sigueIzq && izq-tam>=1) 
               ptoI = izq;
               izq = izq-tam; 
               %totI = totIni;
           elseif (sigueIzq)
               ptoI = izq;
               izq = 1;
               totI = ceil((totIni*(ptoI-1))/tam);
           end;
           vder = ims(i,ptoD:der);
           vizq = ims(i,izq:ptoI);
        end;
        mediaD = mediaD+der;
        mediaI = mediaI+izq;
    end;
    colI1 = mediaI/f;
    colI2 = mediaD/f;
    aux(:,ptoIni)=0;
    aux2(:,ptoIni,1)=255;
    aux2(:,ptoIni,2)=255;
    aux2(:,ptoIni,3)=0;
    proporcion_eliminados = proporcion_eliminados+1;
   
    v = sum(aux(:,1:c));
    maximo = max(v);
    ptoIni = find(v==maximo);
    [fi,ci] = size(ptoIni);
    ptoIni = ptoIni(1,ci);
    
    mediaD=0;
    mediaI=0;
    for i=1:f
        totD = totIni;
        totI = totIni;
        pto = ptoIni;
        ptoD = pto;
        ptoI = pto;
        if(pto+tam<=c) 
               der = pto+tam;
        else der = c;
        end;
        if(pto-tam>=1) 
               izq = pto-tam;
        else izq = 1;
        end;
        vder = ims(i,ptoD:der);
        vizq = ims(i,izq:ptoI);
        sigueDer = true;
        sigueIzq = true;
        while(sigueDer || sigueIzq)
           if(sigueDer && sum(vder)>=totD)
               aux(i,ptoD:der)=0;
               aux2(i,ptoD:der,1)=255;
               aux2(i,ptoD:der,2)=255;
               aux2(i,ptoD:der,3)=0;
               proporcion_eliminados = proporcion_eliminados++(der-ptoD);
               if(der==c)
                   sigueDer = false;
               end;
           else sigueDer = false;
           end;
           if(sigueIzq && sum(vizq)>=totI)
               aux(i,izq:ptoI)=0;
               aux2(i,izq:ptoI,1)=255;
               aux2(i,izq:ptoI,2)=255;
               aux2(i,izq:ptoI,3)=0;
               proporcion_eliminados = proporcion_eliminados+(ptoI-izq);
               if(izq==1)
                   sigueIzq = false;
               end;
           else sigueIzq = false;
           end;
           if(sigueDer && der+tam<=c) 
               ptoD = der;
               der = der+tam;
               %totD = totIni;
           elseif (sigueDer)
               ptoD = der;
               der = c;
               totD = ceil((totIni*(c-ptoD))/tam);
           end;
           if(sigueIzq && izq-tam>=1) 
               ptoI = izq;
               izq = izq-tam; 
               %totI = totIni;
           elseif (sigueIzq)
               ptoI = izq;
               izq = 1;
               totI = ceil((totIni*(ptoI-1))/tam);
           end;
           vder = ims(i,ptoD:der);
           vizq = ims(i,izq:ptoI);
        end;  
        mediaD = mediaD+der;
        mediaI = mediaI+izq;
    end;
    colD1 = mediaI/f;
    colD2 = mediaD/f;
    
    aux(:,ptoIni)=0;
    aux2(:,ptoIni,1)=255;
    aux2(:,ptoIni,2)=255;
    aux2(:,ptoIni,3)=0;
    proporcion_eliminados = proporcion_eliminados+1;
    
    %Si se desea ver el resultado de la eliminación
    %figure,imshow(aux2)
    
    proporcion_eliminados = proporcion_eliminados/(f*c);