function nivelGrisInterpolado = interpolaBilineal(ient,jent,I)
%INTERPOLABILINEAL Interpola nivel de gris en tranf.geometrica empleando
%   algoritmo bilineal
% LIBRO  VISION ARTIFICIAL INDUSTRIAL. UNIVERSIDAD DE VALLADOLID 2012     %
% TEMA 3 MANIPULACIÓN GEOMÉTRICA DE LA IMAGEN.  sec. 3.5.2 pág 53         %
% AUTORES: Eusebio de la Fuente y Félix Miguel Trespaderne                %                    

[filas,columnas]=size(I);
%Controlamos los bordes para no acceder fuera de los índices y dé error
if ient<1
    ient=1;
end
if jent<1
    jent=1;
end
if ient==filas
    ient=ient-1;
end
if jent==filas
    jent=jent-1;
end

i0=floor(ient);
j0=floor(jent);

deltaI=ient-i0;
deltaJ=jent-j0;

a= (1-deltaI) * (1-deltaJ); %ecuacion 3.24 pag 53
b= deltaI * (1-deltaJ);
c= (1-deltaI) * deltaJ;
d= deltaI * deltaJ;

%ecuacion 3.25 pag 53
nivelGrisInterpolado = a*I(i0,j0) + b*I(i0+1,j0) + c*I(i0,j0+1) + d*I(i0+1,j0+1) / (a + b + c + d);
end

