|
[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] |
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.
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
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.
Download:
| (Dateityp: .zip, | 16K, | 08.06.2009) |
| [vorangehende Seite] [nachfolgende Seite] | [Gesamtverzeichnis][Seitenübersicht] |
| automatisch erstellt am 5.2.2008 |