function E = escaladoIntBilineal( I,factor )
%ESCALADO Reescala una imagen según factor.
%   E = escalado( I,factor )
%   Emplea transf.inversa e interp. bilineal.
%  Ejemplo:                                                  
%       I = imread('caja01.bmp');                                            
%       E = escaladoIntBilineal(I,0.5);
%       imshow(E);                                 

%_________________________________________________________________________%
% NOMBRE DEL FICHERO:   escalado.m                                        %
% RECIBE:   Imagen de niveles de gris I                                   %
% DEVUELVE: La misma imagen rotada angulo grados, de igual tamaño que I.  %
% ALGORITMO EMPLEADO: Transformación Inversa. Interp.bilineal             %                      
% VARIABLES:   I = imagen en niveles de gris a trasladar                  %
%              factor = factor de escala.  Numero real positivo           %
%              E = imagen  resultante                                     %
%              filas = numero de filas de I                               %
%              columnas = numero de columnas de I                         %
%              filasE = numero de filas de E                              %
%              columnasE = numero de columnas de E                        %
%              ient = fila en la imag.de entrada correspond.a pixel E(i,j)% 
%              jent = colum en  imag. de entrada correspond.a pixel E(i,j)%
% BUGS:        falla con factores de escala negativos.                    %
% SUPOSICIONES :                                                          %                   
% LIBRO  VISION ARTIFICIAL INDUSTRIAL. UNIVERSIDAD DE VALLADOLID 2012     %
% TEMA 3 MANIPULACIÓN GEOMÉTRICA DE LA IMAGEN. pág.42                     %
% AUTORES: Eusebio de la Fuente y Félix Miguel Trespaderne                %             
%_________________________________________________________________________%
%  Ejemplo de ejecucion:                                                  %
% >> I = imread('caja01.bmp');                                            %
% >> E = escaladoIntBilineal(I,0.5);                                      %
% >> imshow(E);                                                           %
%_________________________________________________________________________%
% Con funciones de matlab
% >> I = imread('caja01.bmp');                                            %
% >> E = imresize(I, 0.5);                                                %
% >> imshow(E);                                                           %
%_________________________________________________________________________%

[filas,columnas]=size(I);
filasE=round(factor*filas); %numero de filas que tendrá imag. transformada
columnasE=round(factor*columnas); %num.columnas que tendrá la img. transf.
E=zeros(filasE,columnasE);

for i=1:filasE
    for j=1:columnasE
        ient= i/factor; %divido porque estoy haciendo transf. inversa
        jent= j/factor;
        
        E(i,j)=interpolaBilineal(ient,jent,I);
    end
end
E=mat2gray(E);     

end

