Praktikum Computerassistierte Chirurgie, WS 2014 / 2015

Praktikum Computerassistierte
Chirurgie, WS 2014 / 2015
Bildverarbeitung mit MeVisLab
Dipl.-Inf. Frank Heckel
Fraunhofer-Institut für bildgestützte Medizin MEVIS
Universitätsallee 29
28359 Bremen
Innovation Center Computer Assisted Surgery
Semmelweisstraße 14
04103 Leipzig
[email protected]
http://mevis.fraunhofer.de/~fheckel
Praktikum Computerassistierte Chirurgie, WS 2014/2015
Bildverarbeitung mit MeVisLab
MeVisLab












Entwickelt von der Firma MeVis Medical Solutions AG in Kooperation mit Fraunhofer MEVIS
Module (= Algorithmen, Komponenten) zur Bildverarbeitung und Visualisierung
Kapselung einer Menge von Modulen in Makromodulen
Visuelle Programmierung:
o Verbinden von Modulen ( Bilder, Visualisierungen, beliebige Datenstrukturen)
(unten: Eingänge, oben: Ausgänge)
o Weiterleiten von Parametern („Felder“) über Feldverbindungen
o Eine Menge von so verbundenen Modulen bildet einen Graph („Netzwerk“)
Rapid Prototyping:
o Objektorientierte GUI Definition (nutzt Qt)
o Umfangreiche Scripting Funktionalitäten auf Basis von Python (und JavaScript)
Modulare, erweiterbare C++ Bildverarbeitungsbibliothek
o Page-basiert
o Bedarfsgetrieben
o 6D (x, y, z, t, c, u)
o Unterstützt Caching
Integration in die klinische Infrastruktur (DICOM, PACS)
Integrierter Editor (MATE)
Verschiedene Third-Party Bibliotheken (ITK, VTK, OpenCV, …)
64-Bit und Multi-Threading Unterstützung
Verfügbar für Windows, Linux und Mac OS X
Kostenlose Version verfügbar (mit eingeschränktem Funktionsumfang)
Modulsuche
Datenvorschau
Viewer Fenster
Arbeitsbereich
Parameter Fenster
Scripting Konsole
Debug Konsole
Frank Heckel, Fraunhofer MEVIS, Email: [email protected]
1
Praktikum Computerassistierte Chirurgie, WS 2014/2015
Bildverarbeitung mit MeVisLab
Übungsaufgaben
Aufgabe 1: Starten Sie MeVisLab und machen Sie sich mit der Oberfläche vertraut. Erzeugen Sie
dann ein „LocalImage“ Modul. LocalImage lädt automatisch eine T1-gewichtete MR Aufnahme
eines Kopfes in reduzierter Auflösung. Klicken Sie auf den Ausgang des Moduls und sehen Sie sich
die Daten im „Output Inspector“ an (View > Views > Output Inspector). Klicken Sie hier auch auf
den Pfeil in der rechten oberen Ecke. Hier können Sie verschiedene Eigenschaften des Bildes
einsehen.
Wo finde ich die Module?
1. Über das Suchfeld in der Symbolleiste (Hinweis: Tippt man einfach los, wechselt MeVisLab
automatisch in das Suchfeld, sofern der Arbeitsbereich den Fokus hat)
2. Über den Menüeintrag „Modules“
3. Über das (optionale) Fenster „Module Search“ (View > Views > Module Search)
4. Über das (optionale) Fenster „Module Browser“ (View > Views > Module Browser)
Erzeugen Sie anschließend ein „View2D“ Module und verbinden Sie den Ausgang von LocalImage
mit dem Eingang von View2D.
Wie verbinde ich Module?
Klicke mit der linken Maustaste auf einen Ausgang eines Moduls, halte die Maustaste
gedrückt und bewege die Maus über einen (passenden) Eingang eines anderen Moduls. Lasse
die Maustaste dann los. Inkompatible Eingänge werden dabei von MeVisLab ausgeblendet.
Klicken Sie doppelt auf das Modul View2D um dessen Fenster zu öffnen und sehen Sie sich die
Daten genauer an.
Wie interagiere ich mit einem 2D Viewer?
Standardmäßig sind Maus und Tastatur wie folgt belegt:
Mittlere Maustaste / Rad – Schicht wechseln („slicen“)
Rechte Maustaste
– Helligkeit und Kontrast ändern („fenstern“)
Shift + mittlere Maustaste – Bild verschieben
Strg + mittlere Maustaste – Zoomen
Diese Belegung kann über das Modul „View2DExtensions“ (bzw. die darin verwendeten
Module) geändert werden.
Machen Sie sich abschließend mit den Einstellungen des Moduls View2D vertraut.
Wo finde ich die Einstellungen eines Viewers bzw. weitere Fenster eines Moduls?
Klicke mit der rechten Maustaste auf das Modul. Es öffnet sich ein Kontextmenü das unter
„Show Window“ alle verfügbaren Fenster auflistet. Das „Automatic Panel“ nimmt dabei eine
Sonderstellung ein, indem es einfach alle Parameter eines Moduls auflistet und somit auch
Zugriff auf „versteckte“ Einstellungen und Variablen erlaubt.
Aufgabe 2: Arbeiten Sie das Beispiel „Konturfilter“ aus Kapitel 4 des Handbuchs „Getting
Started – First Steps with MeVisLab“ (Help > Browse Help Pages > Using MeVisLab > Getting
Started) durch. Speichern Sie ihr Ergebnis (File > Save).
Frank Heckel, Fraunhofer MEVIS, Email: [email protected]
2
Praktikum Computerassistierte Chirurgie, WS 2014/2015
Bildverarbeitung mit MeVisLab
Aufgabe 3: Legen Sie ein neues MeVisLab Netzwerk an (File > New). Laden Sie den Datensatz
„$(DemoDataPath)/LungNodule.dcm“ mit dem Modul „LocalImage“ und sehen Sie sich das Bild
mit einem „View2D“ an. Erzeugen Sie nun die folgenden Module und machen Sie sich mit deren
Funktionsweise und Parametern vertraut (am besten in der hier vorgegebenen Reihenfolge):
„SoView2DMarkerEditor“, „SoView2DOverlay“ sowie „RegionGrowing“.
Wo finde ich Informationen zur Funktionsweise und Verwendung eines Moduls?
Jedes Modul in MeVisLab bringt ein Beispielnetzwerk mit, das dessen Verwendung zeigt. Das
Beispielnetzwerk kann man im Kontextmenü eines Moduls über den Eintrag „Show Example
Network“ öffnen. Manche Beispielnetzwerke enthalten ein „Comment“ Modul, das einem
die Verwendung erläutert. Zudem hat jedes Modul eine Hilfe, die man über den Eintrag
„Show Help“ öffnen kann.
Verbinden Sie die Module zu einem Netzwerk das es Ihnen erlaubt, den
Lungentumor im Zentrum des Datensatzes (siehe Abbildung) durch
Anklicken zu segmentieren sowie das Segmentierungsergebnis als
(transparente) Überlagerung darzustellen.
Messen Sie nun das Volumen des Tumors mit Hilfe des Moduls
„CalculateVolume“. Es sollte (je nach Parametrisierung und Klickpunkt)
zwischen 0.07 und 0.1ml liegen. Berechnen sie abschließend auch die
mittlere Dichte mittels des Moduls „ImageStatistics“. Achten Sie darauf
die Option „Use Mask“ zu aktivieren. Das Ergebnis sollte zwischen 800 und 900 liegen.
Aufgabe 4: Legen Sie ein neues MeVisLab Netzwerk an (File > New). Laden Sie einen beliebigen
Datensatz mit dem Modul „LocalImage“ und sehen Sie sich das Bild mit einem „View2D“ an.
Erzeugen Sie anschließend das Modul „PythonArithmetic“ und machen Sie sich mit dessen
Funktionsweise vertraut.
Implementieren Sie nun mit Hilfe des Moduls PythonArithmetic einen einfachen
schwellwertbasierten Segmentierungsalgorithmus, der ein Voxel des Ausgangsbildes auf 0 setzt,
wenn der Grauwert des Eingangsbildes kleiner als der vorgegebene Schwellwert ist und andernfalls
auf 1. Parametrisieren Sie das Module dazu wie folgt: „Output > Output Image Min/Max > Min
Voxel Value“ = 0, „Output > Output Image Min/Max > Max Voxel Value“ = 1, „Input > Number of
Inputs > Inputs“ = 1. Sie können diesen Code nutzen, der über alle Voxel des Bildes läuft:
Python Code zum Iterieren über ein Bild mit PythonArithmetic:
extent = in0.imageExtent()
for u in range(extent[5]):
for c in range(extent[4]):
for t in range(extent[3]):
for z in range(extent[2]):
for y in range(extent[1]):
for x in range(extent[0]):
# Zugriff auf ein Voxel mittels in0[u,c,t,z,y,x]
Drücken Sie „Update“ um die Berechnung zu starten. Vergleichen Sie ihr Ergebnis mit dem des
Moduls „Threshold“, z.B. mit Hilfe des Moduls „SynchroView2D“.
Frank Heckel, Fraunhofer MEVIS, Email: [email protected]
3
Praktikum Computerassistierte Chirurgie, WS 2014/2015
Bildverarbeitung mit MeVisLab
Häufig verwendete (Bildverarbeitungs-)Module
I/O
2D Viewer
Bildverarbeitung
Konturierung
Marker
Verschiedene
DicomQuery, DirectDicomImport, LoadAny, ImageLoad, ImageLoadMulti , ImageSave,
LocalImage, MLImageFormatLoad, MLImageFormatSave
OrthoView2D, SoView2DExtensions, SoView2DOverlay, SynchroView2D, View2D,
View2DExtensions
Arithmetic, Arithmethic0, Arithmetic1, Arithmetic2, BoundingBox, Bypass, Calculator,
CalculateVolume, ConnectedComponents, Convolution, FastMorphology, Histogram,
ImagePropertyConvert, ImageStatistics, Info, IntervalThreshold, Mask, MemoryCache,
MergeRegions, MERIT, MinMaxScan, Morphology, OrthoReformat3,
PythonArithmetic, Rank, Reformat, Resample3D, RegionGrowing, SubImage, Switch,
Threshold, itk*
CSOConvertTo3DMask, CSOConvertToImage, CSOFilter, CSOInfo, CSOIsoGenerator,
CSOLoad, CSOManager, CSOSave, SoCSO3DVis, SoCSODistancePolylineEditor,
SoCSOLiveWireEditor, SoCSOSplineEditor, SoCSOVisualizationSettings,
SoView2DCSOExtensibleEditor
So3DMarkerEditor, SoView2DMarkerEditor, XMarkerListContainer
BaseSwitch, BoolArithmetic, DicomTagBrowser, FieldBypass, LoadBase, MakeName,
RunPythonScript, SaveBase, StringListContainer, StringUtils, StylePalette
MeVisLab Tipps und Tricks










