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
© Copyright 2024 ExpyDoc