Mo Logo [Home] [Lexikon] [Aufgaben] [Tests] [Kurse] [Begleitmaterial] [Hinweise] [Mitwirkende] [Publikationen] [Suche]

Mathematik-Online-Kurs: MATLAB - Grafik

Bilder und Animationen


[vorangehende Seite] [nachfolgende Seite] [Gesamtverzeichnis][Seitenübersicht]

Für die Bearbeitung von Bildern (Rastergrafiken) und Animationen stellt MATLAB unter anderem die folgenden Funktionen zur Verfügung:

 Funktionen zur Bildverarbeitung:
   imread, imwrite Lesen und Schreiben von Grafikdateien
   image Darstellung von Bildern
   imfinfo Ausgabe von Informationen zu einem Bild
 Animationen:
   getframe Speichern von Animationsframes
   movie Abspielen gespeicherter Frames
   im2frame, frame2im Konvertierung zwischen Bildern und Movie-Frames
   movie2avi Konvertiert MATLAB-Movie in eine AVI-Datei
   aviread Einlesen eines AVI-Films

Mit imread eingelesene Bilder werden in Form einer Matrix bzw. eines mehrdimensionalen Feldes zurückgegeben. Diese lassen sich anschließend mit Hilfe der üblichen MATLAB-Funktionen bearbeiten.

(Autoren: Hörner/Wipper)

Die folgende Animation illustriert die Konstruktion einer Zykloide, die die Bahn eines Punktes auf einem rollenden Kreis beschreibt.

Zu Beginn der Animation wird ein Titelbild gezeigt das aus der Datei

 'mologo.jpg'
eingelesen wurde.

  mologo = imread('mologo.jpg','jpg');
  M(1) = im2frame(mologo);
  s=size(M(1).cdata);

Für den eigentlichen Film wird zunächst das Grafikfenster initialisiert. Dabei ist es wichtig, die Grenzen fest zu wählen, damit bei den Einzelbildern keine unterschiedlichen Skalierungen entstehen.

  clf; hold on
  axis equal; axis off
  axis([-2,2*pi+2,-1,3]);
  set(gcf,'color',[1 1 1]);

Nun wird als zweiter Frame der Titeltext erzeugt. Die Größe des aus dem aktuellen Achsensystem (gca) auszulesenden Rechtecks, wird entsprechend der Größe des Titelbilds gewählt, damit sich alle Einzelbilder des Filmes überdecken. Nachdem der Frame erzeugt wurde, wird der Text wieder aus der Grafik entfernt.

  h=text(pi,2,'Die Zykloide','fontsize',40,'HorizontalAlignment','center');
  M(2) = getframe(gca,[0,0,s(2),s(1)]);
  delete(h);

Vor der Berechnung der Bildsequenz wird die Strecke, auf der der Kreis abrollt, gezeichnet und es werden einige vorbereitende Berechnungen durchgeführt.

  plot([0,2*pi],[0,0],'-g')

  % Kreis mit Radius und Drehmatrix  
  phi = 2*pi/100; 
  c = [sin(0:phi:2*pi) 0; -cos(0:phi:2*pi) 0];
  D = [cos(phi) sin(phi); -sin(phi) cos(phi)];

In jedem Schritt der folgenden Schleife rollt der Kreis um $ \varphi$ Einheiten nach rechts und die Bahn eines markierten Punktes wird in der Matrix z akkumuliert. Das aktuelle Bild wird jeweils in einem Frame gespeichert.

  z = [0; 0];
  for k = 0:100
    h = plot(k*phi+c(1,:),1+c(2,:),'-b');
    z = [z [k*phi+c(1,1); 1+c(2,1)]];
    plot(z(1,:),z(2,:),'-r');
    h2=plot(z(1,end),z(2,end),'ok');  
    M(k+3) = getframe(gca,[0,0,s(2),s(1)]);
    c = D*c;
    delete(h,h2);
  end

Schließlich wird der erzeugte Film mit 10 Frames pro Sekunde abgespielt und im AVI-Format gespeichert. Dabei werden die ersten beiden Frames wiederholt verwendet, um eine längere Anzeigedauer zu erzielen.

  movie(M,[1 ones(1,20),2*ones(1,30),3:103],10)
  movie2avi(M([ones(1,20),2*ones(1,30),3:103]),'zykloide.avi','fps',10)

Wegen der im allgemeinen sehr großen Datenmengen sollte die AVI-Datei komprimiert werden. Beispielsweise ergab eine Umwandlung in eine animierte gif-Datei für diesen Film eine auf ca. 1/600 reduzierte Dateigröße.

(Autor: Klaus Höllig)

Download:

(Dateityp: .zip, 16K,  08.06.2009)

[vorangehende Seite] [nachfolgende Seite] [Gesamtverzeichnis][Seitenübersicht]

  automatisch erstellt am 5.2.2008