FreeMat unter Windows & Linux Version: 23.11.2008 Inhalt Einleitung:... 2 1. Allgemeine Informationen... 2 2. Installation... 2 FreeMat unter Windows x86/x64... 2 FreeMat unter Linux... 3 3. Arbeiten mit FreeMat... 3 Command Window... 3 Editor Window... 3 Ausführung des Beispielprogramms... 3 4. Referenz... 4 Funktionen zum Laden, Speichern, Anzeigen von Bilddateien... 4 Laden und Speichern... 5 Bilddatei in eine Matrix einlesen... 6 Matrix in eine Bilddatei schreiben... 6 Bild anzeigen... 7 1
Einleitung Diese Anleitung soll den Benutzer dazu befähigen, mit Hilfe der Entwicklungsumgebung FreeMat Algorithmen der Bildverarbeitung zu programmieren und an Bildern auszuführen. Sie behandelt Installation und administrative Schritte, die für eine Projekterstellung notwendig sind. Die Beschreibung von der Programmierung eines Beispielalgorithmus sorgt für einen schnellen Einstieg. 1. Allgemeine Informationen Aktuelle Version: FreeMat 4.2 (Zum Zeitpunkt der Erstellung dieses Tutorials war die aktuelle Version FreeMat 3.6, diese wird im Text beschrieben. Die Installation der aktuellen Version sollte aber prinzipiell ähnlich funktionieren.) Homepage: http://freemat.sourceforge.net/ Betriebsumgebung / Systemanforderungen: alle 32bit Windows (95/98/NT/2000/XP/Vista) alle POSIX (Linux/BCD/Unix) Mac OS X ca. 30 MB freier Festplattenspeicher 2. Installation FreeMat unter Windows x86/x64 Die Installation von FreeMat kann unter Windows (9x,NT, Vista) einfach über den Installationsassisten ausgeführt werden. Hierbei wird als Verzeichnis die Standardvorgabe von Windows für die Installation von Programmen empfohlen (c:\program file(x86)\freemat3.6). Nachdem die Installation abgeschlossen ist kann Freemat 3.6 über die Verknüpfung im Startmenü oder auf dem Desktop gestartet werden. Nach der Installation sollte über das pathtool (pathtool als Befehl eingeben oder unter Tools Path Tool auswählen) das Arbeitsverzeichnis definiert werden. 2
FreeMat unter Linux Von den Entwicklern wird empfohlen, FreeMat unter dem Fedora Core 7 zu betreiben. Für den Fedora 8 Core sind die ffcall und arpack libraries nicht direkt verfügbar, diese finden sie bei Dries RPM Repository als gesonderten Download. http://dries.studentenweb.org/rpm/packages/ffcall/info.html http://www.atrpms.net/dist/fc6/arpack 3. Arbeiten mit FreeMat FreeMat verfügt über zwei Benutzerinterfaces: Command Window (wird bei Programmstart als erstes aufgerufen) und Editor Window (Aufruf über CTRL-E oder Tools-Editor) Command Window In dem Command Window können direkt Befehle für das Arbeiten mit FreeMat eingegeben werden. Das Command Window ist in den Workspace auf der rechten Seite und drei Tabs auf der linken Seite aufgeteilt: Tab "History" Protokoll der eingegebenen Befehle Tab "Files" Anzeige des über pathtool festgelegten Arbeitsverzeichnisses Tab "Workspace" Übersicht über alle im Workspace gespeicherten Variablen Editor Window In dem Editor Window können.m-dateien bearbeitet werden. In diesen Dateien können mehrere Befehle, also im Prinzip Programme oder Programmteile für die Nutzung gespeichert werden. Ausführung des Beispielprogramms Nachdem FreeMat 3.6 gestartet wurde, kann über das Menü Tools der Editor aufgerufen werden. Dieser ist auch über das Tastenkürzel STRG+E zu erreichen. In diesem Editor können nun mehrere Befehle zu einem Programm zusammengefasst werden. Mit dem Befehl imread kann eine Bilddatei geladen werden. Die so geladenen Bilder werden als Matrix gespeichert. Um ein einzelnes Element auszulesen oder zu modifizieren kann dieses über die Nummer der Zeile und Spalte eindeutig identifiziert werden. 3
a = imread ('c:\beispiel.jpg'); // Hier wird der vollständige Pfad zur Bilddatei angegeben, a(1,1) ist also der Farbwert des ersten Pixels der ersten Zeile. Um zum Beispiel alle Punkte eines Bildes zu durchlaufen, werden Kontrollstrukturen benötigt. Es bietet sich an, die aus anderen Sprachen bereits bekannte for-schleife zu verwenden. Der Editor von FreeMat färbt hierbei die Elemente ein und sorgt für das Einrücken der nächsten Zeilen, um so einen übersichtlichen Code zu gewährleisten. Es werden zwei verschachtelte for-schleifen genutzt, um alle Zeilen und Spalten zu durchlaufen. Mit dem Befehl imwrite lassen sich Matrizen als Bilddatei speichern. imwrite ('Dateiname', Matrixname) imagesc (Matrixname) zeigt ein Bild an und erlaubt einige Optionen wie z.b. Zoomen a = imread ('c:\beispiel.jpg');b = a; for i=1:64 for j=1:64 a(i,j) = b(65-i,65-j); end end imwrite ('c:\ausgabe.jpg', a); imagesc (a); Dieses kurze Beispielprogramm läd eine Bilddatei, des Formates 64*64, spiegelt diese um eine Diagonale, speichert das Ergebnis in einer weiteren Datei und zeigt sie an. Das beigefügte Beispielprogramm spiegeln.m lässt sich, nachdem es in das Arbeitsverzeichnis von FreeMat kopiert wurde über den Befehl spiegeln aus dem Command Window aufrufen. Die Bilddatei beispiel.jpg muß hierfür auf c:\ liegen. 4. Referenz Die Onlinedokumentation von FreeMat finden sie hier : http://freemat.sourceforge.net/help/index.html Funktionen zum Laden, Speichern, Anzeigen von Bilddateien Prozedur Zu benutzende Funktion Laden oder Speichern einer Matrix als.mat-datei load, save Laden oder Speichern einer Bilddatei (jpg, png, etc) imread, imwrite Anzeige eines in FreeMat geladenen Bildes image, imagesc 4
Laden und Speichern Laden oder Speichern einer Matrix als.mat-datei Liest eine Matrix aus einer.mat-datei aus oder speichert eine in das FreeMat Workspace geladene Matrix als.mat-datei. Dies ist besonders dann hilfreich, wenn statt im Editor direkt im Kommandozeilenfenster gearbeitet wurde. load läd alle Variablen der.mat-datei matlab.mat in den Workspace, falls die Datei exisiert. Wenn nicht, wird eine Fehlermeldung ausgegeben. load filename läd alle Variablen von der Datei, welche in filename spezifiziert ist in den Workspace. filename ist ein unquoted string, kann auch eine Dateiendung oder einen vollen oder teilweisen Pfad enthalten. Wenn filename keine Dateiendung zugewiesen wird, sucht load nach einer Datei filename.mat und behandelt diese als binäre.mat- Datei. Bei allen anderen Dateiendungen wird die Datei als ASCII Datensatz behandelt. load filename X Y Z... [Nur für.mat-dateien] läd nur die spezifizierten Variablen X, Y, Z, etc. aus der.mat-datei. Die Wildcard * läd Variablen, die einem Muster entsprechen. load filename -regexp expr1 expr2.. läd die Variablen, die den gegebenen regulären Ausdrücken (expr1, expr2 ) entsprechen. load -ascii filename erzwingt die Interpretation der zu ladenden Datei als ASCII Datensatz, unabhängig von der Dateiendung. Wenn die Datei nicht aus numerischem Text besteht, gibt load einen Fehler zurück. Sollte nur mit Dateien verwendet werden, welche mit save ascii erzeugt wurden. load -mat filename erzwingt die Interpretation der zu ladenden Datei als.mat-datensatz, unabhängig von der Dateiendung. Wenn es keine.mat-datei ist, wird ein Fehler ausgegeben. save speichert alle momentan im Workspace geladenen Variablen in die Datei matlab.mat save filename speichert alle momentan im Workspace geladenen Variablen in die Datei filename.mat, wenn eine Dateiendung spezifiziert wird, wird diese übernommen. Mit Angabe eines Pfades kann auch in einem anderen Verzeichnis gespeichert werden. 5
Bilddatei in eine Matrix einlesen Bilddatei in Matrix lesen Imread liest die Bilddatei aus einer gegebenen Datei in eine Matrix ein. Die Unterstützung von FreeMat für imread ist nicht komplett Nur einige Formate, die in der Matlab API spezifiert sind sind implementiert. A = imread( filename.fmt ) filename ist der Name der Datei, von der gelesen werden soll. Das zurückgegebene Array A beinhaltet die Bilddaten. fmt definiert den Dateityp über die Dateiendung. [X,map] = imread( filename ) läd eine indizierte Bilddatei in filename in die Variable X, die zugehörige colormap in map. Die colormap Werte werden automatisch in die Form [0,1] gebracht. [A, map, alpha] = imread(...) in die Variable alpha werden die alpha-channel (Transparenz) Informationen geladen. Generell können z.b. Bilder des Typs jpg, png, xpm und ppm gelesen werden. Matrix in eine Bilddatei schreiben Imwrite schreibt eine Matrix in eine Bilddatei. Schreibt die Bilddaten einer gegebenen Matrix in eine Bilddatei. Die Unterstützung ist wie bei imread nicht komplett. imwrite( filename, A) [True Color Bilder / RGB] imwrite( filename, A, map) [indizierte Bilder / bspw. Gifs] imwrite( filename, A, map, alpha) [indizierte Bilder mit alpha-channel / bspw. Gifs, PNG s] filename ist der Name der Datei, in die geschrieben werden soll. Das auszugebende Array A beinhaltet die Bilddateien, map beinhaltet die colormap-information (indexed images), alpha beinhaltet die alphamap (transparenz). Die Werte hängen vom Typ des Originalbildes ab. Generell können Bilder des Typs jpg, png, xpm, ppm und manche andere Formate ausgegeben werden. 6
Bild anzeigen Bild anzeigen Zeigt ein in eine Matrix geladenes Bild an. image(a) / imagesc(a) TrueColor RGB images image(a); colormap(map) indexed images imagesc(i,[0 1]); colormap(gray) intensity A ist das Array, in das eine Bilddatei eingelesen wurde. 7