% *** ---------------------------------------------------------------------------------------- *** %
% ***| Funcion principal de la implementacion realizada. Recibe a la entrada, entre otros    | *** %
% ***| parametros, la imagen original a segmentar                                            | *** %
% *** ---------------------------------------------------------------------------------------- *** %

function seg(filename,margen,flag_marco,color_option)

[color_camino,color_puntos] = colores(color_option);

tic;                % Inicio t.segmentacion

[imag,map] = imread(filename);                          % Lectura de la imagen  
[filas,columnas,dim] = size(imag); 
image(imag);

if flag_marco == 1                  % Si la opcion de marco de la imagen como camino minimo esta activada
    imag = marco_minimo(imag,filas,columnas);
end

[click_x,click_y,button] = ginput(1);                   % Captura pixel semilla
semilla = [round(click_y),round(click_x)];
cont_clicks = 1;                                        % Contador de puntos proporcionados por el usuario

imag(semilla(1),semilla(2),[1 2 3]) = color_puntos;                  
image(imag);

while button ~= 3                   % Se pediran puntos mientras el usuario no pinche el boton derecho
    
    [click_x,click_y,button] = ginput(1);               % Captura resto de pixeles
    posicion = [round(click_y),round(click_x)];
    
    if button ~= 3                  % Comprobacion de que no se pulso el boton derecho para finalizar la segmentacion
    
        % Formacion de la subimagen y su respectivo Mapa de Coste Local (MCL)
        [mapa_coste_local,sem_rel,pos_rel,vector_margenes] = mcl(imag,semilla,posicion,margen);
               
        % Creacion de la matriz 3D 'flechas_sub' que contiene el camino minimo de la subimagen
        flechas_sub = livewire(mapa_coste_local,sem_rel);
       
        % Adaptacion y Preparacion de la matriz 3D 'flechas' que contiene el camino minimo en el interior de la subimagen
        flechas = adaptacion_flechas(flechas_sub,semilla,posicion,sem_rel,pos_rel,filas,columnas,vector_margenes);
        
        % Llamada a la funcion que recorrera el camino minimo
        imag = camino(imag,flechas,semilla,posicion,color_camino,color_puntos);
        
        semilla = posicion;           % El posterior click pasa a ser ahora la nueva 'semilla' 
        
        cont_clicks = cont_clicks + 1;
        
    end
             
end

timer = toc;                % Fin t.segmentacion

imshow(imag);               % Presentacion final de la imagen segmentada

% Llamada a la funcion que crea los archivos resultado
crear_resultados(filename,imag,filas,columnas,margen,timer,cont_clicks);

