MIN-Faculty
Department of Informatics
Scene analysis and visualization (SAV)

Infoseite zu dem Bildverarbeitungsprojekt (Do 14-18) im WiSe 2011/12 Teil 2

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 }
	}
}