Alt+Dbl-Left-Mouse öffnet das Automatic Panel eines Moduls.
Shift+Dbl-Left-Mouse oder Middle-Mouse auf einem Makromodul öffnet das interne
Netzwerk in einem neuem Tab (Alternativ: Right-Mouse auf dem Modul und Auswahl von
„Show Internal Network“).
Enter öffnet das erste Fenster eines selektierten Moduls (Wie Dbl-Left-Mouse aber
nützlich um nach Modulinstanziierung durch die Modulsuche mit zweitem Enter gleich die
GUI zu öffnen)
Mittels Shift+Left-Mouse auf einem verbundenen Konnektor und dann Verschieben zu
einem neuen Konnektor lassen sich alle Verbindungen an diesem Konnektor auf einmal
verschieben.
Space hebt alle ausgewählten Module und die damit verbundenen Module hervor. Zieht
man dann noch am Rand eines Moduls mit der Maus nach außen, so öffnen sich Thumbs
der internen Netzwerke. Man kann in diese internen Netze durch einen Klick Left-Mouse
gelangen. Die Thumbs ziehen sich wieder zurück, wenn man bei gedrückter Space Taste in
ein Modul mit Left-Mouse klickt.
Um das gesamte Netzwerk zu verschieben einfach Strg drücken und mit der linken
Maustaste verschieben. Man kann auch die mittlere Maustaste zum Verschieben
verwenden.
Dbl-Left-Mouse im Netzwerkhintergrund positioniert alle Module mittig. Um einen
bestimmten Bereich in einem Netzwerk vergrößert und zentriert darzustellen, markiert man
diesen Bereich und führt Dbl-Left-Mouse auf den Hintergrund aus.
Hat man im Entwicklungsprozess jede Menge Viewer offen und erkennt sein Netzwerk
nicht mehr, dann können diese alle mit Strg+I verkleinert werden. Man findet die Viewer
danach in der linken unteren Ecke des Bildschirms, von wo sie aus mit jeweils einem
Doppelklick wieder vergrößert werden können.
Man kann ein (großes, unübersichtliches) Netzwerk nach einem Modul durchsuchen. Dazu
mit Strg+F in der rechten oberen Ecke des Netzwerktabs ein Suchfenster öffnen und dann
dort den Namen des Moduls eingeben/auswählen.
Hält man die Maus über einem Eingang oder Ausgang eines Moduls, so werden nach
kurzer Zeit Informationen zu diesem Anschluss angezeigt.
Frank Heckel, Fraunhofer MEVIS, Email: [email protected]
4
Praktikum Computerassistierte Chirurgie, WS 2014/2015








