function BW = binariza(I,umbral)
%BINARIZA Genera la imagen binaria BW a partir de img. niveles gris I
%   BW = binariza(I,umbral)
%   umbral Es un entero entre 0 y 255
%   Pone a 1 todos los píxeles que tengan un valor mayor que umbral en I
%   Pone a 0 (negro) todos los pixeles por debajo de este umbral
%   BW es de tipo logical. Solo dos niveles 0 o 1

%_________________________________________________________________________%
% NOMBRE DEL FICHERO:   binariza.m                                        %
% RECIBE:   Imagen de niveles de gris I                                   %
% DEVUELVE: La misma imagen binarizada BW                                 %
% ALGORITMO EMPLEADO: los pixles con n.de g. que esten por debajo del     %
%                     umbral introducido se ponen a 0 (negro)             %
%                     y los que esten por encima a 1 (blanco)             %                            
% VARIABLES:   I = imagen en niveles de gris a binarizar                  %
%              umbral = marca el umbral que se establece para separar     %
%                       las dos poblaciones. Es un entero entre 0 y 255   %
%              BW = imagen binaria resultante                             %
%              filas = numero de filas de I                               %
%              columnas = numero de columnas de I                         %
%              i = variable contador para recorrer las filas de la img.   % 
%              j = variable contador para recorrer las columnas           %
% BUGS: No se han detectado pero los resultados más adecuados se obtienen %
%       cuando se binarizan imag con histograma bimodal.                  %
%       El umbral debe ser elegido adecuadamente sino puede               %
%       originar una  imagen binaria poco representativa.                 %
% SUPOSICIONES : La imagen I esta representada por 256 niveles            %
% LIBRO: VISION ARTIFICIAL INDUSTRIAL. UNIVERSIDAD DE VALLADOLID 2012     %
% TEMA 4 IMAGENES BINARIAS. pág.63. Algoritmo 4.1.                        %
% AUTORES: Eusebio de la Fuente y Félix Miguel Trespaderne                %
%_________________________________________________________________________%
%  Ejemplo de ejecucion:                                                  %
% >> I = imread('caja01.bmp');                                            %
% >> BW = binariza(I,128);    %binariza con umbral 128                    %
% >> imshow(BW);                                                          %
%_________________________________________________________________________%
% Con funciones de matlab
% >> I = imread('caja01.bmp');                                            %
% >> BW = im2bw(I,128);      %tambien BW = I>128                          %
% >> imshow(BW);                                                          %
%_________________________________________________________________________%

% Devuelve el nº de filas y columnas en variables de salida separadas     %
[filas,columnas] = size(I);
% Crea imagen de tipo logical con las mismas dimensiones que I con todo a 0
BW = logical(zeros(filas,columnas));
% Bucle encargado de transformar  los pixels que estan por debajo del     %
% umbral en negros(0) y los que esten por encima en blancos(1)            %
% Recorre la imagen comparando los niveles de gris con el umbral          %
for i = 1:filas
   for j = 1:columnas
      if I(i,j) < umbral 
          BW(i,j) = 0; %no haría falta porque hemos inicializ a cero imagen
      else 
          BW(i,j) = 1;
      end
   end 
end 

end

