function II = cisaillhor(I,a); 

% function II = cisaillhor(I,a);
% 
%Cisaillement horizontal d'une image avec approximation bilineaire. 

[m,n]=size(I);
if a > 0 
    % on declare une image rectangulaire a m lignes et dont le 
    % nombre de colonnes N est tel que le cadre [0,N-1] x [0,m-1] 
    % contienne a priori le support de l'image par le cisaillement.
    % L'abscisse maximale des pixels doit etre au plus l'entier  
    % (n-1) + ceil (a*(m-1)), donc N= n + ceil(a*(m-1)). 
    N = n+ ceil(a*(m-1)); 
    II = zeros (m,N);    
    for k=1:N 
        for j=1:m; 
            uu=k-1-a*(j-1); 
            if uu*(uu-(n-1))>0 
                II(j,k)=0;
            else 
                uinf=floor(uu)+1; 
                usup=ceil(uu)+1; 
                I1 = I(j,uinf); 
                I2 = I(j,usup); 
                t=uu-floor(uu); 
                II(j,k)=(1-t)*I1+t*I2; 
            end 
        end 
    end
elseif a==0 
    II=I; 
else
    % on declare une image rectangulaire a m lignes et dont le
    % nombre de colonnes N est tel que le cadre [-NN,n-1] x [0,m-1] 
    % contienne a priori le support de l'image par le cisaillement.
    % L'abscisse minimale des pixels doit etre   
    % - ceil (a*(m-1)), donc NN = - ceil(a*(m-1)).
    NN = -ceil (a*(m-1)); 
    N=n+NN; 
    II = zeros (m,n+NN); 
    % Il faut avoir en tete que k=1 correspond a l'abscisse - NN. 
    for k=1:N 
        for j=1:m; 
            uu=round(k-1-NN -a*(j-1)); 
            if uu*(uu-(n-1))>0
                II(j,k)=0; 
            else 
                uinf=floor(uu)+1;
                usup=ceil(uu)+1; 
                I1=I(j,uinf);
                I2=I(j,usup); 
                t=uu-floor(uu); 
                II(j,k)= (1-t)*I1+t*I2; 
            end 
        end 
    end 
end 
end 
    
    
    
    
    
    
