MIN-Fakultät
Fachbereich Informatik
Szenenanalyse und Visualisierung (SAV)

Infoseite zu dem Masterprojekt Bildverarbeitung (Mi 14-18) im SoSe 2015 Teil 1

Beschreibung des Projekts

Entgegen der Beschreibung in Stine, wird in diesem Projekt das aktuelle Forschungsfeld der Manuskriptkulturen bearbeitet. Dieses umfasst die Erprobung und Analyse vorhandener BV-Algorithmen, wie z.B. der Layoutanalyse oder der Schreiber-Erkennung historischer Manuskripte unterschiedlicher Kulturen.

Vorgehensweise

In der ersten Woche werden die Themen vorgestellt. Die Teilnehmer finden sich in Zweier-Gruppen ein und können sich für verschiedene Teilaspekte des Forschungsbereichs entscheiden. Anschließend wird es in den ersten 6 Wochen eine Einführung in C++, die verwendete Programmiersprache, sowie in die praktische Bildverarbeitung mit dieser Sprache geben. Anschließend beginnt die Phase der freien betreuten Projektarbeit an den gewählten Themen.

Wichtige Termine

Die folgenden Termine können Sie sich gerne schon vormerken. Die Liste wird während des Semesters noch erweitert.

  • 1. April: Begrüßung der Teilnehmer, Einführung in das Projekt.
  • 22. April: Einarbeitung der Kleingruppen in die Themen.
  • 6. Mai: Vorstellung der gewählten Themen.
  • 20. Mai: Beginn der selbstständigen Arbeit in den Kleingruppen.
  • 8. Juli: Vorstellung des Zwischenstands.

Materialien

Einführung in das Themengebiet der Manuskriptkulturen:

Auswählte Artikel zum Thema Layoutanalyse und Schreibererkennung:

Einführender C++-Kurs, angepasste und neu aufgeteilte Folien nach U. Schroeder, RWTH Aachen:

  1. Teil: Von Java zu C++
  2. Teil: Datentypen, Pointer, Referenzen und 1D-Arrays
  3. Teil: Funktionspointer, ADTs und nD-Arrays
  4. Teil: Klassendefinitionen
  5. Teil: Die STL
    Außerdem hilfreich: Dokumentation zu Boost 1.58.0
  6. Teil: Introduction to Modern C++ (Folien von Olve Maudal)
    Weitere Literatur: Top 11 der Features von C++11 (Heise Developer)

Als Grundlage der Bildverarbeitung verwenden wir die VIGRA-Bibliothek. In den ersten Wochen werden wir das zugehörige Tutorial nach folgendem Schema durch arbeiten.

  1. Teil: MultiDimensionalArrayTutorial, bis inkl. "One-dimensional Indexing and Scan-Order Iterator",
            außerdem: Image Input/Output
  2. Teil: MultiDimensionalArrayTutorial, ab "Important MultiArray Methods"
  3. Teil: Mathematics with Multi-Dimensional Arrays, bis inkl. "STL-style transformation algorithms"
  4. Teil: Mathematics with Multi-Dimensional Arrays, ab "Feature Accumulators"
  5. Teil: Image Processing
  6. Teil: Writing your own functions,
            außerdem: VIGRA Python Bindings

Hier könnt ihr euch den Zwischenstand zum SIFT-Verfahren herunterladen: SIFT-example.zip

Den SIFT-Vortrag von Linda Shapiro findet ihr auf den Seiten ihrer Universität!

Hier gibt es noch einen Codeschnipsel zur Anpassung von Parabeln gegeben 3 Punkte P1=(x1,y1), P2=(x2,y2) und P3=(x3,y3). Hierbei werden zunächst die drei Parameter der Parabel ermittelt y= A+x^2 + B*x + C. Anschließend wird der Scheitelpunkt S=(xv,yv) zurückgegeben.

inline void calcParabolaVertex(int x1, int y1, int x2, int y2, int x3, int y3, double& xv, double& yv)
{
	double denom = (x1 - x2) * (x1 - x3) * (x2 - x3);
	double A     = (x3 * (y2 - y1) + x2 * (y1 - y3) + x1 * (y3 - y2)) / denom;
	double B     = (x3*x3 * (y1 - y2) + x2*x2 * (y3 - y1) + x1*x1 * (y2 - y3)) / denom;
	double C     = (x2 * x3 * (x2 - x3) * y1 + x3 * x1 * (x3 - x1) * y2 + x1 * x2 * (x1 - x2) * y3) / denom;

	xv = -B / (2*A);
	yv = C - B*B / (4*A);
}

