Infoseite zu dem Bildverarbeitungsprojekt (Do 14-18) im SoSe 2011 Teil 1
Beschreibung des Projektes
Dreidimensionale bildgebende Verfahren werden in vielen Bereichen der
Forschung und Medizin immer wichtiger. Neben den professionellen Systemen der 3D-Bildgebung, wie zum Beispiel CT- oder MRT-Scanner, erfreuen sich in letzter Zeit kostengünstige Möglichkeiten der 3D Bilderzeugung immer größerer Beliebtheit. Diese beruhen zum Beispiel auf Stereoskopie, speziellen Kameras oder aber der Abbildung von Laserlicht auf den Objekten. Mit diesen Verfahren lassen sich Daten der Objektoberfläche gewinnen.
Zur Gewinnung von sog. 2,5D-Daten (Bilddaten mit Tiefeninformationen) wird im Projekt die Microsoft Kinect Plattform verwendet. Hierbei handelt es sich um eine Hardware, die ursprünglich für die Steuerung von Computerspielen entwickelt worden ist, und daher recht günstig im Einzelhandel erworben werden kann. Sie besitzt als Sensorik eine Kombination von Tiefensensor-Kamera, 3D-Mikrofon und Farbkamera. Zudem existieren bereits vorgefertigte Treiber, um die Daten der Kinect verarbeiten zu können.
Materialien zum 26.05.2011
Spyder2 wurde auf allen iMacs installiert, ihr könnt es mit dem Befehl "spyder" aus jedem Terminal heraus starten.
Folgende zip-Datei enthält die Korrektur-Routinen, die die Farb-Informationen der Kinect auf die Tiefenkarte registieren: kinectcalibration.zip. Diese sol am heutigen Termin dazu benutzt werden, um die Szenen vom 12.05.2011 zu registieren. Schaut euch dazu bitte zunächst die Beispieldatei "example.py" an, die sich in dem Paket befindet! Besonderer Dank geht an das Team rund um Oliver Bestmann, welches die letzten Termine mit dem Erstellen dieser Funktionalität verbracht hat
Materialien zum 12.05.2011
Folgende zip-Datei enthält die zu untersuchenden Szenen: scenes.zip. Diese sollen am heutigen Termin analysiert werden und zwar mittels einfacher Schwellenwert-Segmentierung und Mustererkennung über Kreuzkorrelation. Laden könnt ihr die darin enthaltenen Numpy-Arrays mit dem Befehl np.load(filename). In den Dateien "sceneXX_depth.npy" befinden sich die Tiefeninformationen, in den Dateien die zugehörigen Farbinformationen "sceneXX_color.npy".
import numpy as np arr = np.load(filename)
Materialien zum 14.04.2011
Folgende Datei muss in das Homeverzeichnis (Unterverzeichnis .matplotlib) kopiert werden: matplotlibrc
Die Folien zum Python-Vortrag können hier heruntergeladen werden
Vorgehensweise
Die ersten Wochen werden wir mit der Einführung in die zu verwendende Programmiersprache beginnen. Diese wird nach den Vorlieben der Studierenden und der Länge der Einarbeitungszeit zusammen mit den Betreuern ausgewählt. Bereits während dieser Einführung werden wir erste Bildverarbeitungsalgorithmen erarbeiten, die die Vertiefung des Masterprojekts vorbereiten. Im Anschluss daran werden mit Hilfe wissenschaftlicher Texte und eigener Interessen Konzepte und Algorithmen entwickelt, um die verschiedenen Themengebiete zu untersuchen.
Materialien
Python
Python-Entwicklungsumgebung
Wer eine geeignete Entwicklungsumgebung zu Python sucht, dem schlagen wir Spyder v2.0 vor. Diese wird im Laufe der nächsten Woche auf den iMacs installiert. Wer sie sich vorher schon einmal selbst installieren möchte, kann dies gerne tun, sollte aber folgende Abhängigkeiten vorher installiert haben:
- Python 2.x (x>=5)
- PyQt4 4.x (x>=4)
- pyflakes >v0.3.0 (real-time code analysis)
- rope >=v0.9.2 (editor code completion, calltips and go-to-definition)
- sphinx >=v0.6 (object inspector’s rich text mode)
- numpy (N-dimensional arrays)
- scipy (signal/image processing)
- matplotlib (2D/3D plotting)
- IPython (enhanced Python interpreter)
Diese (in Python geschriebene) Entwicklungsumgebung bietet einen schönen Komfort und basiert auf uns bekannten Paketen und Editoren.
Materialien zu Python
Allgemeine Dokumentationsseite zur Python-Programmiersprache: http://www.python.org/doc/
Das offizielle Tutorial zum Einstieg in Python: http://docs.python.org/tutorial/
Eine Kurzanleitung mit vielen Beispielen: http://www.intuit-symbiosis.org/computing/?uid=9
Kurz und knapp: Learn Python in 10 minutes: http://www.korokithakis.net/tutorials/python
Einfache Programme, die Python-Lösungen für verschiedene Probleme zeigen: http://wiki.python.org/moin/SimplePrograms
Lehrvideos
Screencasts (Bildschirm-Mitschnitte): http://showmedo.com/videos/python
Bücher
Einsteiger: Dive into Python (online): http://diveintopython.org/
Einsteiger: Learning Python / Einführung in Python: Inf. Bibliothek, Code P LUT
Materialien zu IPython
Homepage von IPython: http://ipython.scipy.org
Übersicht über die wichtigsten Befehle: http://ipython.scipy.org/doc/manual/html/interactive/tutorial.html
„Kochbuch“ mit vielen vielen Beispielen: http://ipython.scipy.org/moin/Cookbook
Materialien zu Matplotlib
Homepage des Matplotlib-Projekts: http://matplotlib.sourceforge.net/
Offizielle Dokumentation: http://matplotlib.sourceforge.net/contents.html
Beispiele zur Anzeige von Bildern:
http://matplotlib.sourceforge.net/examples/pylab_examples/image_demo.html,
http://matplotlib.sourceforge.net/examples/pylab_examples/image_demo2.html,
http://matplotlib.sourceforge.net/examples/pylab_examples/image_demo3.html
Allgemeine Materialien zu SciPy und NumPy
Homepage des SciPy / NumPy Projekts: http://www.scipy.org
Offizielle Dokumentationen: http://docs.scipy.org/doc/
„Kochbuch“ mit vielen vielen Beispielen: http://www.scipy.org/Cookbook
Verzeichnis aller weiteren Tutorials, eBooks und weiterführenden Dokumentationen: http://www.scipy.org/Additional_Documentation
Materialien speziell zu SciPy
Offizielles Tutorial: http://docs.scipy.org/doc/scipy/reference/tutorial/
Wiki-Tutorial: http://www.scipy.org/SciPy_Tutorial
Einige wenige Bespiele: http://www.scipy.org/scipy_Example_List
Materialien speziell zu NumPy
Offizielles Tutorial: http://www.scipy.org/Tentative_NumPy_Tutorial
Übersicht aller Funktionen (kategorisiert): http://www.scipy.org/Numpy_Functions_by_Category
Übersicht aller Funktionen jew. mit Beispielen (alphabetisch,Achtung: lange Ladezeit): http://www.scipy.org/Numpy_Example_List_With_Doc
Kinect
Handout zur Microsoft Kinect
Christian hat ein Handout zur Microsoft Kinect erstellt. Dieses Handout beinhaltet einige interessante Details der Hardware: Download des Handouts inklusive weiterführender Links.
Die c't befasst sich in Audgabe 08/2011 mit der Kinect, bzw. der Bewegungserkennung im Speziellen. Leider ist dieser Artikel urheberrechtlich geschützt, so dass wir ihn hier nicht zum Herunterladen anbieten können.
Freie Treiberbibliothek: libfreenect
Informationen zur OpenSource Kinect-Gemeinschaft findet ihr auf der OpenKinect Homepage. Auf dieser Homepage gibt es neben einigen weiterführenden Informationen auf die quell-offene Treiberbibliothek zur Kinect: libfreenect. Diese kann man sich auch auf dem eigenen Rechner installieren (Download- und Installationsanleitung) und dann auch ohne Kinect über die Fakenect-Emulation arbeiten.
Kinect und Qt 4.7: QFreenect
Für die erste Veranstaltung habe ich einen C++ und Qt-basierten Viewer geschrieben, der auf der asynchronen cppview der libkinect aufbaut. Dieser kann als zip-Datei direkt heruntergeladen werden. Bitte beachtet, dass der Wrapper noch Bugs enthalten kann! Zudem ist die Version z.Zt. nur auf der Macs im RZ lauffähig. Falls es auch auf anderen Plattformen laufen soll, muss der Ordner "lib" durch das kompilierte lib-Verzeichnis der libfreenect ersetzt werden oder das qmake-File angepasst werden, so dass die passenden Bibliotheken gefunden werden können.
Kinect und Python 2.7
Wir arbeiten gerade noch daran, den aktuellen Python-Wrapper der libfreenect über das RZ installieren zu lassen. Auf meinem Macbook l&aum;ft er aber schon. So sollte er - bei Bedarf - in der kommenden Woche (also zum zweiten Termin) zur Verfügung stehen. Für die Erstellung von lokalen libfreenect-Installationen helfen Christian und ich euch gerne!
Erzeugung von künstlichen Tiefen-Bildern (depth-maps)
Um idealisierte Tiefenbilder einer (modellierten) Szene zu erhalten, gibt es die Möglichkeit mit Pov-Ray neben fotorealistischen auch Tiefenbilder zu rendern. Diese werden auch als Depth-Maps bezeichnet. Dazu muss dem Renderer eine Textur vorgegaukelt werden, die sich nur ambient mit der Entfernung zur Kamera verhält. Dies erreicht man am einfachsten durch eine geeignete Textur. Das folgende Beispiel stammt von http://runevision.com/graphics/stereo/depthmap/:
camera { location <0, 0, -10> look_at < 0, 0, 0> angle 45 } union { sphere { <-3,0,-1.5>, 2.5 } box { <1,-1,0>, <3,1,2> rotate <20,30,0> } box { <-100,-100,-0.5>, <100,100,-0.5>} texture { //This line enables the depth rendering! //It is nothing more than using the gradient in -z, //scaling and translating the texture //and switching off the diffuse light! pigment { gradient -z } scale 5 translate <0,0,5> finish { ambient 1 diffuse 0 } } }