function A24(Filter)
% A24(Filter)
%
% FFT mit Al. Führe verschiedene Operationen auf der DFT eines
% Bildes (hier Spektrum genannt) aus und beobachte die Wirkung
% auf das Bild.
%
% Eingabe: Filter:
%              0 = Setze Spektrum ausserhalb eines Kreises auf 0
%              1 = Setze Spektrum innerhalb eines Kreises auf 0
%              2 = Schneide Teil des Bildes aus und kopiere dessen
%                  (kleineres) Spektrum in eine Null-Matrix der Originalgröße 
%              3 = Multipliziere Zeilen und Spalten des Spektrums mit Phasenfaktoren
%              4 = Multipliziere das Spektrum mit sinc-Funktionen
%              5 = Verschiebe das Spektrum

% Lade Bild
load 'al.raw';
Img = al;

% Stelle Bild dar
imagesc(Img);
colormap gray;
axis square;
title('Original');

% Führe Transformationen mit dem Spektrum durch
if Filter==0
   Spectrum = fftshift(fft2(Img));
   
   Cut = 45;       % Wegschneide-Radius
   for x=1:128
      for y=1:128
         if (x-64.5)^2+(y-64.5)^2>Cut^2 Spectrum(x,y) = 0; end;
      end;
   end;
elseif Filter==1
   Spectrum = fftshift(fft2(Img));
   
   Cut = 15;       % Wegschneide-Radius
   for x=1:128
      for y=1:128
         if (x-64.5)^2+(y-64.5)^2<Cut^2 Spectrum(x,y) = 0; end;
      end;
   end;
elseif Filter==2
   Mitte   = [52 71];   % Mittelpunkt, um den ausgeschnitten wird
   Groesse = [16 16];   % Breite und Höhe des auszuschneidenden Bereiches
   Img = Img(Mitte(1)-Groesse(1):Mitte(1)+Groesse(1)-1 , Mitte(2)-Groesse(2):Mitte(2)+Groesse(2)-1);
   
   Spectrum = zeros(128,128); 
   Spectrum(64-Groesse(1)+1:64+Groesse(1) , 64-Groesse(2)+1:64+Groesse(2)) = fftshift(fft2(Img));   
elseif Filter==3
   Spectrum = fftshift(fft2(Img));
   
   tx = 20;
   ty = 35;
   for n=1:128 Spectrum(:,n) = Spectrum(:,n) * exp(1i*2*pi*n*tx/128); end;
   for m=1:128 Spectrum(m,:) = Spectrum(m,:) * exp(1i*2*pi*m*ty/128); end;
elseif Filter==4
   Spectrum = fftshift(fft2(Img));
   
   for n=1:128 Spectrum(:,n) = Spectrum(:,n) * sinc((n-64)/32); end;
   for m=1:128 Spectrum(m,:) = Spectrum(m,:) * sinc((m-64)/32); end;
elseif Filter==5
   Spectrum = fftshift(fft2(Img));
   
   tx = 5;
   ty = 11;
   Spectrum = Spectrum([tx+1:128 1:tx],[ty+1:128 1:ty]);
end;

% Zeichne das Spektrum
figure;
image(real(32+Spectrum/500));
colormap gray;
axis square;
title('(gefiltertes) Spektrum');

% Zeichne das rücktransformierte Bild
figure;
ChangedImg = real(ifft2(fftshift(Spectrum)));
imagesc(ChangedImg);
colormap gray;
axis square;
title('Rücktransformiertes Bild');