Software

Wir arbeiten in diesem Projekt mit der Sprache C++ und der VIGRA-Bibliothek. Diese ist generell unter allen Betriebssystemen lauffähig. Es empfiehlt sich hierbei folgendes:

  • Unter Windows:
    Benutzt MS Visual Studio 2012 Ultimate (UHH Dreamspark) und befolgt diese Anleitung.
  • Unter Linux:
    Befolgt die Installationsanweisungen auf der VIGRA-Homepage
  • Unter Mac OS X:
    Installiert das MacPorts Paketsystem und installiert die vigra über die Konsole durch die Eingabe von:
    sudo port install vigra

Um die Arbeit mit dem C++ Compiler zu vereinfachen, könnt ihr euch hier ein Musterprojekt mit einem Makefile für die Pfadeinstellungen der Pool-iMacs herunterladen. Dieses erzeugt eine ausführbare Datei, die gegen die VIGRA linkt.

Noch einfacher fällt der Umgang mit dem C++ Compiler aus, wenn man ein Build-System verwendet. Wir werden zunächst CMake verwenden. Dieses System ist in der Lage, ausgehend von einer Projektbeschreibung in CMake-Notation, diverse Formate generieren zu können, z.B. Visual Studio, XCode, Makefiles. Ihr findet hier ein Musterprojekt, welches CMake verwendet. Dieses könnt ihr wie folgt übersetzen:

cd TUTORIAL_VERZEICHNIS
mkdir build
cd build
cmake ..
make

Ihr könnt es aber auch dazu verwenden, ein XCode-Projekt für euch erstellen zu lassen:

cd TUTORIAL_VERZEICHNIS
cmake -G Xcode .

Um die VIGRA unter Windows zu verwenden bietet sich die IDE Visual Studio 2012 an. Diese bekommt ihr in der Ultimate Version über das MS Dreamspark Programm der UHH. Eine Anleitung, wie man die VIGRA hiermit unter Windows verwenden kan, findet ihr zusammen mit den nötigen Projekteinstellungen unter: VIGRA unter Windows benutzen: VS 2012.

ACHTUNG: Leider ist in der alten Version der vigra-Windows-Pakete eine fehlerhaftes Windows-CMake Konfiguration enthalten!
Um dies zu patchen ersetzt bitte den Ordner "share/cmake/" durch den, der in diesem Archiv enthalten ist. Die neuen Pakete wurden bereits korrigiert.

Auch für Windows bietet CMake einen passenden Generator an. Für 64 Bit-Übersetzung mit oben genanntem Tutorial führt folgender Aufruf zum automatischen Erzeugen der VS-Projektdateien:

cd TUTORIAL_VERZEICHNIS
cmake -G "Visual Studio 11 2012 Win64" .

Unterscheidung 32/64 Bit: Für 32 Bit einfach das Suffix "Win64" weg lassen.

ACHTUNG: Im Systempfad (%PATH%) müssen immer die passenden Bibliotheken eingebunden werden - CMake prüft dies nicht! Meine Empfehlung: Unter modernen Windows-Versionen und Architekturen stets 64 Bit verwenden.

Hier könnt ihr euch ein Beispiel zur Verwendung der VIGRA mit VS 2012 herunterladen. Dieses Beispiel findet sich in der VIGRA als "Converter" und setzt als Basispfade für die VIGRA jeweils

C:\local\Win32
für die 32Bit Kompilierung bzw.
C:\local\x64
für die 64Bit Kompilierung voraus.

Literatur:

  • Richard Szeliski (2010): Computer Vision: Algorithms and Applications (Homepage and eBook download)
  • Sonka, Hlaváč und Boyle (3. Auflage 2008): Image Processing, Analysis and Machine Vision, Thomson
  • D.A. Forsyth, J. Ponce: Computer Vision, A Modern Approach, Prentice-Hall 2003
  • R.C. Gonzalez, R.E. Woods: Digital Image Processing, Prentice-Hall 2001
  • B. Jähne (1997): Digitale Bildverarbeitung (4. Auflage), Springer-Verlag
  • R. Klette, A. Koschan, K. Schluns (1996): Computer Vision, Vieweg
  • R.M. Haralick, L.G. Shapiro (1993): Computer and Robot Vision, Vol. I & II, Addison-Wesley