function B = binAdaptativo(I,s)
%B = binAdaptativo(I,ventana) proporciona una imagen binaria a partir
% de binarizacion adaptativa en ventana de s x s
% Se aconseja un s=1/8*columnas (1/8 del ancho de la imagen)
% Utiliza imagen integral
% La binarización adaptativa busca binariza cada pixel atendiendo      %
% al nivel de gris de los pixeles que le rodean. Analiza para ello     %
% la media en una ventana que rodea al pixel.                          %
%______________________________________________________________________%

%______________________________________________________________________%
%                                                                      %
% NOMBRE DEL FICHERO:   Isal = binAdaptativo (Ient,tamVentana)         %
%                                                                      %
% RECIBE: Imagen en blanco y negro con histo bimodal, es decir, con    %
%         dos poblaciones de niv.de gris claramente diferenciadas      %
%         Tamaño de la ventana: este debe ser ligeramente superior a   %
%         los objetos negros que aparecen en la imagen                 %
%         tamVentana=1/8 ->tamaño de ventana 1/8 de la anchura imagen  %
% DEVUELVE: La misma imagen pero binarizada                            %
% ALGORITMO EMPLEADO: binarización adaptativa. Si es inf al 0.85 negro %
% VARIABLES:   Ient = imagen introducida                               %
%              Isal = imagen resultante                                %
%              filas = numero de filas de la imagen Ient               %
%              columnas = numero de columnas de la imagen Ient         %
%              i = variable contador para recorrer las filas de la img.% 
%              j = variable contador para recorrer las columnas        %
% BUGS: Si no se elige bien el tamaño de ventana, malos resultados     %
%       No trabaja sobre los bordes de la imagen                       %
% SUPOSICIONES : Llama a imagenIntegral                                %
% HISTORIAL:                                                           %
%       +Fecha de realizacion: 14/03/2012                              %
%       +Autor: Eusebio de la Fuente                                   %
%       +Version: 1.0                                                  %
%       +Cambios: -                                                    %
%       +Descripcion de los cambios: -                                 %
%                                                                      %
%______________________________________________________________________%


%______________________________________________________________________%
%  Ejemplo de ejecucion:                                               %
%----------------------------------------------------------------------%
%                                                                      %
% >> Ient = imread('textoMalaLuz.bmp');                                %
% >> B= binAdaptativo(Ient,32);                                        %
% >> imshow(B);                                                        %
%______________________________________________________________________%

Int=imgIntegral(I);

[filas,columnas] = size(I);
B=zeros(filas,columnas);
%t es el porcentaje que debe ser al menos la media para ponerle a 1
t=0.85;%Si es inf al 0.85 le ponemos negro, si no blanco
s=floor(s/2);       %utilizaré una de ventana de 2s x 2s

for i = 2:filas %No voy desde el 1 porque luego accedo a i-1, j-1
   for j = 2:columnas
       %coordenadas de la ventana

        i1 = i - s;
        i2 = i + s;
        j1 = j - s;
        j2 = j + s;
        %compruebo bordes
        if i1<2 i1=2;        end
        if j1<2 j1=2;        end
        if i2>filas   i2=filas;        end
        if j2>columnas  j2=columnas;    end
        
        %num.pixeles en ventana
        n = (i2 - i1) * (j2 - j1); 
        %suma niveles de gris en ventana
        suma = Int(i2,j2) - Int(i2,j1-1) - Int(i1-1,j2) + Int(i1-1,j1-1);
        mediaVentana=suma/n;
        if I(i,j) <= t*mediaVentana %Si I(i,j) es inf al 0.85 de la media le ponemos negro
            B(i,j)=0;
        else
            B(i,j)=255;
        end
   end
end
B=mat2gray(B);
         
end 