Bildverarbeitung mit MeVisLab
Unter „Edit > Preferences > Network Appearance“ können zusätzliche
Darstellungsoptionen aktiviert werden:
o Im Feld „Modules“ die Option „Show ML image state“ aktivieren. Dann wird über
farbige Konnektoren angezeigt, ob aktuelle Bilddaten fließen: grün für „up-todate“, gelb für „nicht-up-to-date“ und rot für „invalide“.
o Im Feld „Connector Details” die Option “Show connector detail info” auswählen
um für die gerade ausgewählten Module anzuzeigen, was die einzelnen
Konnektoren für eine Bedeutung haben, oder welches Bild angeschlossen ist.
o Im Feld „Network Rendering Style“ ist über die Option „Comic“ auch ein modernes
flaches Design für die Module auswählbar.
In einem „View2D“ Fenster können die Annotationen über die Taste a ein- und
ausgeschaltet werden. Mit der Taste i kann zentriert ein Informationsfenster ein- und
wieder ausgeblendet werden. Numblock-* ändert die Interpolationsmethode und macht so
die Voxel sichtbar. Für Rechner mit einem Ziffernblock lässt sich ein Bild zudem einfach
verschieben (Pfeiltasten) und zoomen (mit + und -). Über die Ziffer 5 erhält man wieder
die Standardansicht.
Um einen Screenshot eines Bildes aus einem Viewer zu erhalten, wählt man den Viewer aus
und drückt F11. Eine Voransicht aller Screenshots kann man sich über „View > Views >
Screenshot Gallery“ auf die Oberfläche von MeVisLab bringen.
Strg+2 nach einem MeVisLab-Start lädt das zuletzt offene Netzwerk (Alternativ: „File >
Open Most Recent File“).
Strg+K startet MeVisLab mit dem aktuellen Netzwerk neu (Alternativ: „File > Restart With
Current Networks“).
Über „View > Views > ScriptingAssistant“ wird ein Fenster in die MeVisLab-Oberfläche
integriert, in dem Aktionen auf dem Netzwerk (z.B. Ändern von Verbindungen, Setzen von
Parametern) in die zugehörigen Skript-Kommandos übersetzt werden.
L in der „Debug Output“ leert die Ausgaben.
Shortcut für das Menü „View > Views“: Right-Mouse auf den leeren Toolbar/Menübereich
Weiterführende Literatur
MeVisLab Homepage: http://www.mevislab.de
MeVisLab SDK Dokumentation:
http://www.mevislab.de/fileadmin/docs/current/MeVisLab/Resources/Documentation/Publish
MeVisLab Forum: http://forum.mevis.fraunhofer.de
MeVisLab Community Modules: http://mevislabmodules.sourceforge.net
Axel Newe, Dr. Wolfram Eßer, „Knipsen und Verstehen, Bildverarbeitungs-Anwendungen mit
MeVisLab, Teil 1“, c't 22/2014, S. 158ff, http://www.heise.de/ct/ausgabe/2014-22Bildverarbeitungs-Anwendungen-mit-MeVisLab-Teil-1-2406603.html
Axel Newe, Dr. Wolfram Eßer, „Unter die Haube geschaut, Bildverarbeitung mit MeVisLab, Teil 2“,
c't 23/2014, S. 146ff, http://www.heise.de/ct/ausgabe/2014-23-Bildverarbeitung-mit-MeVisLabTeil-2-2416402.html
Felix Ritter et al., „Medical Image Analysis: A visual approach”, IEEE Pulse, 2(6), 2011, S. 60–70,
http://dx.doi.org/10.1109/MPUL.2011.942929
Frank Heckel, Fraunhofer MEVIS, Email: [email protected]
5