function S = CATscanner(I,tau)

    % S = CATscanner(I,tau); 
    % 
    %Calcule le sinogramme de l'image : chaque ligne correspond au vecteur 
    %ligne obtenu en additionnant les lignes de l'image I pivotee de k*tau, 
    % k=0 : floor(pi/tau). 

    % On transforme dans un premier temps l'image I pour la placer dans un 
    % cadre ou elle peut etre transformee par rotation en restant dans le 
    % cadre.  
    
    [m,n] = size(I);  
    xc = (n-1)/2; 
    yc = (m-1)/2;
    D=sqrt(m^2+n^2)/2; 
    MM = ceil(D-m/2); 
    NN = ceil(D-n/2); 
    Iinit= [zeros(MM,n);I;zeros(MM,n)]; 
    Iinit = [zeros(m+2*MM,NN) Iinit zeros(m+2*MM,NN)];
    [mm,nn] = size(Iinit);
    
    Theta = 0:tau:pi-tau; 
    L=length(Theta); 
    S=[]; 
    
 for l = 1:L;
    Irot=zeros(mm,nn);  
    for j=1:mm 
    for k=1:nn 
        theta = Theta(l); 
        x = - NN + k -1; 
        y = - MM + j-1; 
        % On reprend ici la syntaxe de rotationdirect 
        X = xc + cos(theta)*(x-xc) - sin(theta)*(y-yc); 
        Y = yc  + sin(theta)*(x-xc) + cos(theta)*(y-yc);
        if X*(X-(n-1))>0
                Irot(j,k) = 0; 
        elseif  Y*(Y-(m-1))>0 
                Irot(j,k)=0;          
        else
            t = X - floor(X);  
            s = Y - floor(Y); 
            indexXinf = floor(X)+1; 
            indexXsup = ceil(X)+1; 
            indexYinf = floor(Y)+1; 
            indexYsup = ceil(Y) +1; 
            Iaux1 = (1-t)*I(indexYinf,indexXinf) + t*I(indexYinf,indexXsup); 
            Iaux2 = (1-t)*I(indexYsup,indexXinf) + t*I(indexYsup,indexXsup); 
            Irot(j,k) = (1-s)*Iaux1 + s*Iaux2;
        end        
    end
    end 
    % On calcule la moyenne de la somme de chacune des colonnes 
    % de la matrice Irot (prenant en compte qu'il y a essentiellement
    % m termes non nuls dans chaque colonne. 
    S = [S,(sum(Irot)/m)']'; 
 end
end

