Technical Report 153 / 2004 Entwicklung eines 3D ... - Dkfz
Technical Report 153 / 2004 Entwicklung eines 3D ... - Dkfz
Technical Report 153 / 2004 Entwicklung eines 3D ... - Dkfz
Verwandeln Sie Ihre PDFs in ePaper und steigern Sie Ihre Umsätze!
Nutzen Sie SEO-optimierte ePaper, starke Backlinks und multimediale Inhalte, um Ihre Produkte professionell zu präsentieren und Ihre Reichweite signifikant zu maximieren.
mbi<br />
<strong>Technical</strong> <strong>Report</strong><br />
<strong>153</strong>/<strong>2004</strong><br />
<strong>Entwicklung</strong> <strong>eines</strong> <strong>3D</strong>-Visualisierungstools für medizinische Bilddaten<br />
-Redesign, Funktionserweiterung und Integration in das<br />
Teleradiologiesystem CHILI-<br />
Deutsches Krebsforschungszentrum Heidelberg<br />
Abteilung Medizinische und Biologische Informatik<br />
Christian Sonek<br />
28.01.<strong>2004</strong>
Inhaltsverzeichnis<br />
1 Einleitung 1<br />
1.1 Aufbau der Arbeit.................................................2<br />
2 Problembeschreibung 5<br />
2.1 Beschreibung des Workflows der Operationsplanung ................. 6<br />
2.1.1 Akteure der Leberoperationsplanung. .................................6<br />
2.1.2 Stationen der Leberoperationsplanung . ............................... 7<br />
3 Grundlagen 9<br />
3.1 Medizinische Grundlagen .......................................... 9<br />
3.1.1 Die Leber . .......................................................... 9<br />
3.1.2 Leberkrebs . ........................................................10<br />
3.1.3 Bildgebende Verfahren in der Medizin ............................... 11<br />
3.1.4 Medizinische Bildformate ........................................... 15<br />
3.1.5 PIC-Format ........................................................ 18<br />
3.1.6 Segmentierung ..................................................... 19<br />
3.2 Medizinische Bildverarbeitung. ....................................20<br />
3.2.1 Bildverarbeitungsoperationen........................................20<br />
3.3 Visualisierungstechniken . ......................................... 22<br />
3.3.1 Graphikprogrammierung ............................................ 22<br />
3.3.2 Volumendarstellung.................................................28<br />
3.3.3 Beschreibung der OpenGL Visualisierungs-Schnittstelle ............... 30<br />
3.3.4 Visualization Toolkit (VTK) ........................................ 32<br />
3.3.5 Die VTK Visualisierungs-Pipeline....................................33<br />
3.3.6 VRML.............................................................36<br />
3.4 Grundlagen der Informatik ........................................ 37<br />
3.4.1 Software-Engineering ............................................... 37<br />
i
Inhaltsverzeichnis<br />
3.4.2 Die Klassenbibliothek Qt............................................42<br />
4 Stand der Technik 45<br />
4.1 Der Organicer Prototyp .......................................... 45<br />
4.1.1 Die SceneHandler-Bibliothek ........................................ 45<br />
4.1.2 Einteilung <strong>eines</strong> Gefäßbaumes ....................................... 47<br />
4.1.3 Workflow Leberoperationsplanung . .................................. 49<br />
4.2 Andere Systeme. .................................................50<br />
4.3 Das Teleradiologiesystem CHILI...................................52<br />
4.3.1 Aufbau des Teleradiologisystems CHILI . ............................. 52<br />
5 Praktische Realisierung 55<br />
ii<br />
5.1 Ist-Analyse ...................................................... 55<br />
5.1.1 Datentransfer ...................................................... 55<br />
5.1.2 Bildverarbeitung....................................................56<br />
5.1.3 Programmstruktur..................................................56<br />
5.2 Soll-Konzept. ....................................................57<br />
5.2.1 Datentransfer ...................................................... 57<br />
5.2.2 Bildverarbeitung....................................................57<br />
5.2.3 Programmstruktur..................................................57<br />
5.2.4 Funktionserweiterung ............................................... 58<br />
5.3 Einsatz der Entwurfsmuster.......................................58<br />
5.3.1 Model-View-Controller..............................................58<br />
5.3.2 Strategiemuster .................................................... 59<br />
5.4 Datenhaltung .................................................... 60<br />
5.4.1 Die Datenelemente der Visualisierung................................60<br />
5.4.2 Zentrale Verwaltung der Daten......................................62<br />
5.4.3 Kapselung der I/O-Funktionalität in Klassen ......................... 63<br />
5.4.4 Das Dateiformat der Szenenbeschreibung . ........................... 65<br />
5.5 Aufbau der graphischen Benutzeroberfläche. .......................69<br />
5.6 Neugestaltung der Materialverwaltung.............................70<br />
5.6.1 Viewproperty Klasse................................................ 70<br />
5.6.2 DataListView ...................................................... 70
Inhaltsverzeichnis<br />
5.7 Berechnung der Distanz zwischen Tumor und Gefäßen ............. 73<br />
5.8 Exportieren von VRML-Szenen....................................75<br />
5.9 <strong>Entwicklung</strong> PlugIn-Adapterklasse.................................77<br />
5.9.1 Die Adapterklasse OrganicerPluginFrame ............................ 78<br />
5.9.2 Datenbankabfragen der Adapterklasse ............................... 81<br />
5.9.3 Die Imageklassen. ..................................................82<br />
5.9.4 Informationen über Schichtbilder .................................... 82<br />
6 Zusammenfassung der Diplomarbeit 89<br />
7 Ausblick 93<br />
7.1 Ablösung des Altsystems ......................................... 93<br />
7.1.1 Ausbau der Visualisierungsplattform CHILI. ..........................93<br />
7.2 Das Visualisierungsframework MITK .............................. 94<br />
7.3 Neue Einsatzgebiete des Organicers . .............................. 95<br />
7.4 Schlusswort......................................................95<br />
Tabellenverzeichnis 97<br />
A Listings 99<br />
A.1 Listing zum Aufbau <strong>eines</strong> VTK-Datasets...........................99<br />
A.2 Listing Mediator - Datenhaltung ................................. 100<br />
A.3 Update Mechanismus der Datenansicht .......................... 103<br />
A.4 Oberflächemodell erzeugen . ..................................... 104<br />
A.5 Datenbankabfrage der Adapterklasse . ............................ 106<br />
Literaturverzeichnis 109<br />
Abbildungsverzeichnis 111<br />
1.6 Glossar ......................................................... 114<br />
Index 117<br />
iii
Inhaltsverzeichnis<br />
iv
1 Einleitung<br />
Die fortschreitende technische <strong>Entwicklung</strong> und das Ziel, die interdisziplinäre Zusammenar-<br />
beit in der Medizin zu verbessern, stellt hohe Anforderungen an die verschiedenen medizi-<br />
nischen Berufsgruppen. Dies liegt auch an der steigenden Komplexität und Vielfalt medizi-<br />
nischen Wissens, durch den der Austausch von Informationen immer wichtiger wird. Dazu<br />
müssen Systeme entwickelt werden, die diesen Kommunikationsprozess ermöglichen und<br />
mit den informationserzeugenden Produkten zusammenarbeiten. Neben der Bereitstellung<br />
geeigneter Produkte in der apparativen Medizin, müssen aber auch die Arbeitsabläufe der<br />
beteiligten Gruppen optimiert werden. Die medizinische Bildverarbeitung hat dabei die Auf-<br />
gabe die Auswertung der medizinischen Bilddaten und ihre Verfügbarkeit zu verbessern.<br />
Bilder dienen in weiten Bereichen der Medizin als primäre Informationsquelle und daher<br />
sind viele Untersuchungsmethoden bildgebende Verfahren. Menschliche Organe und Ge-<br />
webe variieren in ihrem Erscheinungsbild und besitzen bei pathologischen Veränderungen<br />
unterschiedliche Ausprägungen. Deshalb ist es wichtig über Bilddaten Informationen zu er-<br />
halten, die der Diagnosefindung dienen und zur Planung und Durchführung medizinischer<br />
Maßnahmen beitragen.<br />
Mit Methoden der medizinischen Bildverarbeitung wird die Interpretation der Bilder un-<br />
terstützt bzw. verbessert. Medizinische Schichtbilder, wie sie bei der Computertomogra-<br />
phie (CT) oder der Magnetresonanztomographie (MR) erzeugt werden, bieten eine zweidi-<br />
mensionale Ansicht <strong>eines</strong> dreidimensionalen Objektes. Um aus diesen Daten Informationen<br />
(z.b. Lage, Volumen, Form) zu erhalten benötigt ein Arzt ein gut ausgeprägtes räumli-<br />
ches Vorstellungsvermögen. Rechnergestützte Verfahren erleichtern die Auswertung dieser<br />
Bilddaten durch die Bereitstellung geeigneter Visualisierungsmethoden, die als Ergebnisse<br />
<strong>3D</strong>-Rekonstuktionen bieten.<br />
Im Mittelpunkt dieser Diplomarbeit steht ein Prototyp <strong>eines</strong> <strong>3D</strong>-Visualisierungstools, der<br />
Organicer, mit dem Operationsplanungen durchgeführt werden. Diese Operationsplanungen<br />
sollen nach einem Redesign und einer Funktionserweiterung innerhalb <strong>eines</strong> Teleradiologie-<br />
1
KAPITEL 1. EINLEITUNG<br />
systems durchgeführt werden. Dabei soll ein Softwareprodukt einstehen, dass sich durch<br />
eine modulare, erweiterbare und flexible Struktur auszeichnet.<br />
1.1 Aufbau der Arbeit<br />
Diese Diplomarbeit ist in verschiedene Kapitel unterteilt. Die einzelnen Kapitel bauen aufein-<br />
ander auf und geben nach der Problembeschreibung, einen Überblick über die zum weiteren<br />
Verständnis benötigten Grundlagen, bevor die Realisierungsmaßnahmen vorgestellt werden.<br />
◮ Die Problembeschreibung in Kapitel 2 gibt einen Überblick über das Einsatzgebiet<br />
des Organicers und den, an einer Operationsplanung, beteiligten medizinischen Fach-<br />
gruppen.<br />
◮ Zum Verständnis der Realisierungsmaßnahmen dienen die, in Kapitel 3 in Abschnitte<br />
aufgeteilten, Grundlagen. Aus den medizinischen Grundlagen ergibt sich die spezielle<br />
Funktionalität des Organicers. Danach werden Verfahren vorgestellt, mit denen me-<br />
dizinische Bilder erzeugt, verarbeitet und gespeichert werden können. Der Visualisie-<br />
rungsabschnitt zeigt wie diese Bilder mit verschiedenen Methoden dargestellt werden<br />
können. Der nächste Abschnitt stellt allgemeine Prinzipien des Softwareengineering<br />
vor, die durch den Einsatz von Entwurfsmustern zu flexiblen, modularen und erweiter-<br />
baren Programmstrukturen umgesetzt werden können. Am Ende dieses Kapitels wird<br />
die Klassenbibliothek Qt beschrieben, die die Implementierung des Organicers als<br />
plattformunabhängiges Programm ermöglicht.<br />
◮ Die beiden Programme Organicer und das Teleradiologiesystem CHILI bilden die Grund-<br />
lage der Realisierungsmaßnahmen. Deshalb werden diese beiden eigenständigen Pro-<br />
gramme im Kapitel 4 vorgestellt. Darüber hinaus wird der Workflow, der Operati-<br />
onsplanungen beschrieben und in einem weiteren Abschnitt mit anderen Systemen<br />
verglichen.<br />
◮ Das Kapitel 5 listet in einer Ist-Analyse zuerst die Mängel des Organicers auf, bevor<br />
2<br />
es im Soll-Konzept die Realisierungsmaßnahmen beschreibt. In einzelnen Abschnit-<br />
ten werden die entwickelten Konzepte der Datenhaltung und Materialverwaltung, die<br />
Funktionserweiterungen der Distanzmessung und die Konvertierung von Szenen in<br />
das internetfähige VRML-Format beschrieben. Der letzte Abschnitt zeigt, wie mit der
1.1. AUFBAU DER ARBEIT<br />
<strong>Entwicklung</strong> einer PlugIn-Schnittstelle, die Funktionalität des Organicers im Telera-<br />
diologiesystem zur Verfügung gestellt wird.<br />
◮ In Kapitel 6 werden in einer Zusammenfassung die Ergebnisse diskutiert, bevor ein<br />
Ausblick in Kapitel 7 mit der Beschreibung der geplanten bzw. möglichen Entwick-<br />
lungen, diese Arbeit abschließt.<br />
3
KAPITEL 1. EINLEITUNG<br />
4
2 Problembeschreibung<br />
In der Abteilung Medizinische und Biologische Informatik (MBI) des Deutschen Krebsfor-<br />
schungszentrum (DKFZ) in Heidelberg wurde der Prototyp <strong>eines</strong> <strong>3D</strong>-Visualisierungstools<br />
für Segmentierungsergenisse, der OrganNicer, entwickelt. Dieses Tool wurde für den Ein-<br />
satz in der Planung von Leberoperationen konzipiert, kann aber auch in anderen Bereichen<br />
wie Nieren-, Herz- und Lungenchirurgie eingesetzt werden.<br />
Die ständige Weiterentwicklung in der medizinischen Bildverarbeitung und der kliniknahe<br />
Einsatz stellen an ein Softwareprodukt hohe Anforderungen. Um diese zu Erfüllen muß das<br />
Softwaredesign insbesondere den Qualitätskriterien Benutzerfreundlichkeit, Erweiterbarkeit<br />
und Wiederverwendbarkeit genügen. Dies erfordert eine systematische und ingenieursmäßige<br />
Software-<strong>Entwicklung</strong>. Eine objektorientierte Programmmierung stellt dazu die geeigneten<br />
Methoden und Werkzeuge zur Verfügung und kann durch den Einsatz von Entwurfsmustern<br />
(Kapitel 3.4.1), aus den Erfahrungen in der Softwareentwicklung profitieren.<br />
Zur Optimierung des Workflows einer Operationsplanung muß das Zusammenspiel der zur<br />
Bildverarbeitung eingesetzten Tools (Abschnitt 2.4) und der Austausch der gewonnenen<br />
Bilddaten 2.1.2 verbessert werden.<br />
Das Teleradiologiesystem CHILI (siehe )bietet hier eine geeignete Plattform, da es<br />
einen sicheren Datentransfer und durch seine Datenbankanbindung die Verwaltung der Bild-<br />
daten ermöglicht. Darüberhinaus verfügt es über ein ein PlugIn-Konzept, dass die Integration<br />
<strong>eines</strong> Segmentierungsprogrammes erlaubt und damit die zur Visualisierung benötigten Seg-<br />
mentierungsergebnisse anbieten kann. Um diese allerdings effektiv nutzen zu können, muss<br />
auch das Visualisierungstool als PlugIn integriert werden.<br />
Das Internet, ist die am weitesten verbreitete Kommunikationsplattform. Deshalb arbeitet<br />
die Abteilung MBI des DKFZ an einem webbasierten System zum Austausch von Infor-<br />
mationen, mit dem auch die Kommunikation zwischen der Radiologie und Chirurgie der<br />
Universitätsklinik Heidelberg und der MBI-Abteilung verbessert werden soll.<br />
5
KAPITEL 2. PROBLEMBESCHREIBUNG<br />
2.1 Beschreibung des Workflows der Operationsplanung<br />
2.1.1 Akteure der Leberoperationsplanung<br />
Die Patienten werden in der Chirurgie angemeldet und nach einer Aufnahmeuntersuchung,<br />
zur Bilderzeugung in die Radiologie geschickt. Der Radiologe schickt die gewonnenen Bildda-<br />
ten mit dem Teleradiologiesystem CHILI zur Bearbeitung ins DKFZ. Nach der Aufbereitung<br />
der Bilder durch einen Mitarbeiter des DKFZ, werden die Ergebnisse durch den Radiologen<br />
begutachtet und bei einer positiven Validierung freigegeben.<br />
6<br />
Chirurg<br />
DKFZ-<br />
Mitarbeiter<br />
Patient aufnehmen<br />
Bilder erzeugen<br />
Bilder versenden<br />
Bilder verarbeiten<br />
<strong>3D</strong>-Rekonstrukionen<br />
validieren<br />
<strong>3D</strong>-Rekonstruktionen<br />
präsentieren<br />
<strong>3D</strong>-Rekonstruktionen<br />
interpretieren<br />
Abbildung 2.1: Anwendungsfälle<br />
Operationsplanung<br />
Radiologe<br />
Der DKFZ-Mitarbeiter präsentiert die<br />
<strong>3D</strong>-Rekonstruktionen bei einer Bespre-<br />
chung dem Radiologen und Chirurgen,<br />
welche diese <strong>3D</strong>-Modelle interpretieren<br />
und als Unterstützung der Diagnosefin-<br />
dung und Therapieplanung nutzen. Bei<br />
dieser Besprechung wird auch entschie-<br />
den, ob der DKFZ-Mitarbeiter die <strong>3D</strong>-<br />
Visualisierungen während der Operation<br />
zur Unterstützung des chirurgischen Ein-<br />
griffs präsentieren soll.
2.1. BESCHREIBUNG DES WORKFLOWS DER OPERATIONSPLANUNG<br />
Die Abbildung 2.2 zeigt den Zeitverlauf in den die beschriebenen Anwendungsfälle einge-<br />
ordnet sind. Durch die Anhäufung der Anwendungsfälle am 1. Tag wird deutlich, wie wichtig<br />
ein kurzer Zeitaufwand bei der Durchführung einer <strong>3D</strong>-Rekonstruktion, für die Integration<br />
des Organicers in den klinischen Alltag ist.<br />
Patientenanmeldung<br />
Bilderzeugung<br />
Bildtransfer<br />
Bildsegmentierung<br />
Segmentierungsergenisse<br />
validieren<br />
Volumen auswerten<br />
validieren<br />
<strong>3D</strong>-Rekonstruktion<br />
erstellen<br />
Operation<br />
1. Tag 2. Tag<br />
Abbildung 2.2: Zeitplan der Leberoperationsplanung<br />
2.1.2 Stationen der Leberoperationsplanung<br />
Mini<br />
Pacs<br />
Radiologie MBI-Abteilung<br />
CHILI<br />
Firewall<br />
Firewall<br />
CHILI<br />
CHILI<br />
DB<br />
Abbildung 2.3: Datenaustausch<br />
Operationsplaung<br />
Lokaler<br />
Fileserver<br />
Die Abbildung 2.3 zeigt den Weg der Bilddaten bei einer Operationsplanung. Ausgangs-<br />
punkt ist ein bilderzeugendes Gerät in der Radiologie, das die gewonnenen Bilder in einem<br />
Mini-Pacs speichert. Die Radiologie verfügt über ein CHILI-Teleradiologiesystem, mit dem<br />
die Daten zum CHILI-Server der MBI-Abteilung transferiert werden und in der dortigen<br />
CHILI-Datenbank gespeichert werden.<br />
Laptop<br />
7
KAPITEL 2. PROBLEMBESCHREIBUNG<br />
8<br />
Daten empfangen und speichern<br />
Daten segmentieren<br />
Gefäßbäume segmentieren<br />
Gefäßbäume bearbeiten<br />
Lebersegmente berechnen<br />
Oberflächenmodelle erstellen<br />
<strong>3D</strong>-Szene darstellen<br />
Abbildung 2.4: Aktivitäten der<br />
Operationsplanung<br />
Der Workflow der Operationsplanung beginnt mit<br />
dem Laden <strong>eines</strong> Segmentierungs-PlugIns, im Te-<br />
leradiologiesystem CHILI. Nach der Auswahl ei-<br />
ner Serie, wird eine zweite Serie angelegt, in der<br />
die Segmentierungsergebnisse, nach der Bearbei-<br />
tung gespeichert werden. Um die Daten weiter<br />
bearbeiten zu können, müssen diese auf einen lo-<br />
kalen Fileserver exportiert werden. Zur Segmen-<br />
tierung der Gefäßbäume wird mit einem spezi-<br />
ellen Tool durchgeführt und bildet die Grundla-<br />
ge für die nachfolgenden Aktivitäten. Nach dem<br />
Abspeichern, der erhaltenen Ergebnisse in einem,<br />
für diese Zwecke bestimmten Dateiformat, kann<br />
der Organicer diese Datei laden. Nach dem Laden<br />
<strong>eines</strong> neuen Gefäßbaumes wird dieser einheitlich<br />
dargestellt und muss in verschiedene Gefäßberei-<br />
che (portal,venös,arteriell) eingeteilt werden. Bei<br />
der weiteren Einteilung werden die Gefäßberei-<br />
che in Äste aufgeteilt, die jeweils autonome Ver-<br />
sorgungsgebiete repräsentieren. Nach der Eintei-<br />
lung in autonome Versorgungsgebiete, kann mit<br />
einem speziellen Tool eine Einteilung der Leber in<br />
Segmente durchgeführt werden. Diese Segmen-<br />
te werden durch ein PIC-Volumen repräsentiert<br />
(siehe Kapitel 3.1.5) und können jetzt in STL-<br />
Oberflächenmodelle umgewandelt werden. Erst<br />
jetzt sind alle Elemente, die zur Darstellung einer<br />
Szene im Organicer benötigt werden, vorhanden<br />
und können geladen und visualisiert werden.
3.1 Medizinische Grundlagen<br />
3.1.1 Die Leber<br />
Anatomie der Leber<br />
3 Grundlagen<br />
Da der Anatomische Aufbau der Leber und insbesondere der Verlauf der Gefäße, für eine<br />
Leberoperation von zentraler Bedeutung sind, gibt dieser Abschnitt einen Überblick über<br />
die für eine Operationsplanung wichtigen Strukturen.<br />
Die Leber ist das zentrale Stoffwechselorgan und mit etwa 1,5 kg, die größte Drüse des<br />
menschlichen Körpers. Sie liegt größtenteils im rechten Oberbauch und ihre konvexe Ober-<br />
fläche ist mit dem Zwerchfell verwachsen.<br />
Funktionen der Leber<br />
Die wichtigsten Aufgaben der Leber sind nach :<br />
• Die Produktion von Galle zur Fettverdauung<br />
• Die Ausscheidung von Bilirubin und Toxinen<br />
• Ihre zentrale Rolle im Kohlehydrat-, Lipid-, Eiweiß- und Hormonstoffwechsel<br />
Die Leber wird in in einen größeren rechten (Lobus dexter) und einen kleineren<br />
linken (Lobus sinister) Lappen unterteilt, deren Trennungslinie nicht durch das Verzwei-<br />
gungsmuster der Lebergefäße bestimmt wird.<br />
Die Pfortader führt der Leber nicht nur das venöse Blut mit aus dem Darm resorbierten<br />
Substanzen zu, sondern bestimmt auch die in Abschnitt 3.1.1 beschriebene Einteilung der<br />
Leber. Durch die Leberaterie wird der Leber sauerstoffreiches Blut zugeführt. Diese beiden<br />
Gefäße zweigen sich solange auf, bis sie auf mikroskopischer Ebene, den Leberläppchen<br />
Blut zuführen. Dabei verläuft im Normalfall die Arterie über weite Strecken entlang der<br />
Pfortader. In den Leberläppchen wird nach der Durchführung der Leberfunktionen, das Blut<br />
9
KAPITEL 3. GRUNDLAGEN<br />
gesammelt und über die drei großen Lebervenen (Vv. hepaticae), in die untere Hohlvene<br />
(Vena cava inferior) abgeleitet.<br />
Segmenteineilung der Leber<br />
Lebervenen<br />
Gallenblase<br />
Gallengang<br />
Pfortader<br />
Hohlvene<br />
Leberarterie<br />
Abbildung 3.1: Segmenteinteilung der Leber nach Couinaud (aus )<br />
Die Abbildung 3.1 zeigt die sich durch die Verzweigungsstruktur der Pfortader ergebende,<br />
Segmenteinteilung der Leber. Jedes dieser Segmente besitzt eine eigene Blutversorgung und<br />
bildet eine autonome Einheit. Auch die Venen teilen die Leber in unabhängige Gebiete auf.<br />
3.1.2 Leberkrebs<br />
Lebertumore kann man in verschiedene Arten aufteilen (nach ):<br />
◮ Benigne Tumore sind gutartige Blutgefäßtumore<br />
◮ Primäre maligne Lebertumore sind bösartige Tumore die ohne Einfluss anderer Tumore<br />
10<br />
innerhalb der Leber entstehen. Das Leberzellkarzinom (HCC) ist mit einem Anteil von<br />
90% der wichtigste Vertreter dieser Art. Am Häufigsten tritt diese Art in afrikanischen<br />
Ländern südlich der Sahara (bei etwa 150 von 100.000 Menschen) auf, während sie in<br />
Europa und Nordamerika deutlich seltener (1 bis 4 von 100.000 Menschen) vorkommt.
3.1. MEDIZINISCHE GRUNDLAGEN<br />
◮ Sekundäre maligne Lebertumore enstehen als Metastasen primärer Karzinome anderer<br />
Körperteile. Die Primären Tumore sind dabei häufig im Darm, der Gallenblase oder<br />
in der Bauchspeicheldrüse angesiedelt.<br />
3.1.3 Bildgebende Verfahren in der Medizin<br />
In diesem Abschnitt werden die wichtigsten Verfahren der medizinischen Bildgewinnung vor-<br />
gestellt. Ein Bildaufnahmegerät mit seinen Komponenten wird in der Radiologie als Modali-<br />
tät bezeichnet. Diese nutzen zur Bildgewinnung die Wechselwirkung der Körpersubstanzen<br />
mit ionisierenden Strahlen, Magnetfeldern oder Ultraschallwellen aus. Die in diesem Ab-<br />
schnitt vorgestellten Modalitäten stellen die erzeugten Bilddaten zur Diagnostik und digita-<br />
len Weiterverarbeitung zur Verfügung. Dabei unterscheiden sich die von den verschiedenen<br />
Bildaufnahmegeräte erzeugten Bilder in Auflösung, Farbtiefe und Interpretation.<br />
Computertomographie<br />
Die Computertomographie ist eine computergestützte Röntgenuntersuchung, die den<br />
menschlichen Körper in Querschnittbildern dargestellt. Dazu werden Röntgenstrahlen er-<br />
zeugt, die sich beim Durchdringen des Körpers, proportional zur Dichte des Gewebes, ab-<br />
schwächen.<br />
Abbildung 3.2: Dichteskala nach Hounsfield<br />
11
KAPITEL 3. GRUNDLAGEN<br />
Zur Gewinnung <strong>eines</strong> Bildes wird der Körper in kleine Volumenelemente aufgeteilt, für die<br />
ein Computer Abschwächungswerte berechnet und anschließend aus den Ergebnissen ein<br />
Schichtbild aufbaut.<br />
Die in Abbildung 3.2 dargestellte Skala zeigt die Zuordnung der Dichtewerte, zu den einzel-<br />
nen Organen, nach Hounsfield. Für jedes Volumenelement (Voxel) wird ein Intensitätswert<br />
errechnet, der den Schwächungskoeffizienten des Volumenelementes gegenüber der ver-<br />
wendeten Röntgenstrahlung charakterisiert (siehe ). Die erhaltenen Ergebnisse<br />
werden relativ zur Dichte von destilliertem Wasser angegeben. Zur Bilderzeugung werden<br />
den Schwächungskoeffizienten Graustufenwerte zugeordnet.<br />
Röntgenröhre<br />
Patient<br />
Detektoren<br />
Abbildung 3.3: Schema Computertomographie<br />
(Quelle: )<br />
Die Abbildung 3.3 zeigt schematisch die<br />
Funktionsweise eine CT-Gerätes. Dabei<br />
rotiert eine Röntgenröhre um den Körper<br />
des Patienten und erzeugt viele Einzelauf-<br />
nahmen, aus denen ein zweidimensiona-<br />
len Einzelbild berechnet werden kann. Der<br />
Tisch auf dem der Patient liegt wird wäh-<br />
rend der Aufnahme in Längsrichtung ver-<br />
schoben , wodurch der Reihe nach Quer-<br />
schnittbilder der untersuchten Region an-<br />
gefertigt werden.<br />
Die CT-Untesuchung im Rahmen einer<br />
Leberoperationsplanung kann man in drei<br />
Phasen unterteilen:<br />
1. In der nativen Phase wird eine Aufnahme der Anatomie der Leber ohne Kontrastmittel<br />
gemacht.<br />
2. Das Kontrastmittel gelangt mit dem Blut über die Venen zu den Arterien und verstärkt<br />
in der arteriellen Phase dort den Kontrast.<br />
3. Nach einer intravenösen Injektion von Kontrastmittel reichert sich das Kontrastmittel<br />
in stark mit Blut versorgten Bereichen, wie Gefäßen und Tumoren, an. In der venösen<br />
Phase sind dabei die Lebervenen gut zu erkennen.<br />
Die Bilder haben meist eine Auflösung von 512x512 Pixel mit 12 Bit Graustufen, so dass<br />
sich eine Größe von 512 KB ergibt. Die Anzahl der Einzelbilder einer CT-Serie richtet sich<br />
12
3.1. MEDIZINISCHE GRUNDLAGEN<br />
nach Größe des untersuchten Organs und dem gewählten Schichtabstand der Bilder.<br />
Magnetresonanztomographie (MRT)<br />
Die Magnetresonanztomographie ist ein indirektes Verfahren der Bilderzeugung, bei dem<br />
Atome, durch ein starkes Magnetfeld und Hochfrequenzimpulse (Radiowellen), abgelenkt<br />
werden und der Rückkehrimpuls zur Bilderzeugung genutzt. Dabei handelt es sich um Atom-<br />
kerne mit einen Eigendrehimpuls, womit sie ein magnetisches Dipolmoment besitzen. Für die<br />
medizinische Bildgebung interessant ist vor allem das Wasserstoffatom, da dieses sehr häufig<br />
in gebundener Form im Gewebe vorkommt. Beim Anlegen <strong>eines</strong> starken Magnetfeldes rich-<br />
ten sich Atome mit einem magnetischen Dipolmoment entlang der Hauptmagnetfeldachse<br />
aus und begeben sich auf eine Kreisbahn um diese Achse. Dabei können die Atome in einem<br />
energiearmen (parallelen) oder in einem energiereichen (antiparallelen) Zustand vorliegen.<br />
Nach dem Anlegen starker Hochfrequenzimpulse kann man zwei Phänome beobachten:<br />
◮ Durch die Überführung einiger Atome vom energieärmeren in den energiereichen Zu-<br />
stand wird die Magnetisierung längs der Haupmagnetfeldachse reduziert.<br />
◮ Alle Atome auf ihrer Kreisbahn um die Hauptmagnetachse werden synchronisiert. Dabei<br />
ensteht ein quer zur Haupmagnetfeldachse liegendes Magnetfeld.<br />
Nach dem Aufheben des Hochfrequenzsignals wird mit zwei Zeitkonstanten die Rückkehr<br />
zum Ausgangszustand beschrieben. Die T1-Konstante beschreibt dabei die Geschwindigkeit<br />
der Wiederzunahme der Längsmagnetisierung, während die T2-Konstante die Abnahme der<br />
Quermagnetisierung festhält. Diese Relaxationszeiten sind unveränderliche Naturkonstan-<br />
ten und können mit Empfangsspulen gemessen und zur Differenzierung der verschiedenen<br />
Gewebearten genutzt werden.<br />
Zur Bilderzeugung müssen diese Phänomene durch Anlegen ortsabhängiger Magnetfelder<br />
einzelnen Bildpunkten durch Graustufen zugeordnet werden. Durch die MRT kann man<br />
den medizinisch relevanten Gewebearten charakteristische Wertebereiche zuordnen, die sich<br />
hauptsächlich aus der chemischen Zusammensetzung des Gewebes ergeben. Damit können<br />
gegenüber der CT oder dem Ultraschall auch Gewebe mit gleicher Dichte unterschieden<br />
werden.<br />
Eine ausführliche Beschreibung der physikalischen Eigenschaften der MRT findet sich bei-<br />
spielsweise in oder .<br />
13
KAPITEL 3. GRUNDLAGEN<br />
Axial<br />
Sagital<br />
Abbildung 3.4: Schichteinstellung MRT<br />
Coronar<br />
Radiologische Untersuchung von Gefäßen<br />
Ein weiterer Vorteil der MRT ist in der Ab-<br />
bildung 3.4 abgebildet. Durch die Mög-<br />
lichkeit Schnittebenen in frei wählbarer<br />
Richtung anfertigen zu können, ist es so-<br />
gar möglich das Rückenmark in seiner<br />
Längsausdehnung darzustellen.<br />
Die Bildgröße <strong>eines</strong> mit der MRT er-<br />
zeugten Graustufenbildes beträgt meist<br />
512x512 Pixel mit 12 Bit Graustufentie-<br />
Es gibt in der Medizin viele Bereiche, in denen die Untersuchung der Blutversorgung von<br />
Organen oder Körperteilen eine zentrale Bedeutung besitzt. Den Kardiologen interessiert<br />
z.B. die Durchblutung der Herzkranzgefäße und der Neurologe möchte nach einem Schlag-<br />
anfall wissen, welche Teile des Gehirns nicht mehr mit Blut versorgt werden. Dabei können<br />
die benötigten Bilddaten mit unterschiedlichen Verfahren aufgenommen werden.<br />
14<br />
• Bei der konventionellen Angiographie wird dem Patienten ein strahlensabsorbierendes<br />
Kontrastmittel verabreicht, wodurch die Gefäße bei einer Röntgenuntersuchung durch<br />
einen erhöhten Kontrast sichtbar werden.<br />
• Mit der computertomographischen Angiographie (CTA) kann man Gefäße dreidimen-<br />
sional darstellen. Dabei ist es schwierig, den richtigen Zeitpunkt zum Start einer<br />
solchen Untersuchung zu bestimmen, da der Zeitpunkt, in dem das Kontrastmittel<br />
die interessanten Gewebe passiert, nicht exakt vorhersehbar ist.<br />
• Durch die Magnetresonanzangiographie (MRA) ist es möglich physiologische Bewe-<br />
gungen innerhalb der Gefäße aufzunehmen. Die MRA nutzt den Blutfluss, um sowohl<br />
fe.
Ultraschall<br />
3.1. MEDIZINISCHE GRUNDLAGEN<br />
morphologische als auch quantitative Darstellungen der vaskulären Anatomie aufzu-<br />
nehmen ().<br />
Schallkopf Bauchhaut<br />
Leber<br />
Signal/Echo<br />
Abbildung 3.5: Schema Ultraschall<br />
Die Ultraschalldiagnose ist das bildgeben-<br />
de Verfahren mit der geringsten Belastung<br />
für den Patienten und gilt als Basisuntersu-<br />
chung für Erkrankungen der abdominalen<br />
Organe. Sie ermöglicht bei einer Untersu-<br />
chung der Leber keine sichere Identifizie-<br />
rung der gefundenen Strukturen. Bei der<br />
Sonographie sendet ein Schallkopf Schall-<br />
wellen aus, die durch das Anlegen <strong>eines</strong><br />
Stromes erzeugt werden und gewebespezifisch absorbiert, gebrochen, gestreut oder reflek-<br />
tiert werden. Aus den Reflektionen ergibt sich ein Diese Schallwellen werden durch Anlegen<br />
<strong>eines</strong> Stromes an Kristalle erzeugt. Daraus ergibt sich ein Schwächungsbild mit sehr weichen<br />
verschwommenen Konturen. Nach der Überlagerung mehrerer solcher, in gleicher Ausrich-<br />
tung erfasster Bilder, erhält man ein Schnittbild mit schärferen Konturen. Ultraschallbilder<br />
besitzen üblicherweise eine Farbtiefe von 8 Bit bei unterschiedlicher Grösse.<br />
3.1.4 Medizinische Bildformate<br />
Das DICOM Informationsmodell<br />
Das DICOM Informationsmodell definiert die Struktur und Organisation der Kommunikation<br />
mit medizinischen Bilddaten. Dabei werden Dienstleistungen festgelegt, die den Umgang mit<br />
den verschiedenen Informationsobjekten (siehe Abschnitt 3.1.1) organisieren.<br />
<strong>Entwicklung</strong>sgeschichte<br />
Der Austausch von medizinischen Bilddaten ist nur möglich, wenn diese auch einem allge-<br />
meinen Standard genügen, sonst sind aufwendige Konvertierungsverfahren notwendig, um<br />
sie an das jeweilige Umfeld anzupassen. Das American College of Radiology (ACR) und<br />
die National Electrical Manufactures Association (NEMA) arbeiteten seit 1983 an einem<br />
ACR-NEMA-Standard, der dieses Problem lösen sollte. Darauf aufbauend wurde 1993 der<br />
15
KAPITEL 3. GRUNDLAGEN<br />
DICOM-Standard als eine herstellerunabhängige Kommunikationsplattform für medizinische<br />
Bildinformationen vorgestellt (siehe ).<br />
Das DICOM Objektmodell<br />
Die DICOM-Datenstrukturen basieren auf einem objektorientierten Informationsmodell, mit<br />
dem die Objekte der realen Welt mit ihren spezifischen Eigenschaften und Funktionen mo-<br />
delliert werden.<br />
Patient<br />
Instance UID<br />
Name<br />
1<br />
1-n<br />
Studie<br />
Instance UID<br />
Modalität<br />
1<br />
1-n<br />
Serie<br />
Instance UID<br />
Beschreibung<br />
1<br />
1-n<br />
CT-Bild<br />
Instance UID<br />
Pixeldaten<br />
Abb. 3.6: Objektdiagramm Dicom<br />
Aufbau der Informationsobjekte<br />
� Attribute und Attributwerte<br />
16<br />
Attribut Attributwert<br />
Name Mustermann<br />
Geburtsdatum 1965-23-03<br />
Gechlecht männlich<br />
Tabelle 3.1: Patientenobjekt<br />
Der objektorientierte Aufbau ermöglicht es, den<br />
Standard durch Veränderungen und Erweiterungen<br />
an neue Anforderungen anzupassen. Das Diagramm<br />
3.1.1 zeigt die aus 4 Ebenen bestehende DICOM-<br />
Struktur : Patient - Studie - Serie - Bild<br />
Eine Studie repräsentiert eine Untersuchung, die in<br />
einzelne Serien unterteilt ist. Bei der Leberopera-<br />
tionsplanung entspricht eine Studie einer Sitzung<br />
beim Radiologen, bei der verschiedene Serien auf-<br />
genommen werden können ( siehe Abschnitt 3.1.3).<br />
Eine Serie beschreibt mit ihren CT-Bildern eine be-<br />
stimmte Aufnahmephase innerhalb einer Untersu-<br />
chung.<br />
Attribute dienen zur Beschreibung von Infor-<br />
mationsobjekten und werden in Gruppen mit<br />
einer gemeinsamen Gruppennummer zusam-<br />
mengefasst. In der Tabelle 3.1 sind beispiel-<br />
haft einige Attribute des Objektes Patient mit<br />
Attributwerten aufgelistet.
� Tags<br />
3.1. MEDIZINISCHE GRUNDLAGEN<br />
Attribut Value Representation Gruppen-Tag Element-Tag<br />
Name PN 0010 0030<br />
Geburtsdatum DA 0010 0040<br />
Modalität CS 0008 0060<br />
Pixeldaten OW 7FE0 0010<br />
Tabelle 3.7: Beispieltags<br />
Zur eindeutigen Identifikation <strong>eines</strong> Attributes wird ein Tag, der aus zwei 16-Bit-Zahlen<br />
besteht, benutzt. Dabei legt die erste Zahl die Zugehörigkeit zu einer bestimmten Gruppe<br />
fest und die zweite Zahl identifiziert das Element innerhalb dieser Gruppe. Zusammen sind<br />
diese Werte mit ihrem Darstellungsformat (Value Representation) in einem DataDictionary<br />
definiert.<br />
� Arten von Informationsobjekten<br />
• Normalized Objekte beinhalten nur Attribute aus einer einzigen Gruppe.<br />
Beispiel : Patienteninformation<br />
• Composite Objekte enthalten Attribute aus verschiedenen Objektklassen.<br />
Beispiel : CT-Bild (“Computed Tomography Information Object Class”) enthält Infor-<br />
mationen aus den Gruppen Studie, Serie und Patient.<br />
� Unique Identifier<br />
Beschreibung UID<br />
CT Image Storage 1.2.840.5.1.4.1.1.4<br />
Studieninformationen 1.2.840.5.1.4.1.2.5<br />
Tabelle 3.2: Instance UID<br />
DICOM ordnet jeder Objektinstanz<br />
einen eindeutigen Indetifier zu. So<br />
ist es zum Beispiel möglich, von<br />
einem CT-Bild auf den Herstel-<br />
ler des Aufnahmegerätes zu schlie-<br />
ßen.<br />
17
KAPITEL 3. GRUNDLAGEN<br />
3.1.5 PIC-Format<br />
Das PIC-Format ist ein in der Abteilung MBI-Abteilung des Deutschen Krebsforschungszen-<br />
trum (DKFZ) entwickeltes Bildformat. Es dient als herstellerunabhängiges Format zum Spei-<br />
chern und Versenden von medizinischen Bilddaten. Dabei kann dieses Format als Container<br />
für andere Bildformate dienen. Durch die Möglichkeit Einzelschichten zusammenzusetzen,<br />
ist es mit dem PIC-Format möglich auch Bildvolumen darzustellen.<br />
Aufbau des Datenformates<br />
Das Pic-Format besteht aus drei Teilen:<br />
• Der Header enthält veschiedene Informationen über die Pixeldaten ( Datentyp, Di-<br />
mension, Auflösung etc. )<br />
• Tag Fields ermöglichen das Speichern von Zusatzinformationen die eine Benennung<br />
und einen Wert besitzen. Bei der Arbeit mit DICOM-Bildern findet sich hier ein Ver-<br />
weis auf den DICOM-Header. Ein Tag <strong>eines</strong> Segmentierungsergebnisses ist der Image<br />
Type, dem der Wert“Image ,Segmentation”zugeordnet wird und der zur Indetifizie-<br />
rung dient.<br />
• Die Bilddaten.<br />
Die interne Repräsentation wird mit einem ipPicDescriptor deklariert:<br />
typedef struct<br />
{<br />
void *data; / ∗ p o i n t e r t o ’ i m a g e ’ d a t a ∗/<br />
_ipPicInfo_t *info; / ∗ p o i n t e r t o t h e P i c I n f o s t r u c t u r e ∗/<br />
ipPicType_t type; / ∗ d a t a t y p e o f t h e d a t a ∗/<br />
ipUInt4_t bpe; / ∗ b i t s p e r e l e m e n t ∗/<br />
ipUInt4_t dim; / ∗ n u m b e r o f d i m e n s i o n s ∗/<br />
ipUInt4_t n[_ipPicNDIM]; / ∗ s i z e o f d i m e n s i o n n [ i ] ∗/<br />
} ipPicDescriptor;<br />
18<br />
Listing 3.1: Deklaration <strong>eines</strong> ipPicDescriptors in der ipPic.h
3.1. MEDIZINISCHE GRUNDLAGEN<br />
Auf diesem Format aufbauend wurde eine Bibliothek entwickelt, die die grundlegenden<br />
Funktionen, wie das Laden ( ipPicGet ) und Speichern ( ipPicPut) <strong>eines</strong> PIC-Bildes zur<br />
Verfügung stellt. Die ipFunc-Bibliothek bietet dagegen Funktionen zur Vearbeitung der<br />
PIC-Bilder an. In Kapitel 5.9.4 wird diese Bibliothek genutzt, um aus PIC-Schichtbildern<br />
ein Oberflächenmodell zu erzeugen.<br />
3.1.6 Segmentierung<br />
Da ein Computer auf Bildern keine Objekte erkennen kann, wird durch die ein Bild in<br />
Bereiche gleicher Zusammengehörigkeit (z.B. funktionale, anatomische) aufgeteilt. Ziel ist<br />
es das Objekt vom Rest des Bildes , dem Hintergrund, zu trennen. Dies gestaltet sich je<br />
nach Dichtewert des Objektes unterschiedlich schwierig. So kann Knochen aufgrund seiner<br />
hohen Dichte sehr gut von benachbarten Organen und Gewebe getrennt werden. Im Falle<br />
der Leber gestaltet sich diese Trennung bei weitem schwieriger, da die Dichteunterschie-<br />
de zwischen der Leber und benachbarten Organen klein sind. Aus dem als Grauwertbild<br />
vorliegenden Originalbild wird ein Binärbild gleicher Größe erzeugt, indem Bildpunkte, die<br />
zu einem bestimmten Objekt gehören, der gleiche Wert zugeordnet werden. Falls sie au-<br />
ßerhalb des gesuchten Objektes liegen, erhalten sie den Wert 0. Diese segmentierten Ein-<br />
zelschichtbilder dienen als Grundlage für die Erzeugung der in Kapitel 5.9.4 vorgestellten<br />
Oberflächenerzeugung. Bei der Leberoperationsplanung werden automatische und manuelle<br />
Segmentierungsverfahren eingesetzt, allerdings existiert zur Zeit noch kein automatisches<br />
Verfahren, das ohne manuelle Nachbearbeitung bzw. Kontrolle funktioniert.<br />
(a) Originalbild (b) Segmentierungsergebnis<br />
Abbildung 3.8: Bildaufbereitung durch Segmentierung<br />
Zur Zeit wird dabei meist mit den folgenden Segmetierungswerkzeugen gearbeitet:<br />
◮ Beim Freihandzeichnen wird mit einem Eingabegerät wie z.B. der Maus eine Linie<br />
19
KAPITEL 3. GRUNDLAGEN<br />
entlang des Objektrandes gezogen und anschließend die eingeschlossene Fläche als<br />
Objekt markiert.<br />
◮ Ein Schwellwertverfahren kann bei Objekten eingesetzt werden, die sich stark von ih-<br />
rem Hintergrund abheben. Ein angegebener Schwellwert definiert dabei die Grenze<br />
zwischen Objekt und Hintergrund, indem z.B. alle Bildpunkte, deren Grauwert größer<br />
als der Schwellwert ist, dem Objekt zugeordnet werden. Bei CT-Bilder kann dieser<br />
Schwellwert aus der Hounsfield-Skala (Abbildung 3.2) abgeleitet werden.<br />
◮ Regionenwachstumsverfahren versuchen ein Bild anhand der Homogenität der zu ei-<br />
nem Objekt gehörenden, Bildbereiche zu segmentieren. Eine Möglichkeit ist, in das<br />
Objekt einen Saatpunkt zu setzen, der sich ausbreitet, solange ein vorgegebenes Ho-<br />
mogenitätskriterium erfüllt ist und im günstigsten Fall auf diese Weise die gesamte<br />
Objektfläche ausfüllt. Zur Gefäßsegmentierung wird ein Volume-Growing-Verfahren<br />
eingesetzt, mit dem die Gefäßbäume in einem dreidimensionalen Volumen segmen-<br />
tiert werden können.<br />
3.2 Medizinische Bildverarbeitung<br />
Die Medizinische Bildverarbeitung hat in den letzten Jahren aufgrund der <strong>Entwicklung</strong> neu-<br />
er bildgebender Verfahren, der Leistungssteigerung der Computer und Graphikarten und<br />
der Verbesserung der Bilddatenkommunikation an Bedeutung gewonnen. Die Aussagekraft<br />
von digitalen Bildern kann durch Hervorhebung der relevanten Bildinformationen erhöht<br />
werden, womit auch die Interpretation der Bildinformationen erleichtert wird. Beim Aufbe-<br />
reiten der Bilddaten können wie im Abschnitt 3.1.6 neue Bilder erzeugt oder im Falle der<br />
<strong>3D</strong>-Rekonstruktion in anderer Form (siehe Kapitel 5.9.4) dargestellt werden. Neben der<br />
visuellen Erhöhung der Aussagekraft der Bilder, kann auch durch die Bestimmung quanti-<br />
tativer Größen der Informationsgehalt <strong>eines</strong> Bildes erhöht werden (siehe Kapitel 5.7).<br />
3.2.1 Bildverarbeitungsoperationen<br />
Von den als Schichtbildern vorliegenden Bilddaten ausgehend gibt die Abbildung 3.9 einen<br />
Überblick über die in dieser Diplomarbeit verwendeten Bildverabeitungsoperationen.<br />
20
Bilddaten<br />
Interpretation<br />
Filterung<br />
Segmentierung<br />
Geometrische<br />
Operationen<br />
<strong>3D</strong>-Rekonstruktion<br />
Segmentierung<br />
Segmentierung<br />
Datenreduktion<br />
Distanzmessungen<br />
Bildarchivierung Bildauswertung<br />
Abbildung 3.9: Bildverarbeitungsoperationen<br />
3.2. MEDIZINISCHE BILDVERARBEITUNG<br />
Die im Kapitel 5.9.4 zur Oberflächengene-<br />
rierung eingesetzten Filteroperationen, er-<br />
zeugen wie die Segmentierung ein neues<br />
Bild und verbessern dadurch die Interpre-<br />
tationsmöglichkeiten. Die in Kapitel 3.3.1<br />
beschriebenen geometrischen Operationen<br />
werden beispielsweise können zum Bewe-<br />
gen der Szene eingesetzt werden. Eine <strong>3D</strong>-<br />
Rekonstruktion bildet die Grundlage einer<br />
<strong>3D</strong>-Visualisierung, kann aber durch eine Re-<br />
duzierung der Daten optimiert werden (sie-<br />
he Kapitel 5.9.4). Mit Distanzmessungen<br />
wird der in Kapitel ein Sicherheitsabstand<br />
bestimmt. Die angesprochene Maßnahmen<br />
dienen der Bildauswertung, während die<br />
Bildarchivierung in Verbindung mit einem<br />
Teleradiologiesystem eine Datenkommuni-<br />
kation ermöglicht.<br />
21
KAPITEL 3. GRUNDLAGEN<br />
3.3 Visualisierungstechniken<br />
Dieser Abschnitt gibt eine Einführung in die <strong>3D</strong>-Programmierung und ermöglicht dadurch<br />
das Verständniss der aufwendigeren <strong>3D</strong>-Rekonstruktion einer Leberoperationsplanung. Die-<br />
ses Thema wird in , und ausführlicher beschrieben. Die<br />
Darstellungen der Abbildungen 3.10 und 3.14 wurde zur Demonstration der Visualisie-<br />
rungstechniken programmiert und das Listing zu Abbildung 3.10 befindet sich teilweise im<br />
Anhang.<br />
3.3.1 Graphikprogrammierung<br />
In der Computergraphik bezeichnet man die Ausgabeelemente Punkte, Linien, Dreiecke und<br />
Polygone als Primitive und baut mit ihnen komplexere Objekte zusammen.<br />
Punkte und Vektoren<br />
Punkte stellen die Basis für alle Graphikoperationen und graphischen Elemente dar. Als Be-<br />
standteile von Graphikobjekten werden sie auch als Vertex (Scheitelpunkt) bezeichnet. Die<br />
Punkte werden dabei durch die Angabe von Koordinaten definiert und bezeichnen dadurch<br />
eine feste Position im Raum. Dazu wird ihnen eine Liste von Zahlen, auch Tupel genannt,<br />
zugeordnet. Im zweidimensionalen Raum enthält diese Liste zwei und im dreidimensionalen<br />
Raum drei Einträge. In Abbildung 3.10 sind als Beispiele 4 Punkte mit Koordinatenangabe<br />
beschriftet. Neben der Zuordnung von Koordinaten kann man den Punkten aber noch mit<br />
andere Eigenschaften wie Farbe, Transparenz oder skalare Werte zuweisen. Ein Vektor wird<br />
wie ein Punkt durch die Zuordnung <strong>eines</strong> Tupels definiert, legt allerdings keine Ortsangabe<br />
fest, sondern repräsentiert eine Verschiebung mit festgelegter Länge und Richtung.<br />
Polygone<br />
Polygone sind die Bauelemente graphischer <strong>3D</strong>-Objekte und werden durch einzelne Punkte<br />
definiert. Da die Graphikhardware das Zeichnen von Dreiecken unterstützt, besitzen diese<br />
in der <strong>3D</strong>-Graphik eine besondere Rolle. Sie werden auch zur Darstellung anderer Polygone<br />
genutzt, indem mehrere Dreicke so angeordnet werden, dass mit ihnen die Polygonfläche<br />
dargestellt werden kann. Dreiecke werden im <strong>3D</strong>-Raum durch drei Punkte definiert, die mit<br />
Linien verbunden und bei Bedarf noch ausgefüllt werden. Die Abbildung 3.10 zeigt vier mit<br />
Koordinaten beschriftete Punkte, welche mit Linien verbunden, zwei Dreiecke ergeben und<br />
22
zusammengesetzt die Vorderseite des Würfels bilden.<br />
Aufbau von Objekten<br />
3.3. VISUALISIERUNGSTECHNIKEN<br />
Zum Aufbau von Objekten werden Polygone verbunden und diesen Oberflächen- und Ma-<br />
terialeigenschaften zugeordnet. Die Vertices werden dabei meist von mehreren Polygonen<br />
geteilt. So teilen sich die 12 Dreiecke in Abbildung 3.10 die 8 Vertices des Würfels. Zur<br />
Speicherung der Informationen zu einem Objekt werden in vielen <strong>3D</strong>-Anwendungen zwei<br />
getrennte Listen verwendet. Dabei speichert die erste Liste die Informationen der Vertices,<br />
während in der zweiten Liste die Informationen zu den Dreiecken, über Verweise auf die erste<br />
Liste enthält. Auf diese Weise müssen die Koordinaten von Punkten, welche von verschie-<br />
denen Dreiecken benutzt werden, nur einmal gespeichert werden. Eine solche Verwaltung<br />
der Punktdaten wird vom Visualization Toolkit (VTK) (siehe Abschnitt 3.3.4) verwendet<br />
und wird in der Abbildung 3.10 demonstriert.<br />
Indexliste der vorderen Dreicke:<br />
{{0,1,2},{0,2,3}}<br />
3:(-1,1,-1)<br />
0:(-1,-1,-1)<br />
+y<br />
2:(1,1,-1)<br />
1:(1,-1,-1)<br />
Punkteliste der vorderen Dreicke:<br />
{{-1,-1,-1},{1,-1,-1}, {1,1,-1}, {-1,1,-1}}<br />
+z<br />
+x<br />
Abbildung 3.10: Beispielobjekt Würfel<br />
23
KAPITEL 3. GRUNDLAGEN<br />
Koordinatensysteme<br />
Mit Koordinatensystemen ist es möglich Punkte eindeutig über Koordinaten zu definieren.<br />
Zur Positionsangabe von Punkten im <strong>3D</strong>-Raum wird ein Koordinatensystem mit 3 Achsen<br />
(x,y,z) benötigt, in dem der Punkt mit den Koordinaten (0,0,0) der Schnittpunkt dieser<br />
Achsen und Koordinatenursprung ist. Den Punkt (x,y,z) erreicht man indem man sich x<br />
Einheiten auf der x-Achse, y Einheiten auf der y-Achse und z Einheiten auf der z-Achse<br />
bewegt.<br />
<strong>3D</strong>-Koordinatensysteme können aufgrund der Orientierung der z-Achse hinsichtlich der Ori-<br />
entierung von x- und y-Achse in linkshändige und rechtshändige Systeme unterteilt werden.<br />
Die Abbildung 3.10 zeigt ein linkshändiges Koordinatensystem bei der die positive z-Achse,<br />
bei der Ausrichtung positive x-Achse weg vom Betrachter in die Szene hinein zeigt.<br />
5<br />
2<br />
2<br />
C<br />
A<br />
0<br />
B<br />
2<br />
E<br />
D<br />
0<br />
2 5<br />
Abb 3.11: Welt-Objektkoordinatensystem<br />
2<br />
F<br />
G<br />
2<br />
Punkt Weltkoordinaten Objektkoordinaten<br />
A (2,3) (0,0)<br />
B (3,3) (2,0)<br />
C (1,6) (0,2)<br />
D (5,1) (0,0)<br />
E (5,3) (0,2)<br />
F (7,3) (2,2)<br />
G (7,1) (2,0)<br />
Tabelle 3.12: Punkte im<br />
Welt-Objektkoordinatensystem<br />
Ein Weltkoordinatensystem ist ein der gesamten Szene zugrundeliegendes Koordinatensys-<br />
tem, in dem die verschiedenen Objekte einer Szene platziert werden. Die Abbildung 3.11<br />
und die Tabelle 3.12 zeigen wie zwei Objekte, in ihrem Objektkoordinatensystem definierte<br />
Objekte, im gemeinsamen Weltkoordinatensystem platziert werden.<br />
24
(1,6)<br />
(1,4)<br />
(2,6)<br />
(2,4)<br />
(4,4)<br />
(5,1)<br />
(5,3)<br />
(a) Translation<br />
(1,4)<br />
(5,3)<br />
(5,1)<br />
(7,1)<br />
(7,1)<br />
(c) Translation mit Skalierung<br />
Transformationen einer Szene<br />
3.3. VISUALISIERUNGSTECHNIKEN<br />
(1.5,5)<br />
(3,3.5)<br />
(4.5,5)<br />
(5,3)<br />
(5,1) (7,1)<br />
(b) Translation mit Rotation<br />
(5,3)<br />
(5,1)<br />
(7,-1)<br />
(5,-3)<br />
(7,1)<br />
(d) Spiegelung an x-Achse<br />
Abbildung 3.13: 2D-Transformationen <strong>eines</strong> Dreiecks<br />
Eine Transformation ist in der Computergraphik als eine Positionsänderung <strong>eines</strong> oder meh-<br />
rerer Punkte in dem, der Szene zugrundeliegenden, Koordinatensystem definiert. Die Ab-<br />
bildung 3.13 stellt einige in der Computergraphik verwendete Transformationen vor, dabei<br />
verdeutlicht der Pfeil neben den Objekten die Richtung der Transformation.<br />
(7,-1)<br />
25
KAPITEL 3. GRUNDLAGEN<br />
◮ Bei einer Modelltransformation, erfolgt die Bewegung über eine Positionsveränderung<br />
der Punkte, in dem, der Szene zugrundeliegenden, Koordinatensystem. Im folgenden<br />
werden kurz die wichtigsten Transformationen vorgestellt.<br />
• Bei einer Translation können Punkte, in alle möglichen Richtungen des Koordi-<br />
natensystems, verschoben werden( siehe Abbildung 3.13(a)).<br />
• Eine Rotation ist eine kreisförmige Bewegung <strong>eines</strong> Punktes um ein Rotations-<br />
zentrum. Die Abbildung 3.13(b) zeigt die Rotation <strong>eines</strong> Dreiecks nach einer<br />
Translation.<br />
• Mit einer Skalierung kann man die Größe <strong>eines</strong> Objektes in allen drei Achsen-<br />
richtungen manipulieren. In Abbildung 3.13(c) wurde das Dreieck nach der<br />
Translation um den Faktor 0.5 in x-Richtung skaliert.<br />
• Eine Spiegelung <strong>eines</strong> Objektes ist an jeder beliebigen Linie möglich. In der<br />
Abbildung 3.13(d) als Beispiel ein Dreieck an der x-Achse gespiegelt.<br />
◮ Bei einer Ansichtstransformation (siehe Abbildung 3.14) werden nicht die Objekte<br />
der Szene, sondern die Kameraeinstellung verändert. Die Kameraeinstellung ist, durch<br />
eine Kameraposition, eine Kameraorientierung und einen Brennpunkt, definiert und<br />
bei einer Änderung dieser Einstellung, wird das zugrundeliegende Koordinatensystem<br />
manipuliert.<br />
Mathematische Darstellung der Transformationen<br />
Für affine geometrische Transformation kann eine Transformationsmatrix aufgestellt wer-<br />
den, die bei einer mathematischen Operation mit einem als Vektor dargestellten Punkt die<br />
gewünschte Positionsveränderung des Punktes bewirkt.<br />
Um den Punkt (5,1) in Abbildung 3.13(a) in den Punkt (2,4) zu transformieren ist folgende<br />
Rechnung notwendig:<br />
⎛ ⎞<br />
1 0 −3<br />
⎜ ⎟<br />
⎜<br />
⎝ 0 1 3 ⎟<br />
⎠<br />
0 0 1<br />
∗<br />
⎛ ⎞<br />
5<br />
⎜ ⎟<br />
⎜<br />
⎝ 1 ⎟<br />
⎠<br />
1<br />
=<br />
⎛<br />
⎜<br />
⎝<br />
Um aufeinanderfolgende Transformationen auszuführen, werden die verschiedenen Matrizen<br />
miteinander multipliziert. So wird die in 3.13(c) gezeigte Skalierung nach einer Translation<br />
folgendermaßen durchgeführt :<br />
26<br />
2<br />
4<br />
1<br />
⎞<br />
⎟<br />
⎠
⎛ ⎞<br />
0.5 0 0<br />
⎜ ⎟<br />
⎜<br />
⎝ 0 1 0 ⎟<br />
⎠<br />
0 0 1<br />
∗<br />
⎛ ⎞<br />
1 0 −3<br />
⎜ ⎟<br />
⎜<br />
⎝ 0 1 3 ⎟<br />
⎠<br />
0 0 1<br />
∗<br />
⎛ ⎞<br />
5<br />
⎜ ⎟<br />
⎜<br />
⎝ 1 ⎟<br />
⎠<br />
1<br />
=<br />
⎛<br />
⎜<br />
⎝<br />
3.3. VISUALISIERUNGSTECHNIKEN<br />
Neben den zwei Koordinaten zur Ortsangabe besitzen die Vektoren und Matrizen noch eine<br />
dritte homogene Koordinate, die eine konsistente Matrixscheibweise von Rotation, Skalie-<br />
rung und Translation und die Durchführung von perspektivischen Transformationen ermög-<br />
licht.<br />
Eine möglichst realistische Darstellung von Objekten kann über die Beleuchtung und Zuord-<br />
nung von Materialeigenschaften erreicht werden. In unserer Umwelt sehen wir Objekte, weil<br />
sie Licht reflektieren oder als Lichtquellen Licht aussenden. Die durch Rot-,Grün-, Blau-<br />
und Transparenzwerte angegebe Farbe und die Wechselwirkung der Materialien mit dem<br />
Licht bestimmen dabei das Aussehen der Objekte. Eine Anpassung dieser Darstellung kann<br />
durch die Änderung der Reflexionseigenschaften der Objektmaterialien oder der Einstellung<br />
der Lichtquellen erreicht werden.<br />
Kameraeinstellung und Beleuchtung<br />
Brennpunkt<br />
Azimuth<br />
Projektionsrichtung<br />
Elevation<br />
Roll<br />
Abbildung 3.14: Kamera- und<br />
Lichteinstellungen<br />
1<br />
4<br />
1<br />
⎞<br />
⎟<br />
⎠<br />
Zur Veränderung der Ansicht auf eine Sze-<br />
ne, erbringen die beiden angesprochenen<br />
Transformationen die gleichen Ergebnis-<br />
se. Für die Navigation durch eine Sze-<br />
ne im Darstellungsfenster des Organicers<br />
(siehe Kapitel 4.1.1) werden aber Modell-<br />
transformationen benutzt. Die Kamerapo-<br />
sition ist dabei in einem bestimmten Ab-<br />
stand von der Szene entfernt positioniert<br />
und der Brennpunkt liegt im Ursprung des<br />
Koordinatensystems. Die Kameraorientie-<br />
rung kann horizontal (Azimuth), vertikal<br />
(Elevation) und durch eine Drehung um<br />
Projektionsachse verändert werden.<br />
27
KAPITEL 3. GRUNDLAGEN<br />
3.3.2 Volumendarstellung<br />
Zur Visualisierung <strong>eines</strong> Volumens können zwei unterschiedliche Verfahren verwendet wer-<br />
den: das Oberflächenrendering und das Volumenrendering (siehe Abschnitt 3.3.4). Diese<br />
Verfahren unterscheiden sich u.a. in der Repräsentation der Volumendaten, in der Qualität<br />
der berechneten dreidimensionalen Ansichten sowie in der dazu benötigten Rechenzeit.<br />
Oberflächenrendering<br />
Bei der Oberflächenvisualisierung werden die Außenflächen der Objekte durch grafischen<br />
Primitive (meist Dreiecke) dargestellt. Die Objektgrenzen werden mit einem Schwellwertver-<br />
fahren bestimmt und durch Dreiecke angenähert. Durch diese Annäherung und die fehlenden<br />
Informationen innerhalb des Objektes, gehen bei diesem Verfahren allerdings Bildinforma-<br />
tionen verloren.<br />
Sie werden aber bevorzugt in interaktiven Anwendungen verwendet, da das Rendern der auf-<br />
gebauten Gittermodelle durch die Graphikhardware- und OpenGL-Unterstützung schneller<br />
als die direkte Volumendarstellung ist.<br />
4<br />
0<br />
5<br />
2<br />
Voxel<br />
Abbildung 3.15:<br />
6<br />
1<br />
Aufbau <strong>eines</strong> Würfels<br />
7<br />
3<br />
Der Marching-Cubes Algorithmus<br />
Zur Durchführung dieser Oberflächenkonstruktion kann der<br />
Marching-Cubes-Algorithmus verwendet werden, der ein<br />
Bildvolumen in Würfel aufteilt. Ein Würfel wird aus zwei<br />
Schichten des Volumendatensatzes gebildet und wird von 8<br />
benachbarten Voxeln gebildet. Das weitere Vorgehen ent-<br />
spricht einem in Kapitel 3.1.6 beschriebenen Schwellwert-<br />
verfahren, bei dem für jeden Eckpunkt des Würfels ent-<br />
schieden wird, ob er innerhalb oder außerhalb des Objek-<br />
tes liegt. Falls eine Kante des Würfels einen innerhalb des<br />
Würfels liegenden Eckpunkt mit einem außerhalb liegenden<br />
Punkt verbindet, wird diese Kante von der Objektoberflä-<br />
che geschnitten. Der exakte Schnittpunkt wird durch Interpolation über die Pixelwerte der<br />
Eckpunkte der Kante bestimmt und mit den anderen Kantenschnittpunkten zu Polygonen<br />
verbunden.<br />
28
3.3. VISUALISIERUNGSTECHNIKEN<br />
Abbildung 3.16: Entscheidungsfälle beim Marching-Cubes-Algorithmus<br />
Dabei ergeben sich 256 Möglichkeiten die Oberfläche durch eine Würfel zu legen, von denen<br />
allerdings nur 15 berücksichtigt werden müssen. Alle anderen Fälle können durch Spiegelung,<br />
Rotation oder Komplementärbildung in diese Fälle überführt werden. In Abbildung 3.16<br />
sind zum besseren Verständniss drei dieser Fälle dargestellt.<br />
Da bei der Erstellung einer Oberfläche mit dem Marching-Cubes Algorithmus die Anzahl der<br />
Dreiecke des Objektmodells eine Interaktion nur bedingt zulassen, ist es notwendig diese An-<br />
zahl in Nachbearbeitungsschritten zu reduzieren. In Kapitel 5.9.4 wird neben der Erzeugung<br />
von STL-Oberflächenmodellen auch auf die Reduktion der Polygone eingegangen.<br />
Direkte Volumendarstellung<br />
Zur direkten Volumendarstellung wird meist ein Raytracing-Verfahren eingesetzt, bei dem<br />
von der aktuellen Kameraposition ausgehend Strahlen in die Szene geworfen werden. Diese<br />
werden für jedes Pixel verfolgt und beim Auftreffen auf ein Objekt ein Strahl zu der Licht-<br />
quelle ausgesandt, um ein lokales Beleuchtungsmodell zu berechnen (Abbildung 3.17). Ein<br />
solches Verfahren ist sehr rechenaufwendig, da auch reflektierte Strahlen berücksichtigt und<br />
Schattenberechnungen durchgeführt werden müssen. Bei einer interaktiven Anwendung muß<br />
das Bild bei jeder Aktion neu berechnet werden, dies führt bei der direkten Volumendar-<br />
stellung zu einem hohen Rechenaufwand. Der Vorteil dieses Verfahrens liegt aber im hohen<br />
Informationsgehalt und der Realitätstreue der berechneten Bilder.<br />
29
KAPITEL 3. GRUNDLAGEN<br />
Abbildung 3.17: Vereinfachte Darstellung des Raytracing-Prinzips<br />
3.3.3 Beschreibung der OpenGL Visualisierungs-Schnittstelle<br />
Historischer Hintergrund<br />
Die Firma Silicon Graphics Incorporation entwickelte 1982 eine Schnittstelle zur Graphik-<br />
programmierung ihrer Workstations. Diese Befehls-Bibliothek (IRIS GL) war sehr hardwa-<br />
renah programmiert und konnte deshalb nicht auf andere Systeme portiert werden. Zur<br />
Realisierung einer Portabilität von OpenGL wurde 1991 ein Konsortium aus Vertretern der<br />
Computerindustrie (z.B. Microsoft,IBM, Intel, DEC, SGI, Sun etc.) mit dem Namen Ar-<br />
chitectur Review Board (ARB) gebildet, deren Aufgabe es ist, offizielle Dokumente bzgl.<br />
Definition und Weiterentwicklung herauszugeben und Implementierungen von OpenGL zu<br />
kontrollieren. Bereits 1992 veröffentlichten die Firmen DEC und SGI die ersten Versionen<br />
von OpenGL. Eine Microsoft-Version für Windows NT folgte 1994. Brian Paul veröffentliche<br />
1995 die Mesa-Bibliothek, eine Opensourceversion von OpenGL.<br />
Kennzeichen von OpenGL<br />
30<br />
• Strenge Normierung : Die ARB stellt sicher, dass jede Erweiterung von OpenGL<br />
herstellerneutral ist und zertifiziert wird.<br />
• Systemunabhängigkeit : Anwendungen mit reinen OpenGL-Anweisungen laufen auf<br />
verschieden Betriebssystemen. Da OpenGL keine Fensterverwaltung oder die Verar-<br />
beitung von Maus- bzw. Tastaturereignissen unterstützt, muß diese Funktionalität<br />
von systemspezifischen Zusatzbibliotheken wie GLUT, GLX und WGL oder Qt über-<br />
nommen werden.
3.3. VISUALISIERUNGSTECHNIKEN<br />
• Client-Server Prinzip : Die Berechnung und die Darstellung von Szenen kann auf<br />
verschiedenen Rechnern erfolgen. Große Rechenmaschinen können virtuelle Welten<br />
erzeugen, welche an PC’s geschickt und dort angezeigt werden können.<br />
• Zustandsautomat : OpenGL verfügt über Zustandsvariablen, welche abgefragt wer-<br />
den können und deren Änderung sich auf alle nachfolgend definierten Objekte unmit-<br />
telbar auswirkt.<br />
• Kleiner Sprachumfang : OpenGL besitzt mit ca. 300 Funktionen eine überschaubare<br />
Anzahl von Befehlen, die zur Farb- bzw. Materialzuweisung und Transformation der<br />
Vertices dienen. Diese werden prozedural abgearbeitet, so dass bei Statusabfragen,<br />
unabhängig von der Komplexität der Befehle, der tatsächliche Status von OpenGL<br />
zurückgegeben werden kann.<br />
Die OpenGL-Renderingpipeline<br />
OpenGL-Primitive<br />
Vertex-Daten<br />
Displaylisten<br />
Trabsformationen,<br />
Beleuchtung,<br />
Clipping<br />
Rasterisierung<br />
Fragmentoperationen<br />
Bildspeicher<br />
Abbildung 3.18:<br />
OpenGL Pipeline<br />
Die in der Abbildung 3.18 dargestellte vereinfachte Dar-<br />
stellung der OpenGL Graphikpipeline ist aus über-<br />
nommen. Am Anfang der Pipeline werden durch OpenGL-<br />
Ausgabeanweisungen aus grafischen Primitiven Objekte mo-<br />
delliert. Die zur Erstellung von Objekten benötigten OpenGL-<br />
Befehle können in Displaylisten zusammengefasst werden, was<br />
das Rendern dieser Objekte bei einer Animation beschleunigt.<br />
Durch die Transformation der Vertex-Koordinaten werden die<br />
Objekte in der Szene ausgerichtet und über Beleuchtungsrech-<br />
nungen werden den Vertices Farbwerte zugewiesen. Als Ras-<br />
terung bezeichnet man die Abbildung der grafischen Primiti-<br />
ve auf ein Gitter abgebildet, dessen Ausmaße der Größe des<br />
Bildschirmfensters entspricht. Die einzelnen Quadrate dieses<br />
Gitters nennt man Fragmente und ordnet ihnen in verschie-<br />
denen Operationen einen Tiefenwert, Texturkoordinaten und<br />
Farbwerte zu. Nach einer Verdeckungsrechnung werden die<br />
Fragmente als Pixel in den Bildspeicher eingetragen.<br />
31
KAPITEL 3. GRUNDLAGEN<br />
Hardwareunterstützung<br />
Graphics Device<br />
Interface<br />
Display System<br />
Application Program<br />
OpenGL<br />
Software<br />
Rasterizer<br />
(a) Softwareunterstützung<br />
Graphics Device<br />
Interface<br />
Display System<br />
Application Program<br />
OpenGL<br />
Hardware<br />
Driver<br />
(b) Hardwareunterstützung<br />
Abbildung 3.19: Beschreibung der OpenGL Unterstützung<br />
Durch die strengen Konformitätstests der ARB ist sichergestellt, dass einem Entwickler im-<br />
mer sämtliche Möglichkeiten, welche ihm die OpenGL-API bietet, zur Verfügung stehen.<br />
Falls diese nicht die Hardware realisiert, werden diese softwaremäßig emuliert. Bei einer<br />
OpenGL-Softwareunterstützung muß die CPU die in Abschnitt 3.3.3 beschriebene Durch-<br />
führung der OpenGL-Pipeline übernehmen und die Pixel in den Bildspeicher schreiben. Da<br />
diese Aktionen einige Zeit benötigen ist durch die reine Softwareunterstützung keine fort-<br />
geschrittene <strong>3D</strong>-Graphikprogrammierung möglich.<br />
Durch eine verbesserte OpenGL-Unterstützung durch Graphikkarten wachsen auch die Mög-<br />
lichkeiten der <strong>3D</strong>-Programmierung. In Abbildung 3.19(b) ist zu erkennen, dass die Gra-<br />
phikhardware direkt mit den Ausgabegeräten zusammenarbeitet und die in der Graphikkar-<br />
te ausgeführte OpenGL-Pipeline kann direkt weitergegeben werden. Neuere Graphikkarten<br />
unterstützen dabei neben <strong>3D</strong>-Transformationen auch aufwendige Operationen wie Schat-<br />
tenberechnungen, so dass diese zur Verbesserung der räumlichen Darstellung in der <strong>3D</strong>-<br />
Visualisierung eingesetzt werden kann.<br />
3.3.4 Visualization Toolkit (VTK)<br />
Das Visualization Toolkit (VTK) ist ein frei verfügbares (Open Source), objektorientiert<br />
aufgebautes Softwaresystem für <strong>3D</strong>-Computergraphik, Bildverarbeitung und Visualisierung<br />
32
3.3. VISUALISIERUNGSTECHNIKEN<br />
(siehe ). VTK unterstützt die Graphikprogrammiersprache OpenGL und die Ent-<br />
wicklung plattformunabhängiger Anwendungen. Die Abbildungen 3.10 und 3.14 zeigen<br />
Aufnahmen von Programmen, die zur Veranschaulichung der beschriebenen Themen, für<br />
diese Arbeit programmmiert wurden und deren Listings sich auszugsweise im Anhang be-<br />
finden.<br />
Hauptklassen von VTK<br />
vtkActor<br />
(Objekt)<br />
1<br />
1<br />
1<br />
vtkRenderer<br />
(Szene)<br />
1 n<br />
1<br />
vtkCamera vtkLight vtkMapper<br />
1<br />
Abbildung 3.20: Klassendiagramm VTK<br />
1<br />
n<br />
1<br />
vtkRenderWindow<br />
(Ausgabefenster)<br />
• Ein vtkRenderWindow bietet einen Fensterbereich, in dem die verschiedenen Objekte<br />
dargestellt werden und Interaktionen durchgeführt werden könnnen.<br />
• Die vtkRenderer koordinieren das Rendern unter Berücksichtigung der Lichtquellen,<br />
Kameraeinstellung und Objekte.<br />
• Die Kameraeinstellungen werden durch eine Instanz der Klasse vtkCamera definiert.<br />
• vtkActor repräsentiert ein in der Szene darzustellendes Objekt.<br />
• Ein vtkMapper erzeugt die grafischen Objekte.<br />
• Objekte besitzen eine vtkProperty-Instanz, über die ihr Erscheinungsbild (Farbe,<br />
Transparenz, Lichteigenschaften) verändert werden kann.<br />
3.3.5 Die VTK Visualisierungs-Pipeline<br />
Innerhalb der Visualisierungs-Pipeline werden Datenobjekte in graphische Primitive umge-<br />
wandelt und können anschließend auf einem Ausgabegerät dargestellt werden.<br />
33
KAPITEL 3. GRUNDLAGEN<br />
Die Objekte der Pipeline<br />
Am Visualisierungsprozess von VTK sind zwei Arten von Objekten beteiligt:<br />
◮ Datenobjekte repräsentieren Informationen und bieten Methoden zur Abfrage ver-<br />
schiedener Eigenschaften der Daten an. Der Abschnitt 3.3.5 stellt die verschiedenen<br />
Strukturen vor, mit denen die Datenobjekte die Daten verwalten könnnen.<br />
◮ Zur Bearbeitung der Daten dienen Prozessobjekte, die als Eingabe Daten erhalten<br />
und diese verändert ausgeben.<br />
• Source Objekte, die ihre Daten aus externen Quellen (z.B. Dateien) auslesen,<br />
werden als Reader-Objekt (z.B. vtkSTLReader) bezeichnet. Manche Source Ob-<br />
jekte könnnen ihre Daten aber auch direkt erzeugen (z.B. vtkConeSource).<br />
• Filter Objekte könnnen Daten mit spezifischen Funktionen verarbeiten und die<br />
veränderten Daten in neue Datenobjekte schreiben. Je nach Art erhalten sie<br />
mehrere Datenobjekte als Eingabe und produzieren mehrere Ausgabeobjekte.<br />
• Mapper Objekte bilden das Ende der Visualisierungs-Pipeline und konvertieren<br />
die Daten in Grafische Primitive oder schreiben die Daten als Writer-Objekt in<br />
eine Datei.<br />
Aufbau der Pipeline<br />
PolyData Datei PolyData Reader Daten Objekt PolyData Mapper Display<br />
Abbildung 3.21: VTK Pipeline<br />
Zum Aufbau einer Visualisierungspipeline werden verschiedene Daten- und Prozessobjekte<br />
miteinander verbunden. Das in der Abbildung 3.21 dargestellte Diagramm zeigt einen<br />
typischen Aufbau einer Pipeline, wie sie auch zur Darstellung des Objektes in 3.14 verwendet<br />
wird. Die Daten sind in einer Datei als Polydata strukturiert abgelegt und werden mit einem<br />
dafür geeigneten Reader ausgelesen. Dieses Prozessobjekt liefert einen Output, der entweder<br />
in ein Datenobjekt geschrieben werden kann oder direkt dem Mapper zur Erzeugung der<br />
graphischen Primitive und der Beendigung der Pipeline übergeben werden kann. Im Anhang<br />
zeigt ein Listing, den Einsatz einer VTK-PipeLine zur Visualisierung <strong>eines</strong> Würfels.<br />
34
Daten Repräsentation<br />
Eigenschaften der Daten<br />
3.3. VISUALISIERUNGSTECHNIKEN<br />
Zur Visualisierung von Daten ist es wichtig, diese in geeigneter Form zur Verfügung zu<br />
stellen und dadurch eine effiziente Verarbeitung der Daten zu ermöglichen. Die Auswahl der<br />
Form wird durch drei Eigenschaften festgelegt:<br />
• Da die digitalen Daten in diskreter Form vorliegen, besitzen sie keine Informationen<br />
über die Bereiche zwischen den Messpunkten. Die bei einer Visualisierung an beliebiger<br />
Stelle benötigten Werte, müssen deshalb durch eine Interpolation berechnet werden<br />
können.<br />
• Die Struktur der Daten kann regelmäßig oder unregelmäßig sein. So kann bei einer<br />
regelmäßigen Anordnung der Daten auf die Aufnahme jeder einzelnen Punktpositi-<br />
on verzichtet werden, da diese sich aus dem Ursprungsort, dem Abstand zwischen<br />
den Punkten und der Anzahl der Punkte ergeben. Bei einer unregelmäßigen Struktur<br />
der Daten können Stellen ihrem Informationsgehalt entsprechend stärker oder weni-<br />
ger stark repräsentiert werden. Dadurch lässt sich durch die Wahl einer angepaßten<br />
Repräsentationsform der benötigte Speicherplatz reduzieren.<br />
• Die topologische Dimension der Daten wird durch die dargestellten Strukturen wie<br />
Punkte (0-dimensional), Linien (1-dimensional), Flächen (2-dimensional) oder Körper<br />
(3-dimensional) bestimmt.<br />
Datenobjekte und Attributwerte<br />
Die Datenobjekte der Visualisierungs-Pipeline werden als Dataset bezeichnet und setzen sich<br />
aus einer Organisationsstruktur und zusätzlichen Datenattributen zusammen. Die Struktur<br />
ergibt sich dabei aus geometrischen und topologischen Eigenschaften. Die topologischen Ei-<br />
genschaften werden durch, als Zellen bezeichnete, Linien, Dreiecke oder Polygone bestimmt<br />
und bleiben bei geometrischen Transformationen unverändert. Zur Beschreibung der geome-<br />
trischen Struktur dienen die Punktkoordinaten. Durch Organisation der Bilddaten können<br />
mit VTK effiziente Operationen durchgeführt werden.<br />
Die Datenattribute werden mit der Struktur <strong>eines</strong> Dataset verbunden und bieten ergänzende<br />
Informationen zu den Daten. Dazu werden die Attribute den Punkten des Datasets zuge-<br />
ordnet und können über diese abgefragt werden. Die Punkte <strong>eines</strong> Datasets zur Darstellung<br />
35
KAPITEL 3. GRUNDLAGEN<br />
<strong>eines</strong> Gefäßbaumes erhalten über Datenattribute Informationen über Farbe, Durchmesser<br />
und Gefäßtyp (Kapitel 4.1.2).<br />
In der Visualisierung werden insbesondere zwei Arten von Datasets verwendet:<br />
◮ Die von graphischen Bibliotheken erzeugten Primitive werden Polygonal Data genannt<br />
und ihre Repräsentionsform im VTK ist das Polydata Dataset. Die Topologie und<br />
die Geometrie von Polydata ist unstrukturiert, da die beteiligten Zellen verschiedene<br />
Dimensionen und eine beliebige geometrische Lage haben können. Ein Listing im<br />
Anhang zeigt den Aufbau <strong>eines</strong> vtkPolyData-Datasets zur Visualisierung <strong>eines</strong> Würfels.<br />
◮ Das Structured Points Dataset besteht aus Punkten und Zellen, die auf einem recht-<br />
eckigen, regelmäßigen Gitter angeordnet sind. Durch die regelmäßige Topologie und<br />
Geometrie wird die Struktur dieses Datasets durch die Angabe der Dimension (Punkte<br />
in x-,y- und z-Richtung), den Abstand der Daten und einen Ursprungspunkt eindeutig<br />
definiert. Als zweidimensionale Datenobjekte wird das Dataset als Pixmap oder Image<br />
bezeichnet. Die dreidimensionale Variante, ein Volume, wird in der Medizin oft zum<br />
Darstellen der Untersuchungsergebnisse der CT oder MRT eingesetzt.<br />
Auch bei der Berechnung des Sicherheitsabstandes in Kapitel 5.7 werden die Bilddaten in<br />
einer topologisch und geometrischen Struktur organisiert.<br />
3.3.6 VRML<br />
Die Virtual Reality Modelling Language (VRML) stellt ein Dateiformat dar, um interaktive<br />
<strong>3D</strong>-Welten und Objekte zu beschreiben (siehe ). Mit dieser Beschrei-<br />
bungssprache ist es möglich <strong>3D</strong>-Welten im Internet anzubieten.<br />
Um auf einem System VRML nutzen zu können, benötigt man einen VRML-Browser, der<br />
entweder als Standalone-Anwendung genutzt oder als Plugin innerhalb <strong>eines</strong> Web-Browsers<br />
eingefügt werden kann.<br />
Eine VRML-Datei liegt im Textformat vor und beschreibt einen Szenengraph. Die Objekte<br />
dieses Graphen werden als Knoten abgebildet. Knoten können alle Elemente einer Szene wie<br />
z.b. graphische Primitive, Transformationen oder Materialeigenschaften repräsentieren.<br />
VTK bietet die Möglichkeit alle Elemente einer, in einem vtkRenderWindow dargestellten,<br />
Szene mit einer Exporterklasse auf der Festplatte zu speichern. Diese Klasse wird auch<br />
zum Konvertieren der <strong>3D</strong>-Szenen des Organicers, in das VRML-Format (siehe Kapitel 5.8)<br />
benutzt.<br />
36
3.4 Grundlagen der Informatik<br />
3.4.1 Software-Engineering<br />
Redesign<br />
perfektionierend<br />
adaptierend<br />
korrigierend<br />
Abbildung 3.22: Anteile der<br />
Wartbarkeit<br />
3.4. GRUNDLAGEN DER INFORMATIK<br />
Für den Neuentwurf <strong>eines</strong> Softwaresystems existieren ei-<br />
ne Reihe von Konzepten, dagegen spielt die Software-<br />
Wartung nur eine bescheidene Rolle in der Literatur und<br />
Forschung und dies obwohl Studien und Statistiken bele-<br />
gen, dass die Wartung den größten Anteil innerhalb der<br />
Gesamtkosten <strong>eines</strong> Softwareproduktes einnehmen ( nach<br />
, ). In wird der Begriff<br />
Wartung als ein Prozess zur Veränderung von Software-<br />
Systemen verwendet. Diese wird auch wegen rasant fort-<br />
schreitenden technologischen <strong>Entwicklung</strong> und der damit<br />
verbundenen raschen Veralterung bestehender Systeme<br />
immer wichtiger.<br />
Der Begriff Software-Wartung kann in drei Bereiche unterteilt werden ,die verschiedene<br />
Anteile am Gesamtwartungsaufwand (nach ) haben:<br />
◮ Unter korrektiver Wartung vesteht man die Beseitigung von Fehlern.<br />
◮ Eine adaptierende Wartung wird zur Anpassung der Software an sich ändernte Sys-<br />
temumgebungen vorgenommen. Hierzu stellt das Kapitel 5.9 die Integration des<br />
Visualisierungstools Organicer in das Teleradiologiesystem CHILI vor.<br />
◮ In den Bereich der perfektionierenden Wartung fallen Änderungen, die zur Erfüllung<br />
neuer oder geänderter fachlicher Anforderungen durchgeführt werden. Die im Rahmen<br />
dieser Diplomarbeit durchgeführten perfektionierenden Wartungsarbeiten werden im<br />
Kapitel 5 beschrieben.<br />
37
KAPITEL 3. GRUNDLAGEN<br />
Zeit<br />
Anforderungen Analyse<br />
Design<br />
Implementierung Tests Produktion<br />
Abbildung 3.23: Änderungskostenkurve<br />
Kosten<br />
Eine der allgemeinen Annahmen der Softwaretwicklung lautet, dass die Kosten für die Än-<br />
derung <strong>eines</strong> Programmes mit der Zeit expotentiell ansteigen (siehe ). Diese<br />
Aussage wird auch durch die Änderungskostenkurve in Abbildung 3.4.1 verdeutlicht, die<br />
es nahelegt in der Anforderungsanalyse von Software-Produkten eine maximale Flexibilität<br />
zu berücksichtigen, um so möglichst wenig kostenintensive Änderungen in späteren Pha-<br />
sen durchführen zu müssen. Durch die Berücksichtigung einer maximalen Flexibilität, steigt<br />
allerdings auch die Komplexität der Programme.<br />
Deshalb versuchen neuere Ansätze in der Softwareentwicklung die Änderungen von Softwa-<br />
reprodukten zu erleichtern. Die Extreme Programming Methode (siehe ) vesucht<br />
mit ihren Technologien einfache, verständliche und redundanzarme Systeme zu entwickeln<br />
und die Implementierungen auf die aktuellen Anforderungen zu begrenzen. Die Flexibilität<br />
für neue Anforderungen soll dabei durch die Verwendung von Lösungen, wie Entwurfsmus-<br />
tern, die sich in anderen Entwürfen in ihrer Erweiterbarkeit bewährt haben und durch den<br />
Einsatz objektorientierter Programmierung, gewährleistet werden.<br />
Die Abbildung 3.24 zeigt den Ablauf <strong>eines</strong> Reengineering-Prozesses in der Wartungsphase.<br />
Von einem Altsystem ausgehend wird die Softwarearchitekur durch ein Redesign verbessert.<br />
Diese Aktivität entspricht dem Reverse Engineering bei dem ein Software-System in einer<br />
neuen Form oder auf einem höheren Abstraktionsniveau repräsentiert wird. Zur Anpassung<br />
der alten Strukturen an die neuen Bedürfnisse muss eine Restrukturierung durchgeführt<br />
werden, aus der sich Module ableiten, die die gewünschte Funktionalität anbieten.<br />
An die Implementierungsphase schließt sich ein Migrationsprozess an, der den sicheren Über-<br />
gang vom alten zum funktionierenden neuen System als Ziel hat und damit den Forward<br />
Engineering Abschnitt durch eine Transformation in ein niedigeres Abstraktionsniveau ab-<br />
38
3.4. GRUNDLAGEN DER INFORMATIK<br />
schließt. Das Ziel dieses Software Reengineering Prozesses ist die Erneuerung des Altsystems<br />
unter Beibehaltung der grunsätzlichen Funktionalität.<br />
Abstraktionsniveau<br />
Reverse Engineering Forward Engineering<br />
Altsystem Redesign Restrukturierung Komponentenentwurf Migration<br />
Abbildung 3.24: Der Reengineering-Prozess<br />
Neusystem<br />
Bei Forschungsprojekten in der Medizinischen Informatik enstehen oft Anwendungssoft-<br />
wareprodukte, die zur praktischen Umsetzung von Modellen dienen. Diese prototypischen<br />
<strong>Entwicklung</strong>en gelangen oft nicht zum Routineeinsatz, obwohl die Funktionalität dieser Sys-<br />
teme durchaus benötigt wird.<br />
Entwurfsmuster<br />
Die <strong>Entwicklung</strong> objektorientierter Software, die spezifischen Anforderungen genügt, aber<br />
auch flexibel genug ist, um zukünftigen Anforderungen zu begegnen, setzt Erfahrung im<br />
Bereich der objektorientierten Softwareentwicklung voraus. Dann ist es möglich, erfolgreiche<br />
Lösungen für Entwurfsprobleme zu finden, die sich durch eine einfache, flexible und leicht<br />
verständliche Architektur auszeichnet. Erfahrene Softwareentwickler vermeiden es, jedes<br />
Problem von Grund auf neu anzugehen und verwenden Lösungen, die sie zuvor erfolgreich<br />
eingesetzt haben.<br />
In Entwurfsmustern werden diese bewährten Problemlösungen in einer Form festgehalten,<br />
die auch anderen Entwicklern den erfolgreichen Einsatz dieser Entwurfserfahrung ermöglicht.<br />
Die Entwurfsmuster beschreiben dabei die Programmstruktur, indem sie die beteiligten<br />
Objekte und Klassen identifiziert und ihre Zusammenarbeit erläutert. Die in dieser Arbeit<br />
verwendeten Entwurfsmuster sind in den Büchern und ausführlich<br />
beschrieben.<br />
39
KAPITEL 3. GRUNDLAGEN<br />
Singleton<br />
Mit einem Singleton-Pattern ist es möglich eine Klasse zu modellieren, die nur einmal<br />
instanziert werden kann und auf die ein globaler Zugriff möglich ist. Eingesetzt wird die-<br />
ses Muster in Kapitel 5.3.1 zur Realisierung der Mediator-Klasse (siehe auch Abschnitt<br />
Mediator). Diese Klasse verwaltet ihr einziges Exemplar selbst und bietet anderen keine<br />
Möglichkeit, weitere Instanzen zu erzeugen. Da eine Singleton-Klasse durch Bildung von<br />
Unterklassen erweiterbar sein soll, benötigt sie einen als protected deklarierten Konstruktor.<br />
Der Zugriff auf das einzige Exemplar wird in einer Operation geregelt, welche beim ersten<br />
Aufruf ein Exemplar erstellt und dieses bei allen weiteren Aufrufen den Klienten zurückgibt.<br />
Singleton<br />
singletonDaten<br />
protected: Singleton()<br />
static Singleton* getInstance()<br />
{ return myOneAndOnlyInstance() ; }<br />
Abbildung 3.25: Singleton-Muster<br />
Beobachter<br />
Dieses Muster beschreibt die Beziehung zwischen einer Gruppe von Klassen, die Beobachter,<br />
welche vom Zustand einer einzigen Klasse, das Subjekt, abhängig sind. Bei einer Änderung<br />
des Subjektes sollen alle abhängigen Objekte benachrichtigt werden, damit sich diese mit<br />
dem Zustand des Subjektes synchronisieren.<br />
Das Beobachtermuster zeigt, wie man diese Beziehung etabliert, ohne die beteiligten Klassen<br />
eng miteinander zu koppeln. Dazu müssen die Objekte über eine definierte Schnittstelle<br />
verfügen, damit sie angesprochen werden können, ohne als konkrete Klasse bekannt zu<br />
sein. Die verschiedenen Objekte beziehen sich zwar auf das gleiche Subjekt, können aber<br />
unabhängig voneinander verändert und wiederverwendet werden.<br />
Das Sequenzdiagramm 3.26 zeigt die Interaktion zwischen zwei Beobachtern und einem<br />
Subjekt. Die Klasse DataListView ist im Abschnitt 5.6.2 als typischer Beobachter beschrie-<br />
ben, ändert das Subjekt , aktualisiert sich aber nicht selbst, sondern wartet wie der andere<br />
Beobachter, auf die Benachrichtigung durch das Subjekt. Dieser Update-Aufruf kann aber<br />
40
Subjekt<br />
verändereSubjekt()<br />
zustandAbfragen()<br />
zustandAbfragen()<br />
aktualisiere()<br />
3.4. GRUNDLAGEN DER INFORMATIK<br />
Beobachter Mediator<br />
Beobachter<br />
aktualisiere()<br />
benachrichtige()<br />
aktualisiere()<br />
Abbildung 3.26: Beobachter-Muster<br />
auch von einem der Beobachter ausgehen. Diese Variante wird in Abbildung 3.26 dargestellt<br />
und im Organicer verwendet, bei der ein Mediator die Nachricht an die anderen Beobachter<br />
weiterleitet.<br />
Mediator - Vermittler<br />
Ein Vermittler ist ein Objekt, welches die Kommunikation anderer Objekte organisiert, indem<br />
er Nachrichten weiterleitet. Da die beteiligten Objekte sich nicht kennen müssen, fördert<br />
dieses Muster die lose Kopplung der Objekte. Im Organicer wird diese Kommunikation mit<br />
dem in Abschnitt 3.4.2 vorgsetellten Signal-Slot-Konzept umgesetzt, so dass auch der Me-<br />
diator seine Beobachter nicht kennen muss. Um die Einzigartigkeit des Mediators zu sichern<br />
wird dieser als Singleton implementiert. Die im Organicer verwendete Mediatorklasse, der<br />
OpMediator, ist eine Ableitung der Mediator-Klasse, die Teil der SceneHandler-Bibliothek<br />
(siehe Kapitel 4.1.1) ist und besitzt neben den Möglichkeiten der Oberklasse, anwendungs-<br />
spezifischen Erweiterungen.<br />
Das Diagramm 3.26 zeigt, wie eine Update-Nachricht <strong>eines</strong> Beobachters vom Mediator<br />
weitergeleitet wird .<br />
Model-View-Controller<br />
Mit dem MVC-Prinzip kann eine interaktive Anwendung in drei Komponenten (siehe<br />
) aufgeteilt werden. Das Model enthält die Kerndaten der Anwendung und ist un-<br />
abhängig von speziellen Ausgabeformaten oder Eingabemöglichkeiten. Deshalb ist es mög-<br />
lich, eine andere Ansicht der Daten zu entwickeln ohne Veränderungen am Model vornehmen<br />
41
KAPITEL 3. GRUNDLAGEN<br />
zu müssen. In einem Programm zur <strong>3D</strong>-Visualisierung verwaltet das Model Bilddaten, mit<br />
den zugehörigen Materialeigenschaften und Spezifikationen (siehe Kapitel 5.4). Diese Da-<br />
ten sollen auf verschiedene Arten dargestellt werden können. Die Ansichten (engl. views)<br />
präsentieren diese Informationen und bilden mit den Steuerungskomponenten (Controller)<br />
die Benutzerschnittstelle.<br />
Kompositum<br />
Die Klassenbibliothek Qt (Abschnitt 3.4.2) benutzt wie die meisten Klassenbibliotheken<br />
zur Erstellung von Benutzerschnittstellen das Kompositum-Muster. Dabei wird die Graphi-<br />
sche Benutzerschnittstelle aus Komponenten zusammengefügt, die entweder aus einfachen<br />
oder zusammengesetzten Fenstern bestehen. Da alle diese Komponenten von einer gemein-<br />
samen Oberklasse abgeleitet sind, verfügen sie über gemeinsame geerbte Methoden, die<br />
den Umgang mit den verschiedenen Widgets erleichtern. Deshalb lassen sich beispielswei-<br />
se einfache und zusammengesetzte Widgets beim Erstellen <strong>eines</strong> Layouts mit demselben<br />
SetPosition-Aufruf positionieren.<br />
Einfache Fenster sind beispielsweise Buttons oder Listviews, während die selbst definierten<br />
Customwidgets auch Container für verschiedene Fenster sein können. Eine für das Kom-<br />
positionsmuster typische Objektstruktur könnte wie in Abbildung 3.27 aussehen und auf<br />
ähnliche Weise ist auch die Oberfläche des Organicers gestaltet (siehe Kapitel 5.5). Dabei<br />
nehmen das Mainframe und die Customwidgets als Container andere Objekte, wie Buttons<br />
und ein Listview auf.<br />
3.4.2 Die Klassenbibliothek Qt<br />
Qt ist eine C++-Klassenbibliothek, mit der plattformunabhängige Programme entwickelt<br />
werden können. Dabei bietet Qt zum Aufbau einer Benutzerschnittstelle verschiedene Fens-<br />
ter wie Frames, Buttons, Dialoge und Listviews an. Diese sind alle von der Oberklasse<br />
QWidget abgeleitet und können als Container andere Widgets aufnehmen. Mit der OpenGL-<br />
Extension bietet Qt die Möglichkeit an, Anwendungen in der Bildverarbeitung zu entwickeln<br />
und stellt ein QGLWidget mit einem gültigen OpenGL-Kontext zur Verfügung.<br />
Das Qt-Objektmodell<br />
Eine modulare, objektorientierte Programmierung wird dabei insbesondere durch den Signal-<br />
Slot-Mechanismus und der Möglichkeit, Customwidgets zu entwickeln und diese für ver-<br />
42
1<br />
CustomWidget<br />
n<br />
1<br />
Button<br />
1<br />
MainWidget<br />
Button<br />
Listview<br />
1 1<br />
n<br />
1<br />
CustomWidget<br />
3.4. GRUNDLAGEN DER INFORMATIK<br />
WidgetStack<br />
1<br />
1<br />
Button<br />
1<br />
1<br />
Widget<br />
1 1 1<br />
n n n<br />
Button<br />
Abbildung 3.27: Benutzerschnittstelle als Kompositum-Muster<br />
schiedene Anwendungen nutzen zu können, unterstützt. Der Signal-Slot-Mechanismus dient<br />
Objekten zur Kommunikation innerhalb <strong>eines</strong> Qt-Programms. Dabei werden die Ereignisse<br />
(Signals) beispielsweise von Steuerelementen ausgelöst und ein Empfänger (Slot) reagiert<br />
auf dieses Signal. Der Sender des Signals muss seinen Empfänger nicht kennen. Mit diesem<br />
Nachrichtenkonzept wird eine Kommunikation der Komponenten, aber auch eine modula-<br />
re Programmentwicklung ermöglicht. Mit dem Qt-Designer steht ein Tool zur Erstellung<br />
von Benutzeroberflächen zur Verfügung. Die Formulare und Bilder <strong>eines</strong> Projektes werden<br />
in Projektdateien (.pro) gespeichert und können dazu genutzt werden, plattformspezifi-<br />
sche Makefiles zu erzeugen. Die Informationen zu den Formularen werden in Dateien im<br />
XML-Format gespeichert, aus denen die Header- und Source-Dateien des Formulars gene-<br />
riert werden. Zusätzliche Informationen der Formulare werden in speziellen Header-Dateien<br />
(ui.h) abgelegt und welche zum Source-Code eingebunden.<br />
Mit der Möglichkeit Customwidgets enzwickeln zu können, erleichtert Qt die <strong>Entwicklung</strong><br />
von Komponenten, welche in verschiedenen Anwendungen in die Benutzerschnittstelle ein-<br />
gebaut werden können.<br />
43
KAPITEL 3. GRUNDLAGEN<br />
44
4.1 Der Organicer Prototyp<br />
4 Stand der Technik<br />
Der Organicer wurde zur Unterstützung von Leberoperationsplanungen entwickelt und wird<br />
auf diesem Gebiet seit 2002, in Zusammenarbeit mit der Chirurgischen Universitätsklinik<br />
Heidelberg eingesetzt. Dabei zeichnet sich dieses Visualisierungstool insbesondere durch<br />
seine Funktionalität aus. Deshalb werden im Anschluss die SceneHandler-Bibliothek, die<br />
Transparenzdarstellung und das Einteilen <strong>eines</strong> Gefäßbaumes dargestellt.<br />
4.1.1 Die SceneHandler-Bibliothek<br />
Die SceneHandler-Bibliothek stellt das Darstellungsfenster der Anwendung zur Verfügung,<br />
in der Oberflächenmodelle visualisiert und interaktiv verändert werden. Dieses Fenster ist<br />
von der Klasse QGLWidget (siehe Kapitel 3.4.2) abgeleitet und eignet sich deshalb zur<br />
Darstellung von Visualisierungen mit OpenGL. Um dem Benutzer die Möglichkeit zu bieten,<br />
die Szene aus verschiedenen Blickrichtungen zu betrachten ist es möglich, diese Szene zu<br />
rotieren oder transformieren (siehe Abschnitt 3.3.1). Durch diese Navigationsmöglichkeit,<br />
kann ein Gefäßbaum bei der Einteilung in Segmente (Abschnitt 4.1.2), in verschiedene<br />
Richtungen bewegt und markiert werden.<br />
Auf welche Art, Oberflächenmodelle dargestellt werden, ist in den verschiedenen<br />
Visualisierer-Klassen festgelegt. Diese Visualisierer werden einem Datenelement (Kapitel<br />
5.4.1) zugeordnet und können dieses auf verschiedene Arten darstellen (Kapitel 5.3.2).<br />
Darstellung transparenter Objekte<br />
Bei einer <strong>3D</strong>-Rekonstruktion der Leber mit Oberflächenmodellen ist es notwendig Tumore<br />
innerhalb der Gefäßhülle sehen zu können. Deshalb muss die Darstellung der Leberhülle mit<br />
transparenten Eigenschaften möglich sein. Die Abbildung 3.10 zeigt an einem einfachen<br />
Beispiel, die Visualisierung <strong>eines</strong> Objektes mit transparenten Oberflächeneigenschaften. Bei<br />
der Darstellung von transparenten Objekten verändert die Reihenfolge der Visualisierung das<br />
Visualisierungsergebnis. Für eine korrekte Darstellung müssen die Elemente in Blickrichtung<br />
45
KAPITEL 4. STAND DER TECHNIK<br />
sortiert und die näher zum Betrachter liegenden Dreiecke über die entfernteren gezeichnet<br />
werden.<br />
Blickrichtung<br />
(a) Raumunterteilung<br />
1<br />
2<br />
Blickrichtung<br />
Abbildung 4.1: Verfahren der Transparenzdarstellung<br />
(b) Sortierung aller Dreiecke<br />
Die Zahlen kennzeichnen die Reihenfolge der Darstellung<br />
Im Organicer sind zwei Verfahren zur Sortierung der Dreiecke von Oberflächenmodellen<br />
realisiert, die in der Abbildung 4.1 veranschaulicht werden. Die Qualität der Transparenz-<br />
darstellung richtet sich dabei nach der Auswahl der, zur Sortierung verwendeten, Elemente.<br />
Abbildung 4.1(a) zeigt ein Verfahren, bei dem die Dreiecke nicht einzeln sortiert, sondern<br />
die Szene nach einem Oktreeverfahren (siehe Kapitel 5.16(a)) in Raumteile bzw. Würfel<br />
zerlegt wird. Eine weitere Möglichkeit, ist die Sortierung der einzelnen Dreiecke (Abbil-<br />
dung 4.1(b)). Beide Verfahren verwenden die Schwerpunktkoordinaten der Elemente als<br />
Sortierkriterium.<br />
In der Abbildung 4.1(a) ist ein Problem des Raumunterteilungsverfahrens, auf zwei Di-<br />
mensionen übertragen, dargestellt. Die Dreiecke innerhalb <strong>eines</strong> Würfels bleiben unsortiert.<br />
Deshalb kann es passieren, dass entferntere Dreiecke (rotes Dreieck), über näher liegende<br />
Dreiecke (blaues Dreieck) gezeichnet werden und es dadurch in den Bereichen der Überla-<br />
gerung, zu einer fehlerhaften Darstellung kommt.<br />
Die Abbildungen 4.1 zeigen, dass bei bestimmten Konstellationen nur die Sortierung über<br />
46<br />
2<br />
1
die einzelnen Dreiecke eine korrekte Darstellung ermöglicht.<br />
+z<br />
Abbildung 4.2: Transparenzdarstellung<br />
y<br />
x<br />
-z<br />
4.1. DER ORGANICER PROTOTYP<br />
Dies alleine reicht aber nicht aus, da<br />
sich bei einer interaktiven Anwendung die<br />
Blickrichtung durch Ansichts- oder Mo-<br />
delltransformationen (siehe 3.3.1) ändern<br />
kann, müssen die Sortierungen in verschie-<br />
denen Richtungen möglich sein. Dazu ver-<br />
fügt die Klasse ElementOrganizer über drei<br />
Listen, in denen die x-,y- und z-Werte der<br />
Schwerpunktskoordinaten gespeichert wer-<br />
den. Da die Listen eine aufsteigende und<br />
absteigende Sortierung anbieten, können<br />
auf diese Weise 6 verschiedene Richtungen<br />
repräsentiert werden. Damit ist es möglich<br />
eine Sortierung entlang der drei Achsen des Koordinatensystems der Szene in positiver oder<br />
negativer Richtung durchzuführen.<br />
Um während der Visualisierung die Blickrichtung angeben zu können, wird die Szene in 6<br />
Pyramiden aufgeteilt. In Abbildung 4.2 soll der rote, transparente Würfel die gesamte Szene<br />
darstellen. Verläuft der, vom Beobachter zum Ursprungspunkt gerichtete, Sehstrahl durch<br />
den Bereich der beiden grünen Pyramiden, werden die Elemente in z-Richtung sortiert.<br />
4.1.2 Einteilung <strong>eines</strong> Gefäßbaumes<br />
Die, bei einer Leberoperationsplanung verwendeten, Gefäßbäume können durch eine Baum-<br />
oder Graphstruktur symbolisch beschrieben und in einem speziellen Format (.ves) gespei-<br />
chert werden.<br />
Diese Beschreibung enthält die Informationen über die Lage der Verzweigungs- und End-<br />
punkte und den Durchmesser der Gefäße. Um diese Informationen zu erhalten, werden in<br />
den Bilddaten die Gefäße segmentiert, mit einer Skelettierung auf eine eindimensionale Li-<br />
nie reduziert, der Durchmesser bestimmt und das Ergebnis als Graph oder Baum abgelegt<br />
(siehe ).<br />
Der zwischen zwei Verzweigungspunkten liegende Gefäßabschnitt, ist ein VesselElement.<br />
Ein VesselElement verläuft durch eine bestimmte Anzahl von Voxeln, die in der Abbildung<br />
4.3(a) rot markiert sind und ist die kleinste Einheit, die einem bestimmten Gefäß- oder<br />
47
KAPITEL 4. STAND DER TECHNIK<br />
(a) Darstellung Gefäßbaum<br />
Abbildung 4.3: Einteilung <strong>eines</strong> Gefäßbaumes<br />
Segment 1 Segment 2<br />
1<br />
1<br />
1<br />
2<br />
2<br />
(b) Eingeteilter Gefäßbaum<br />
Segmenttyp (siehe Kapitel 3.1.1), durch eine Identifikationsnummer zugeordnet werden<br />
kann. Für diese Zuordnung muss der Gefäßbaum interaktiv bearbeitet werden.<br />
Zur Visualisierung werden die Informationen über den Gefäßbaum aus einer Datei (.ves)<br />
gelesen und die Punkte des Gefäßbaumes mit Linien oder Zylindern verbunden. Mit dem<br />
Picking-Mechanismus von OpenGL können in der Szene vorhandene Objekte mit der Maus<br />
selektiert werden. Nach dem Einstellen <strong>eines</strong> speziellen Rendermodus zur Selektion wird die<br />
Szene nach dem Rendern nicht in den Bildspeicher eingetragen, sondern die Identifikations-<br />
nummern der VesselElemente in einen speziellen Puffer geschrieben. Nach einem Mausklick<br />
kann in diesem Puffer nach Objekten gesucht werden, die im Bereich der Mausposition<br />
liegen und deren Indentifikationsnummer abgefragt werden.<br />
Die auf diese Weise selektierten VesselElemente können auf drei verschiedene Arten markiert<br />
werden:<br />
48<br />
Markierung des Bereiches zwischen zwei Verzweigungspunkten.<br />
2
Markierung vom Gefäßelement zur Wurzel des Gefäßbaumes.<br />
Markierung vom Gefäßelement zu den Endpunkten.<br />
4.1.3 Workflow Leberoperationsplanung<br />
1.<br />
2.<br />
3.<br />
4.<br />
5.<br />
6.<br />
7.<br />
8.<br />
9.<br />
Segmentierte Bilddaten auf<br />
Festplatte exportieren<br />
Pic-Volumen erstellen<br />
Pic-Volumen skalieren<br />
Oberflächen erzeugen<br />
Gefäßbaum segmentieren<br />
Gefäßbaum einteilen<br />
Segmente berechnen<br />
Resektionsvorschlag<br />
bestimmen<br />
Restvolumen bestimmen<br />
Diagramm 4.4:<br />
Workflow<br />
4.1. DER ORGANICER PROTOTYP<br />
Eine spezifische Planung von Leberoperationen ist, wegen der<br />
individuell stark variierenden Ausprägung der Leber, Grundlage<br />
<strong>eines</strong> Therapieerfolgs. Eine wichtige Aufgabe ist es, den Gefäß-<br />
baum zu analysieren und in Segmente einzuteilen (vergl. Kapitel<br />
3.1.1). Nach der Bestimmung der Lage der Gefäße relativ zu den<br />
Tumoren wird ein Resektionsvorschlag erstellt, der diejenigen<br />
Segmente berücksichtigt, die zu einem Versorgungsbereich der<br />
tumornahen Gefäße gehören. Im allgemeinen wird davon ausge-<br />
gangen, dass der Resektionsvorschlag einen Sicherheitsabstand,<br />
von mindestens 0.5 cm berücksichtigen muss.<br />
Das verbleibende Restvolumen entscheidet über die Durchführ-<br />
barkeit einer Leberoperation, da dieses die postoperative Leber-<br />
leistung bestimmt. Dabei reichen ca. 50% Restleberparenchym<br />
zur Regeneration der Leber aus. In den 4-5 Wochen nach einer<br />
solchen Operation, wächst die Leber wieder zu ihrer ursprüngli-<br />
chen Größe heran.<br />
Das Diagramm 4.4 zeigt den Workflow einer Operationspla-<br />
nung, der mit dem Exportieren der Bilddaten aus dem Te-<br />
leradiologiesystem CHILI beginnt. Für die Erzeugung des PIC-<br />
Volumens, der Skalierung und der Oberflächenerzeugung muss<br />
jeweils ein neues Tool verwendet werden.<br />
Aus den Segmentierungsergebnissen werden die Oberfläche des<br />
Tumors und die Leberhülle generiert. Die Gefäßbäume werden<br />
aus dem Pic-Volumen über ein Volume-Growing-Verfahren (Ka-<br />
pitel 3.1.6) bestimmt. Zur Einteilung wird der Gefäßbaum im Organicer visualisiert und<br />
interaktiv bearbeitet (Abschnitt 4.1.2). Nach der Speicherung dieser Einteilung dient der<br />
Gefäßbaum, zusammen mit der Leberhülle, als Grundlage zur Bestimmung der Leberseg-<br />
mente.<br />
49
KAPITEL 4. STAND DER TECHNIK<br />
4.2 Andere Systeme<br />
Der Organicer profitiert vor allem von der engen Zusammenarbeit mit der Radiologie und<br />
Chirurgie der Universitätsklinik Heidelberg (siehe Abbildung 2.1). So wird jede Leberope-<br />
rationsplanung von Experten aller drei Fachrichtungen (Chirurgie, Radiologie, Informatik)<br />
besprochen, um die Diagnose und Durchführung der Operationen zu optimieren. Dieser<br />
routinemäßige Einsatz der Software, hat zu einer fortschreitenden Verbesserung der Funk-<br />
tionalität und Benutzbarkeit geführt. Darüber hinaus wird das Softwaresystem durch bereits<br />
veröffentlichte und derzeit laufende Studien evaluiert.<br />
Operationsplanungen im Bereich der Leberchirurgie werden derzeit von zwei weiteren Grup-<br />
pen angeboten. Die Arbeitsgruppe des Instituts MeVis in Bremen wendet zur Durchführung<br />
ihrer Planungen vergleichbare Methoden wie der Organicer an. MeVis verfolgt zur Zeit einige<br />
Ziele (siehe ), wie die systematische Evaluierung und die Verfeinerung der<br />
<strong>3D</strong>-Interaktion zur Spezifikation von Resektionsgebieten, bei denen das Softwaresystem Or-<br />
ganicer einen Vorsprung aufweist. Dies könnte darauf zurückzuführen sein, dass MeVis der<br />
routinemäßige Einsatz im klinischen Betrieb fehlt, ohne den eine Evaluierung und Weiterent-<br />
wicklung <strong>eines</strong> Operationsplanungstools nicht möglich ist. Nur durch diesen Praxiseinsatz<br />
können die Operationsvorschläge des Organicers innerhalb einer Bearbeitungszeit von einer<br />
Stunde angeboten werden. Dies ist für die klinische Akzeptanz von erheblicher Bedeutung.<br />
Eine vergleichbare abgesicherte Maßzahl liegt für das MeVis-System nicht vor. Während<br />
MeVis in unterschiedlichen Bereichen (z.B. Segmentierung, Gefäßbaumtrennung) auf auto-<br />
matische Verfahren setzt, benutzt die Operationsplanung der MBI-Abteilung des DKFZ in<br />
diesen Bereichen interaktive Mechanismen. Ein Vorteil der interaktiven Methode ist darin<br />
zu sehen, dass automatische Verfahren niemals eine 100%-tige Fehlerfreiheit garantieren<br />
und somit eine interaktive Nachbearbeitung notwendig ist. MeVis und die MBI-Abteilung<br />
arbeiten zur Zeit an der Bemaßung einer <strong>3D</strong>-Visualisierung und der Farbcodierung von<br />
Abständen wichtiger Strukturen (siehe Kapitel 5.7).<br />
Die zweite Gruppe, die sich mit Visualisierungen der Leber beschäftigt, ist die von Luc Soler<br />
geleitete IRCAD Gruppe in Strassburg. Dort werden allerdings keine Operationsvorschläge<br />
berechnet, sondern lediglich Segmentanatomien erstellt. Auch hier werden wie bei MeVis<br />
automatische Verfahren zur Extraktion der acht Lebersegmente eingesetzt, die die oben<br />
genannten Nachteile vorweisen.<br />
50
4.2. ANDERE SYSTEME<br />
Durch die <strong>Entwicklung</strong> des Teleradiologiesystems CHILI zu einer Visualisierungsplattform,<br />
ensteht ein weiterer Vorteil der Operationsplanungen in Heidelberg, da hiermit die Seg-<br />
mentierungen, die Gefäßbaumanalyse und die Visualisierung der Ergebnisse innerhalb einer<br />
Programmumgebung möglich ist. Ein solches System steht MeVis und IRCAD für ihre Pla-<br />
nungen nicht zur Verfügung.<br />
51
KAPITEL 4. STAND DER TECHNIK<br />
4.3 Das Teleradiologiesystem CHILI<br />
Das Teleradiologiesystem CHILI wurde vom Steinbeis-Transferzentrum Medizinische Infor-<br />
matik (STZ-MI) in Heidelberg entwickelt und ist seit 1998 im Einsatz. Zur Erklärung des<br />
Begriffes Teleradiologie dient die Definition von Engelmann et al. in :<br />
” Die Aufgabe der Teleradiologie ist die Übertragung von radiologischen Bildern<br />
von einem Ort zu einem anderen zwecks Interpretation und Konsultation. Die<br />
digital übertragenen Bilder können anschließend an verschiedenen Orten gleich-<br />
zeitig dargestellt, bearbeitet und besprochen werden.“<br />
4.3.1 Aufbau des Teleradiologisystems CHILI<br />
Das Teleradiologiesystem verfügt über eine DICOM-Schnittstelle über die Bilddaten zur<br />
Verfügung gestellt werden können. Radiologische Bilder können aus verschiedenen bildge-<br />
benden Geräten (Modalitäten) in CHILI integriert und dort in einer PostgreSQL Datenbank<br />
gespeichert werden. Der Datentransfer basiert idealerweise auf dem radialogischen Kommu-<br />
nikationsstandard DICOM, darüber hinaus können aber auch andere Datenformate impor-<br />
tiert oder exportiert werden. Intern arbeitet CHILI mit dem, in Kapitel 3.1.5 vorgestellten<br />
PIC-Format und stellt in der PlugIn-Schnittstelle die Daten auch in diesem Format zur<br />
Verfügung-<br />
CHILI PlugIn Konzept<br />
CHILI bietet durch ein PlugIn Konzept die Möglichkeit, die Software den individuellen Anfor-<br />
derungen der Kunden anzupassen. Die Schnittstelle der Zusatzmodule ist in einem PlugIn<br />
Software Developer Kit offengelegt. Die Zusatzmodule, mit der die Funktion von CHILI<br />
erweitert werden kann, werden beim Start von CHILI dynamisch geladen.<br />
PACS<br />
Ein PACS (Picture Archiving and Comminacation System) dient zur Speicherung, Verwal-<br />
tung, Übermittlung und Darstellung digitaler medizinischer Bilddaten. Das digitale Archiv<br />
besteht dabei aus einer Datenbank, in der Daten über Bilder und Patienteninformationen<br />
eingetragen werden. Zu einem Pacs gehört weiterhin ein Massenspeicher auf dem die Bild-<br />
daten abgelegt sind. Dieser Speicher ist so aufgebaut, dass auf aktuelle Daten möglichst<br />
52
4.3. DAS TELERADIOLOGIESYSTEM CHILI<br />
schnell zugegriffen werden kann. Darüberhinaus steuert ein PACS die automatische Über-<br />
tragung der, durch bildgebende Geräte erzeugten, digitalen Bilddaten. Das CHILI-System<br />
kann als regulärer PACS-Arbeitsplatz zur Diagnose und Bildbetrachtung eingesetzt werden<br />
( siehe ) und damit die Möglichkeit der einfachen und sicheren Bildübertragung<br />
an andere Stellen, sowie die Möglichkeit interner und externer Telekonferenzen bieten.<br />
Datenbankanbindung<br />
Der Aufbau der PostgreSQL Datenbank ist auf das, im Kapitel 3.1.1 bechriebene, DICOM-<br />
Datenmodell ausgerichtet. Für die DICOM-Objekte Patient, Studie, Serie und CT-Bild<br />
werden durch die Datenbankobjekte patient t, study t, series t und image t die DICOM-<br />
Informationen und weitere interne Daten repräsentieren und als Tabellen darstellen. Die<br />
eigentlichen Bilddaten werden aber nicht in der Datenbank gespeichert, sondern das Da-<br />
tenbankobjekt image t erhält jediglich den Pfad, an dem die Bilddaten auf der Festplatte<br />
liegen. Mit dem Datenbankobjekt text t ist das Eintragen von Textinformationen in die<br />
Datenbank möglich.<br />
Zugriff auf die Datenbankinformationen<br />
Abbildung 4.5:<br />
Lichtkasten<br />
Die graphische Oberfläche von Chili bietet drei verschiedene Datenbank-<br />
ansichten bzw. Auswahlmöglichkeiten an (Abbildung 5.19). In den Aus-<br />
wahlfenstern für Studie und Serie sind die aktuell ausgewählten Einträge<br />
grau unterlegt. Im Lichtkasten von CHILI ist der Zugriff auf die Bild- und<br />
Texteinträge der aktuellen Serie möglich. In der Abbildung 4.3.1 zeigt der<br />
Lichtkasten Bilder einer Originalserie an, während in Abbildung 5.19 die<br />
Szeneninformationen des Organicer-PlugIns durch Icons repräsentiert wer-<br />
den.<br />
53
KAPITEL 4. STAND DER TECHNIK<br />
54
5 Praktische Realisierung<br />
Innerhalb dieses Kapitels werden zuerst die zu behebenden Mängel des Organicer Prototypen<br />
aufgelistet, bevor ein Soll-Konzept die Lösung dieser Probleme beschreibt. Die weiteren<br />
Abschnitte beschreiben die praktische Umsetzung dieser Lösungen.<br />
Zur Beschreibung und Dokumentation der Designmaßnahmen wird die Unified Modeling<br />
Language (UML) verwendet, die u.a. in den Büchern und beschrieben<br />
ist. Die Notation der Aktivitätsdiagramme ist aus übernommen. Zur Beschrei-<br />
bung der Synchronisation von Aktivitäten können Folgeaktivitäten nicht nur beim Vorliegen<br />
aller Eingangsaktivitäten starten (UND-Synchronisation), sondern schon beim Vorliegen ei-<br />
ner (XOR-Synchronisation) bzw. mindestens einer eingehenden Aktivität (OR). Außerdem<br />
ermöglicht diese Notation das wiederholte Ausführen von Aktivitäten, die innerhalb <strong>eines</strong><br />
schwarzen Balkens mit der Bezeichnung“* for each ...”und <strong>eines</strong> Synchronisationsbalkens<br />
liegen. In den Aktivitätsdiagrammen 5.25 und 5.10 wird diese Notation benutzt, um Akti-<br />
vitäten zu beschreiben, die nacheinander für alle Elemente der Datenliste (siehe Abschnitt<br />
5.4) ausgeführt werden.<br />
Dabei sind in den Klassen- und Objektdiagrammen nur diejenigen Methoden und Attribute<br />
berücksichtigt, die für das Verständnis der Dokumentation notwendig sind und auf die in der<br />
begleitenden Beschreibung eingegangen wird. Die Implementierung benutzt dabei C++ als<br />
objektorientierte Programmiersprache und verwendet die in Abschnitt 3.4.1 aufgeführten<br />
Entwurfsmuster zur Verbesserung der Programmstruktur.<br />
5.1 Ist-Analyse<br />
Der Organicer ist als Prototyp <strong>eines</strong> Visualisierungstools vorhanden und kann in der Lebe-<br />
roperationsplanung eingesetzt werden. Allerdings bestehen bei dem jetzigen Ablauf einige<br />
Mängel:<br />
5.1.1 Datentransfer<br />
• Durch die fehlende Integration des Organicer und der verschiedenen zur Bildaufbe-<br />
reitung benötigten Tools in das Teleradiologiesystem, müssen die Bilddaten auf den<br />
55
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
lokalen Fileserver exportiert werden.<br />
• Die Ergebnisse der Operationsplanung müssen zur Validierung beim Radiologen, zur<br />
Präsentation bei der chirurgischen Besprechung und zu einer Visualisierung, während<br />
einer Operation, auf ein Laptop übertragen werden. Für diese drei Anlässe muss ein<br />
DKFZ-Mitarbeiter Termine mit den betreffenden Personen ausmachen und sich mit<br />
dem Laptop in die Klinik begegeben.<br />
• Zur Präsentation der Ergebnisse wird ein DKFZ-Mitarbeiter benötigt, der die <strong>3D</strong>-<br />
Rekonstruktionen im Organicer vorstellt.<br />
Diese Mängel beschränken den Einsatz der computergestützten Operationsplanung, in der<br />
klinischen Routine, da die ersten beiden Punkte zu einer redundanten und inkonsistenten<br />
Datenhaltung führen. Außerdem müssen für die verschiedenen Präsentationen Termine mit<br />
den jeweiligen Teilnehmern vereinbart werden, die im klinischen Alltag nicht immer zu finden<br />
sind. Des weiteren muss der DKFZ-Mitarbeiter für diese Termine Zeit einplanen, wodurch<br />
Personalkosten entstehen, die einem Einsatz dieser Operationsplanungen, als Dienstleis-<br />
tungsangebot, entgegenstehen.<br />
5.1.2 Bildverarbeitung<br />
Zur Weiterverarbeitung der Segmentierungsergebnisse werden neben dem Organicer, drei<br />
weitere Tools eingesetzt. Mit einem dieser Programme werden die segmentierten Einzel-<br />
schichten zu einem Pic-Bildvolumen 3.1.5 zusammengesetzt und auf der Festplatte abge-<br />
speichert. Falls nach einer Verbesserung der Segmentierung kein Export der Daten erfolgt<br />
und das PIC-Volumen neu erstellt wird, führt dies zu einer fehlerhaften Darstellung.<br />
5.1.3 Programmstruktur<br />
56<br />
• Die Programmstruktur ist nur mit einer automatisch generierten Dokumentation be-<br />
schrieben, die eine eingeschränkte Perspektive auf das Softwaremodell bietet und keine<br />
dynamischen Aspekte der Anwendung berücksichtigt.<br />
• Die Anwendungsdaten werden in verschiedenen Listen gehalten, die alle seperat ak-<br />
tualisiert werden müssen. Durch diese dezentrale, redundante Datenhaltung, wird die<br />
Fehleranfälligkeit und Komplexität des Programmes erhöht. Auch der Datenaustausch
5.2. SOLL-KONZEPT<br />
ist nicht einheitlich organisiert, sondern verwendet neben einer Datei mit der Szenen-<br />
beschreibung im XML-Format, eine Binärdatei pro vorhandenem Datenelement zum<br />
Abspeichern der Materialeigenschaften.<br />
5.2 Soll-Konzept<br />
Die in der Ist-Analyse beschriebenen Mängel sollen beseitigt und die Durchführung von<br />
Operationsplanungen im Teleradiologiesystem CHILI möglich sein.<br />
5.2.1 Datentransfer<br />
• Die PlugIn-Version des OrganNicers soll aus den, in der CHILI-Datenbank abgeleg-<br />
ten, Segmentierungsergebnissen Oberflächenmodelle erzeugen, damit keine Bilddaten<br />
exportiert werden müssen.<br />
• Die Ergebnisse der Operationsplanung sollen mit dem webbasierten Informationssys-<br />
tem über ein Netzwerk für die verschiedenen Präsentationen angeboten werden. Dazu<br />
sollen die <strong>3D</strong>-Rekonstruktionen in das internetgeeignete VRML-Format ( siehe 3.3.6)<br />
umgewandelt werden. Da die VRML-Szenen in einem einfach zu bedienenden Plu-<br />
gIn <strong>eines</strong> Webbrowsers darzustellen sind, wird für diese Art der Präsentation kein<br />
DKFZ-Mitarbeiter mehr benötigt.<br />
• Integration aller zu einer Operationsplanung benötigten Tools in das Teleradiologie-<br />
system CHILI.<br />
5.2.2 Bildverarbeitung<br />
Die PlugIn-Version soll, die zu einer Segmentierungsserie gehörenden Einzelbilder, mit einer<br />
Anfrage an die CHILI-Datenbank selektieren und aus diesen, ohne Abspeichern des Pic-<br />
Volumens, ein Oberflächenmodell erzeugen. Vor der Visualisierung der Oberflächenmodelle<br />
soll überprüft werden, ob die zugrundeliegenden Segmentierungsergenisse verbessert wurden,<br />
um das Darstellen inkonsistenter Daten zu verhindern.<br />
5.2.3 Programmstruktur<br />
57
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
• Die Dokumentation soll durch eine detaillierte Beschreibung der Programmentwurfs<br />
das Verständis des Softwaresystems verbessern. Dabei sollen die dynamischen Aspek-<br />
te der Anwendung durch Aktivitätsdiagramme und Sequenzdiagramme beschrieben<br />
werden.<br />
• Die Daten sollen in einer zentralen Datenliste gehalten werden, wodurch eine modula-<br />
re Programmstruktur unter Verwendung des Model-View-Controller Entwurfsmusters<br />
(Abschnitt 5.3.1) möglich ist. Zur Vereinfachung des Datenaustausches soll ein ein-<br />
heitliches Dateiformat zur Szenenbeschreibung entwickelt (siehe Abschnitt 5.4.4)<br />
werden und die zum Datenaustausch entwickelten Strukturen in seperate Klassen<br />
gekapselt werden.<br />
5.2.4 Funktionserweiterung<br />
• Durch die <strong>Entwicklung</strong> einer PlugIn-Adapterklasse soll der Zugriff auf die Datenbank<br />
des Teleradiologiesystems möglich sein. Daneben sollen weitere neue Klassen den<br />
Umgang mit den im Pic-Format vorliegenden Bilddaten ermöglichen.<br />
• Zur Verbesserung der Qualität der Leberoperationsplanung sollen der Abstand der<br />
Gefäße zum berechnet und ein Sicherheitsbereich um den Tumor farblich markiert<br />
werden können.<br />
• Die <strong>Entwicklung</strong> einer Materialklasse soll eine einheitliche Materialverwaltung bei der<br />
Verwendung von OpenGL- und VTK-Visualisierungen ermöglichen. Diese Klasse soll<br />
in Verbindung mit einem Fenster der Benutzeroberfläche die Materialzuweisung an<br />
die Szenenobjekte vereinfachen.<br />
5.3 Einsatz der Entwurfsmuster<br />
5.3.1 Model-View-Controller<br />
Das Klassendiagramm 5.1 zeigt vereinfacht die Umsetzung des Model-View-Controller Prin-<br />
zips im Organicer, indem es sich auf die wichtigsten Klassen konzentriert und die Dialoge,<br />
Toolbars und Popupmenus nicht berücksichtigt. Der in Abschnitt ?? vorgestellte Media-<br />
tor enthält als Model des MVC-Entwurfsmusters, die Kernfunktionalität und die Daten der<br />
58
View Modell View + Controller<br />
SceneHandler<br />
Mediator<br />
paintGL()<br />
mousePressEvent()<br />
mouseMoveEvent()<br />
Mediator<br />
Elementorganizer<br />
Datenliste<br />
updateMVC()<br />
getElementOrganizer()<br />
getDataNode()<br />
Controller<br />
PropertyWidget InteractionWidget<br />
5.3. EINSATZ DER ENTWURFSMUSTER<br />
Mediator<br />
Datenansicht<br />
slotUpdateListView()<br />
editProperty(ViewProperty*)()<br />
updateMVC()<br />
Abbildung 5.1: Model-View-Controller Prinzip<br />
Anwendung. Aufgrund seiner Einzigartigkeit eignet er sich dazu, die anderen einzigartigen<br />
Objekte der Anwendung, wie Elementorganizer (siehe 4.1.1) und Datenliste (Abschnitt<br />
5.4.2), zu verwalten und anderen Objekten über geeignete Methoden den Zugriff zu ermög-<br />
lichen.<br />
Der Mediator erfüllt dabei die im Sequenzdiagramm 3.26 dargestellte Aufgabe, die Beob-<br />
achter (Views und Controller) zu benachrichtigen und organisiert gleichzeitig den Zugriff auf<br />
die Datenliste. Die in Abschnitt 5.6.2 beschriebene Datenansicht kann den Steuerelemen-<br />
ten und den Ansichten zugeordnet werden, da sie die Datenliste in einer bestimmten Form<br />
anzeigt, aber auch als Steuerelement die Möglichkeit bietet, diese zu verändern. Mit dem<br />
Propertywidget sind Veränderungen an den Materialeigenschaften der Datenelemente mög-<br />
lich (siehe 5.6.1). Das Interactionwidget wird bei der Einteilung der Gefäßbäume verwendet<br />
(siehe 4.1.2). Der SceneHandler ( siehe 4.1.1) ist dagegen ein r<strong>eines</strong> Ansichtenobjekt, mit<br />
einer Funktion die auf die Aktualisierungsnachricht des Mediators reagiert.<br />
5.3.2 Strategiemuster<br />
Die Darstellung bestimmter Visualisierungsdaten kann nicht nur in verschiedenen Ansich-<br />
ten, sondern auch mit unterschiedlichen Algorithmen erfolgen. Die Äste der Gefäßbäume<br />
(siehe Kapitel 4.1.2) können mit Linien oder Zylindern dargestellt werden oder die Oberfä-<br />
chenmodelle, je nach gewünschter Qualität der Transparenzeigenschaften, unterschiedlich<br />
aufwendig sortiert werden. Durch Kapselung dieser Algorithmen in Klassen, mit einer ge-<br />
meinsamen Schnittstelle, werden sie von den Datenobjekten entkoppelt und können separat<br />
geändert oder ausgetauscht werden.<br />
Die Auswahl, welcher Algorithmus zum Darstellen der Datenelemente verwendet wird, er-<br />
folgt im Organicer in einem eigenen Modul, dem ElementOrganizer. Das Sequenzdiagramm<br />
59
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
ElementOrganizer DataNode STLVisualizer<br />
setStrategie(Transparence)<br />
STLVisualizer*<br />
drawElement(int id)<br />
Abbildung 5.2: Strategie Transparenzdarstellung<br />
5.2 zeigt die Auswahl <strong>eines</strong> Visualisierers für STL-Oberflächenmodelle, für die der Elemen-<br />
tOrganizer eine Strategie vorschlägt und dem erhaltenen STLVisualizer die Identifizierungs-<br />
nummer <strong>eines</strong> zu visualisierenden Oberflächenelementes übergibt.<br />
5.4 Datenhaltung<br />
Das in Abschnitt 5.3.1 besprochene MVC-Muster zeigt die zentrale Rolle der Daten in<br />
einer interaktiven Anwendung. Deshalb muss dem Design der Datenhaltung auch besondere<br />
Aufmerksamkeit geschenkt werden.<br />
5.4.1 Die Datenelemente der Visualisierung<br />
Die Abbildung 5.3 zeigt die Vererbungshierachie der Klassen zur Darstellung der Daten-<br />
elemente. Der Name DataNode wurde von der Darstellungmöglichkeit in einem Szenegraph<br />
abgeleitet, dabei enthält ein Datenelement in der Visualisierung, neben den eigentlichen<br />
Bilddaten, Informationen über Materialeigenschaften und zusätzliche Spezifikationen, wie<br />
z.B Name oder Typ. Der Aufbau dieser Klassen wurde größtenteils übernommen, deshalb<br />
gibt die Darstellung der Klassenstruktur nur einen Einblick in den Aufbau der Klassen, der<br />
aber zum weiteren Verständniss ausreicht.<br />
Um die in die in den Abschnitten 5.6.1 und 5.7 beschriebenen Funktionserweite-<br />
rungen durchführen zu können wurden Erweiterungen der Klassen vorgenommen, wie<br />
z.B. das Hinzufügen der ViewProperty-Klasse, mit der die zur Visualisierung benötigten<br />
Materialzuweisungen vorgenommen werden. Diese Materialgebung erfolgt bei den STL-<br />
Oberflächenmodellen einheitlich, während bei den Gefäßbaumklassen jedem Gefäßabschnitt,<br />
60
virtual Visualizer* setStrategie(DataNode::Strategie);<br />
virtual void setName(QString);<br />
virtual void setType(QString);<br />
virtual vtkPolyData* getPolyData();<br />
virtual ViewProperty* getProperty(QString);<br />
virtual addProperty(QString);<br />
virtual bool save(const char* filename);<br />
virtual bool load(const char* filename);<br />
QString myType;<br />
QString myName;<br />
enum Strategie{Line,Cylinder,Transparence,HighQuality};<br />
QPtrList PropertyList;<br />
vtkPolyData* polyData;<br />
Mediator* mediator;<br />
SurfaceNode<br />
STLTriangleData* getTriangle(int);<br />
void setVisualizer(Visualizer*);<br />
void setHQVisualizer(Visualizer*);<br />
STLVisualizer* mySTLVisualizer;<br />
STLHQVisualizer* hqSTLVisualizer;<br />
STLTriangleList* triangle;<br />
DataNode<br />
VesselTreeNode<br />
void initScalars(ViewProperty*);<br />
int getLookupTableIdx(ArTreeIterator);<br />
int getLookupTableIdx(int);<br />
LineTreeVisualizer* myLineTreeVisualizer;<br />
CylinderTreeVisualizer* myCylinderTreeVisualizer;<br />
vtkPointLocator* locator;<br />
5.4. DATENHALTUNG<br />
Abbildung 5.3: Die Klassen der Gefäßbäume und Oberflächenmodelle<br />
der eine Anzahl von Punkten repräsentiert (siehe Kapitel 4.1.2), ein skalarer Wert zuge-<br />
wiesen wird (siehe Abbildung 5.13), über den die Materialeigenschaften bestimmt werden<br />
können.<br />
61
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
Color<br />
Data-<br />
Node<br />
DataList<br />
Materialproperties<br />
Scene<br />
Version<br />
Data-<br />
Node<br />
Color<br />
Titel<br />
Materialproperties<br />
Abbildung 5.4: Organicer Scenegraph<br />
5.4.2 Zentrale Verwaltung der Daten<br />
void dataListAppend(DataNode* );<br />
void dataListRemove(int);<br />
int dataListCount();<br />
DataNode* getDataNode(int);<br />
QPtrListIterator getDataListIterator();<br />
1<br />
1<br />
62<br />
1<br />
Mediator<br />
DataList<br />
DataNode<br />
ViewProperty<br />
1<br />
1<br />
1<br />
Material<br />
Properties<br />
n<br />
n<br />
Color<br />
Abbildung 5.5: Datenmanagement<br />
1<br />
1<br />
Der in Abbildung 5.4 dargestellte Graph<br />
zeigt die in einer Organicer-Szene vorhan-<br />
denen Elemente. Diese Darstellung soll die<br />
dreidimensionale Szene in einem Diagramm<br />
darstellen, entspricht aber nicht dem klas-<br />
sischen Szenegraph-Konzept. Die Szene er-<br />
hält einen Titel und eine Information über<br />
die verwendete Organicer-Version. Die ei-<br />
gentlichen Bilddaten werden mit den Farb-<br />
und Materialeigenschaften einem Datenk-<br />
noten zugeordnet. Alle in der Szene vorhan-<br />
denen Datenknoten werden in einer gemein-<br />
samen Datenliste gespeichert.<br />
Für die Verwaltung der zentralen<br />
Datenhaltung bietet sich die Me-<br />
diatorklasse an, da er von allen<br />
Objekten der Anwendung ange-<br />
sprochen werden kann. Er verwal-<br />
tet die Datenelemente der Anwen-<br />
dung in einer Datenliste, die eine<br />
von Qt implementierte Template-<br />
Pointerklasse verwendet. Der Me-<br />
diator verfügt zum Datenmanage-<br />
ment über eine Reihe von Funk-<br />
tionen, mit denen die elementaren<br />
Operationen wie das Einfügen und<br />
Löschen von Datenelementen, die<br />
Abfrage der Anzahl von Datenele-<br />
menten, der Zugriff auf Datenele-<br />
mente über einen Iterator und das
Abfragen <strong>eines</strong> Datenelementes über einen Index möglich sind.<br />
5.4.3 Kapselung der I/O-Funktionalität in Klassen<br />
DataReader<br />
DataNode* loadNode(QString fileName)<br />
ViewProperty* loadProperty(DataNode*,QDomDovument&)<br />
SceneReader<br />
void slotReadOCN(QString fileName)<br />
OrganicerWidget<br />
1 1<br />
1 1<br />
5.4. DATENHALTUNG<br />
DataWriter<br />
void saveDataNode(DataNode*,QString)<br />
void saveProperty(ViewProperty*,QString)<br />
SceneWriter<br />
void slotSaveOCN(QString fileName)<br />
Abbildung 5.6: An der Datenspeicherung beteiligte Klassen<br />
Zur persistenten Speicherung von Szenen oder verwendeten Materialeigenschaften auf der<br />
Festplatte und zum Laden dieser gespeicherten Daten, wurden mehrere Klassen entwickelt,<br />
die spezielle Funktionen bzw. Strategien kapseln. Dadurch wird die Übersichtlichkeit und<br />
Verständlichkeit der Programmstruktur erhöht und Veränderungen können lokal an den<br />
beteiligten Klassen vorgenommen werden.<br />
Diese Klassen werden als Reader- und Writerklassen bezeichnet und verwenden zur Daten-<br />
speicherung das XML-Format (siehe ), das als Sprache zur Beschreibung von<br />
strukturierten Daten und Dokumenten die Möglichkeit bietet, die Elemente des Organicer-<br />
Scenegraphs in Textform aufzuführen. Qt bietet zum Umgang mit XML-Dokumenten eine<br />
Schnittstelle an, die u.a. die Konvertierung <strong>eines</strong> XML-Dokumentes in einen String und die<br />
Schreib- und Leseoperationen auf die Festplatte unterstützt.<br />
Die Abbildung 5.6 zeigt die Beziehungen der IO-Klassen untereinander und ihre Zuord-<br />
nung zum OrganicerWidget (siehe Abbildung 5.11), so dass sie in der Standalone- und in<br />
der PlugIn-Version verfügbar sind. In den Oberklassen DataReader und DataWriter werden<br />
diejenigen Funktionen implementiert, die von unterschiedlichen Teilen der Anwendung ge-<br />
nutzt werden. Die Abbildungen 5.4.3 und 5.4.3 zeigen das Zusammenspiel verschiedener<br />
Objekte bei den Aktivitäten Laden und Speichern von Materialeigenschaften, die beide von<br />
der Datenansicht (siehe Abschnitt 5.6.2) ausgelöst werden. Im Abschnitt 5.8 wird die<br />
63
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
Konvertierung und persistente Speicherung im VRML-Format beschrieben.<br />
DataListView<br />
loadProperty(DataNode* Message2() node)<br />
OpMediator<br />
Nachricht<br />
weiterleiten<br />
()<br />
loadProperty(DataNode* node)<br />
loadProperty(DataNode* node,<br />
QDomNode& doc)<br />
Nachricht<br />
weiterleiten<br />
OrganNicerFrame \<br />
OrganNicerPluginFrame<br />
Materialdatei<br />
auswählen<br />
XML-Dokument<br />
erzeugen<br />
DataReader<br />
loadProperty(DataNode* node,QDomNode& doc) XML-Dokument<br />
parsen<br />
Abbildung 5.7: Sequenzdiagramm ViewProperty laden<br />
Das in der Datenansicht ausgewählte Element wird, durch die Vermittlung des Mediators,<br />
mit der Aufforderung zum Laden neuer Materialien der Rahmenklasse der Anwendung über-<br />
geben. In der Standalone-Version wird mit einem Dateidialog eine Materialdatei im Datei-<br />
system ausgewählt, während die Materialdateien der PlugIn-Version über den Lichtkasten<br />
(siehe Kapitel 4.3) ausgewählt werden können. In der Frameklasse wird das XML-Dokument<br />
aufgebaut und mit dem Datenelement zusammen, durch Vermittlung des Mediators, dem<br />
DataReader übergeben. Die loadProperty-Funktion des DataReaders parst das Dokument<br />
mit den Materialeigenschaften und weist diese dem Datenelement zu. Beim Lesen einer<br />
Szene durch den SceneReader wird dieselbe loadProperty-Funktion benutzt, so dass keine<br />
Redundanz von Code ensteht.<br />
Beim Speichern von Materialeigenschaften übernimmt der DataWriter die Aufgabe, die<br />
Eigenschaften des ViewProperty-Objekts in ein XML-Dokument zu schreiben. Dieses Do-<br />
kument wird in der Standalone-Version als Textdatei gespeichert und in der PlugIn-Version<br />
als Texteintrag in die CHILI-Datenbank eingetragen.<br />
64
DataListView \<br />
SceneWriter<br />
saveProperty(ViewProperty* vp,<br />
QString filename)<br />
OpMediator<br />
Nachricht<br />
weiterleiten<br />
()<br />
saveProperty(ViewProperty* vp,<br />
QString filename)<br />
saveProperty(QString vp,<br />
QString filename)<br />
Nachricht<br />
weiterleiten<br />
DataWriter<br />
XML-Dokument<br />
erzeugen<br />
saveProperty(QString vp,<br />
QString filename)<br />
5.4. DATENHALTUNG<br />
OrganNicerFrame \<br />
OrganNicerPluginFrame<br />
Abbildung 5.8: Sequenzdiagramm ViewProperty speichern<br />
5.4.4 Das Dateiformat der Szenenbeschreibung<br />
<br />
<br />
Organicer 1.9.2 RELEASE CANDIDATE<br />
Unknown patient<br />
<br />
<br />
STL<br />
XML-Dokument<br />
speichern<br />
..\pacs\db\patientUID\studyUID\seriesUID\Tumor.stl<br />
two tumor<br />
<br />
true<br />
1<br />
<br />
10<br />
0<br />
0.8<br />
0.4<br />
0.2<br />
65
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
1<br />
<br />
<br />
<br />
<br />
<br />
Listing 5.1:Organicer Dateiformat<br />
Das Listing 5.1 zeigt als Beispiel den Inhalt <strong>eines</strong> XML-Dokumentes, welches eine Szene<br />
mit einem STL-Oberflächenmodell enthält. Dieses Model ist aus der Segmentierung zweier<br />
Tumore entstanden und besitzt aus Datenschutzgründen den Titel“Unknown Patient”. Da<br />
die Oberfläche von STL-Modellen einheitlich visualisiert wird, besitzt die Lookuptabelle der<br />
ViewProperty-Eigenschaft nur einen Eintrag, über den die Farbe zugeordnet wird.<br />
Aktivitätsdiagramm Datei oder Szene laden<br />
Das Aktivitätsdiagramm 5.25 zeigt die verschiedenen Möglichkeiten, Datenelemente zu<br />
einer Szene hinzuzufügen. Da diese sich zwischen der Standalone- und PlugIn-Version un-<br />
terscheiden, gibt es im Diagramm zwei verschiedene Startpunkte. Die Standalone-Version<br />
bietet die Möglichkeit Dateien oder Szenen durch Kommandozeilenargumente zu übergeben<br />
oder über Dateidialoge auszuwählen. In der PlugIn-Version gibt es zur Auswahl von Dateien<br />
und Szenen unterschiedliche Vorgehensweisen. Die zu einer Serie gehörenden Szenen werden<br />
in einer eigenen Serie, der OrganicerSerie, welche im Lichtkasten von CHILI angezeigt wird<br />
und die Selektion der Szene ermöglicht ( siehe Kapitel 4.3).<br />
66
{XOR}<br />
Kommandozeilenargumente<br />
übergeben<br />
{XOR}<br />
*for all<br />
DataNode<br />
{ AND }<br />
XML-Dokument<br />
parsen<br />
Standalone<br />
Materialeigenschaften<br />
einlesen<br />
{ XOR }<br />
Dateidialog öffnen<br />
[.ocn ]<br />
[.stl oder .ves ]<br />
{ XOR }<br />
Datei auswählen<br />
OrganNicerSerie<br />
suchen<br />
[existiert]<br />
Dateiendung überprüfen<br />
for one<br />
DataNode<br />
Daten laden<br />
DatenListe aktualisierien<br />
{ AND }<br />
{ AND }<br />
al l<br />
DataNode<br />
{ AND }<br />
Studie auswählen<br />
OrganNicerSerie in<br />
LightBox anzeigen<br />
[.pic && ! plugin ]<br />
[.pic && plugin]<br />
[ ok ]<br />
PlugIn<br />
Serie auswählen<br />
Derivate in DataList<br />
-View anzeigen<br />
Existenz und<br />
Aktualität überprüfen<br />
[ ! ok ]<br />
PIV-Volumen skalieren<br />
STL-Volume erzeugen<br />
Standarderte für Materialien setzen<br />
{ XOR }<br />
Abbildung 5.9: Aktivität Laden von Daten<br />
5.4. DATENHALTUNG<br />
Nach der Auswahl einer Serie mit<br />
Originalbildern werden die Segmentie-<br />
rungsergebnisse dieser Serie in der Da-<br />
tenansicht (siehe Abschnitt 5.6.2)<br />
angezeigt und können dort ausge-<br />
wählt werden. Die Endung der aus-<br />
gewählten Datei entscheidet über das<br />
weitere Vorgehen. Bei einer Szene-<br />
Datei (.ocn) werden die einzelnen<br />
gespeicherten Datenelemente geladen<br />
und mit den in der Datei aufge-<br />
führten Materialeigenschaften visuali-<br />
siert. Dateien, die Informationen zu<br />
einzelnen Datenelementen enthalten,<br />
werden geladen und mit Standard-<br />
materialwerten dargestellt. Bei der<br />
Auswahl <strong>eines</strong> Pic-Volumens über-<br />
prüft die PlugIn-Version, ob ein STL-<br />
Oberflächenmodell zu diesem Volumen<br />
vorhanden ist und die einzelnen seg-<br />
mentierten Schichten des Volumens<br />
nach der Erstellung dieses Oberflä-<br />
chenmodells verbessert wurden. Falls<br />
das Oberflächenmodell aktuell ist und<br />
existiert wird es geladen, ansonsten<br />
muss es mit dem in Abschnitt 5.9.4<br />
vorgestellten Ablauf erzeugt werden.<br />
Nach dem erfolgreichen Laden <strong>eines</strong><br />
Datenelementes wird die Datenliste<br />
aktualisiert.<br />
67
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
Plugin<br />
DataList-Popupmenu<br />
benutzen<br />
for one<br />
DataNode<br />
Toolbar benutzen<br />
Speichermodus wählen<br />
* for all<br />
DataNode<br />
Datenliste iterieren<br />
Aktivitätsdiagramm Datei oder Szene speichern<br />
[ Scene speichern ]<br />
Daten auf Platte speichern<br />
[ einzelne Datei<br />
speichern ]<br />
Neue Serie in Chili-<br />
Datenbank eintragen<br />
{ XOR }<br />
Dateidialog öffnen<br />
Spezifikationen in<br />
XML-Dokument eintragen<br />
Materialeigenschaften in<br />
XML-Dokument eintragen<br />
[ Scene speichern ] [ Standalone ]<br />
[ existiert nicht ]<br />
Scene als Text in<br />
OrganNicer-Series speichern<br />
{ XOR }<br />
all<br />
DataNode<br />
{ XOR }<br />
{ XOR }<br />
{ XOR }<br />
OrganNicer<br />
-Serie suchen<br />
[ existiert ]<br />
Standalone<br />
Scenedatei auf<br />
Platte speichen<br />
Abbildung: 5.10: Aktivität Speichern von Daten<br />
68<br />
Da in der PlugIn-Version zusätzliche<br />
Dialoge unerwünscht sind, verfügt nur<br />
die Standalone-Version über einen Da-<br />
teidialog zum Speichern. Das Schrei-<br />
ben einzelner Datenelemente auf die<br />
Festplatte ist mit einem Popupme-<br />
nu der Datenansicht (siehe Abbildung<br />
5.6.2 ) möglich. Soll die gesamte Sze-<br />
ne gespeichert werden, schreibt der<br />
SceneWriter (siehe Abschnitt 5.4.3)<br />
die Elemente der Datenliste mit ih-<br />
ren Spezifikationen und Materialeigen-<br />
schaften im Organicer-Dateiformat in<br />
ein XML-Dokument. Nach dem Spei-<br />
chern der Datenelemente auf der Fest-<br />
platte ist bei einer einzelnen Datei<br />
der Ablauf beendet, während beim<br />
Speichern einer Szene noch die XML-<br />
Szenenbeschreibung gespeichert wer-<br />
den muss. Im Standalonebetrieb wird<br />
die Szene in eine Datei geschrie-<br />
ben, während die PlugIn-Version erst<br />
überprüft, ob zu der aktuellen Se-<br />
rie mit Originalbildern eine Organicer-<br />
Serie existiert und diese bei negati-<br />
ver Prüfung angelegt. Zu dieser Se-<br />
rie wird ein Texteintrag in die CHILI-<br />
Datenbank eingetragen, in den die<br />
XML-Szenenbeschreibung geschrieben<br />
wird.
5.5. AUFBAU DER GRAPHISCHEN BENUTZEROBERFLÄCHE<br />
Die beiden Buttons zum Abspeichern der Bilddaten befinden sich in einer Toolbar des<br />
OrganicerWidgets und bieten folgende Funktionalität an :<br />
Alle Datenelemente der Szene auf die Festplatte schreiben.<br />
Nach dem Abspeichern der gesamten Datenelemente wird eine Szenedatei erzeugt und<br />
abgespeichert.<br />
5.5 Aufbau der graphischen Benutzeroberfläche<br />
Für die Benutzerschnittstelle gibt es besonders häufig Änderungsanforderungen, da sie bei<br />
jeder Funktionserweiterung angepasst werden muss. Damit diese Änderungen leicht durch-<br />
zuführen sind, ist die Oberfläche des Organicers durch die Umsetzung des MVC-Musters<br />
(siehe Kapitel 5.3.1) von den Daten entkoppelt. Der Aufbau der Benutzeroberfläche wur-<br />
de größtenteils übernommen. Für die, in den Abschnitten 5.6.2 und 5.9 beschriebenen<br />
Erweiterungen, wurde die Komponente PropertyWidget entwickelt und die Komponente<br />
DataListView in ihrer Funktion erweitert. Diese Maßnahmen wurden mit dem GUI-Designer<br />
von Qt umgesetzt (siehe Kapitel 3.4.2).<br />
InteractorControls<br />
OrganicerFrame /<br />
OrganicerPluginFrame<br />
OrganicerWidget<br />
SceneHandler<br />
Property-<br />
Widget<br />
DataListView<br />
Abbildung 5.11: Aufbau der GUI<br />
Bei der Gestaltung der Oberfläche wurde<br />
auch berücksichtigt, dass die Anwendung<br />
als Standalone- und als PlugIn-Version ge-<br />
nutzt werden kann. Aus diesem Grund<br />
sind diejenigen Teile, die in beiden Nut-<br />
zungsarten benötigt werden, im Organi-<br />
cerWidget (in Abbildung 5.11 rot unter-<br />
legt) zusammengefasst. Dieses Organicer-<br />
Widget wird je nach Anwendungsart in<br />
verschiedene Rahmenfenster eingebunden<br />
(in Abbildung 5.11 rot unterlegt). Das Framefenster der Standalone-Version (Organicer-<br />
Frame) besitzt zusätzliche Toolbars und Menudialoge, die das Rahmenfenster der PlugIn-<br />
Version (OrganicerPluginFrame) nicht benötigt.<br />
Qt bietet die Möglichkeit eigene Widgets als Customwidgets zu definieren und diese in ver-<br />
schiedenen Anwendungen einzusetzen. In Abbildung 5.11 sind die verschiedenen Custom-<br />
widgets der Organicer-Oberfläche zu sehen, die nach dem Kompositum-Muster (Kapitel<br />
3.4.1) zusammengesetzt sind.<br />
69
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
5.6 Neugestaltung der Materialverwaltung<br />
5.6.1 Viewproperty Klasse<br />
In der entwickelten Version des Organicers werden veschiedene Visualisierungstechniken ver-<br />
wendet. Die Visualisierung der Szene im SceneHandler mit OpenGL wurde übernommen.<br />
Darüberhinaus wird mittlerweile aber auch das Visualization Toolkit (siehe Kapitel 3.3.4)<br />
zur Materialverwaltung, zum Exportieren einer VRML-Szene und zur Berechnung des Sicher-<br />
heitsabstandes eingesetzt. Die Viewproperty-Klasse wurde mit dem Ziel entwickelt, beide<br />
Visualiserungstechniken mit einer einheitlichen Datenhaltung, in einer Anwendung nutzen<br />
zu könnnen. Jedem Datenelement wird wie im Diagramm 5.5 dargestellt, eine Instanz dieser<br />
Klasse zugeordnet, mit der die Materialeigenschaften des Elementes festgelegt werden.<br />
ViewProperty<br />
void setDiffuseColor(int lut,float*);<br />
float* getDiffuseColor(int lut);<br />
vtkFloatArray* getScalars();<br />
vtkPolyData* getPolyData();<br />
vtkFloatArray* scalars;<br />
vtkLookupTable* lut;<br />
vtkPolyData* polyData;<br />
vtkFloatArray* shininess;<br />
vtkFloatArray* emission;<br />
bool visibility;<br />
Abb. 5.12: ViewProperty-Klasse<br />
Die Klassenbeschreibung 5.12 zeigt einige Elemente<br />
und Methoden der ViewProperty-Klasse. Eine wich-<br />
tige Funktion erfüllt dabei die vtkLookupTable, die<br />
die Farben des Datenelementes führt. Die Größe der<br />
Lookuptabelle hängt von der Art des Datenelementes<br />
ab und variiert von einer Farbe für Oberflächenmo-<br />
delle bis zu 30 für Gefäßbaummodelle, bei denen allen<br />
Segmenten und Sektoren eigene Farben zugeordnet<br />
werden können. Die verschiedenen Funktionen zum<br />
Verändern der Eigenschaften <strong>eines</strong> Datenelementes<br />
arbeiten wie die Funktion zum Setzen oder Abfragen von Farbeigenschaften, der ein In-<br />
dex der Lookuptabelle und die neuen Farbwerte übergeben. Auf die gleiche Weise arbeiten<br />
auch die Funktionen zur Änderung der Materialeigenschaften (Brightness, Shininess und<br />
Emission).<br />
Das Setzen von Farbeigenschaften ist ein gutes Beispiel, wie in der Visualisierung den Punkt-<br />
daten <strong>eines</strong> Objektes, skalare Werte zugeordnet werden und wird mit der Abbildung 5.13<br />
und der folgenden Beschreibung verdeutlicht. Den sieben Punkten des Polydata-Datasets<br />
wird in einem Array ein Skalarwert zugeordnet, der als Index für eine Lookuptabelle dient.<br />
5.6.2 DataListView<br />
In der Datenansicht ist eine visuelle Darstellung der Szenen-Objekte mit einer baumartigen<br />
Struktur, die über mehrere Spalten aufgebaut werden kann, möglich. Diese Komponente<br />
70
Polydata<br />
7<br />
5<br />
2 3<br />
1<br />
4<br />
0<br />
6<br />
5.6. NEUGESTALTUNG DER MATERIALVERWALTUNG<br />
Skalararray<br />
Punkt ID<br />
0 1 2 3 4 5 6<br />
3 2 2 0 3 2 0<br />
Skalarwert<br />
Abbildung 5.13: Farbwertzuordnung über Skalare<br />
7<br />
1<br />
id<br />
0<br />
1<br />
2<br />
3<br />
Lookuptable<br />
r g<br />
b<br />
0.80.3<br />
0.8<br />
0.10.3<br />
0.1<br />
0.3 0.10.8<br />
0.10.8<br />
0.9<br />
wurde in das MVC-Konzept integriert (siehe Abschnitt 5.3.1) und wird bei einer Änderung<br />
der Szenenobjekte benachrichtigt, um sich anschließend zu aktualisieren.<br />
Um verschiedene Arten von Daten im DataListView darstellen zu können wurden neue<br />
Klassen von Listvieweinträgen gebildet:<br />
• Ein DataCheckListItem repräsentiert ein Datenelement der Datenliste. Aktive Gefäß-<br />
bäume werden mit grüner Farbe hervorgehoben.<br />
• Die PlugIn-Version verwendet blau gezeichnete SeriesCheckListItems um segmentierte<br />
Serien darzustellen (Abschnitt 5.9.4).<br />
• Zur Darstellung der Gefäßbaum-Datenelemente werden SegmentListItems verwendet.<br />
Dabei sind die aufgeführten Gefäßabschnitte mit derselben Farbe gezeichnet, mit der<br />
sie im SceneHandler (Kapitel 4.1.1) visualisiert sind.<br />
71
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
Abbildung 5.14: Datenansicht<br />
Das PropertyWidget<br />
Durch die Selektion <strong>eines</strong> Dateneintrages wird<br />
seine Sichtbarkeit im SceneHandler geändert<br />
werden. Zur Veränderung der Materialeigen-<br />
schaften von Datenelementen musste im Pro-<br />
totyp des Organicers ein modaler Dialog geöff-<br />
net werden. Zur Erleichterung dieser Einstellun-<br />
gen wurde ein neues Customwidget, das Pro-<br />
pertyWidget, das in die Oberfläche des Organi-<br />
cers (Abschnitt 5.6.2) integriert ist, entwickelt.<br />
Nach der Auswahl <strong>eines</strong> Eintrages in der Daten-<br />
ansicht wird dieses Element im PropertyWidget<br />
aktiv und kann in seinen Materialeigenschaften<br />
verändert werden.<br />
Mit einem Popup-Menu, das sich beim Ankli-<br />
cken mit der rechten Maustaste öffnet, können<br />
weitere Interaktionen vorgenommmen werden.<br />
Dazu gehören das Speichern und Löschen von<br />
Datenlementen, Speichern und Laden von Ma-<br />
terialeigenschaften und das Spezifizieren <strong>eines</strong><br />
Datenelementes durch eine Beschreibung.<br />
Das in der Abbildung 5.15 dargestellte PropertyWidget besitzt zwei Funktionen:<br />
◮ Die Veränderung von Materialeigenschaften ist in Zusammenarbeit mit der Datenan-<br />
sicht möglich. Dazu wird in der Datenansicht ein Oberflächenmodell oder ein Ab-<br />
schnitt <strong>eines</strong> Gefäßbaumes ausgewählt und diesem, durch Veränderung der Sliderein-<br />
stellungen, neue Materialwerte zugordnet.<br />
◮ Berechnung <strong>eines</strong> Sicherheitsabstandes (siehe Abschnitt 5.7)<br />
72
5.7. BERECHNUNG DER DISTANZ ZWISCHEN TUMOR UND GEFÄSSEN<br />
Das Modul wurde mit dem Ziel entwickelt, die enthaltenen Steuerelemente (ColorSlider und<br />
SliderWidget) für die beiden genannten Funktionen benutzen zu können.<br />
� Farbauswahl: Das SliderWidget zeigt eine Regenbogenskala an (Abschnitt 5.19) und<br />
der ColorSlider dient zur Farbauswahl.<br />
� Sicherheitsabstand: Mit dem ColorSlider wird die Größe des Sicherheitsabstandes einge-<br />
stellt, der im SliderWidget mit einer Rot-Blau-Skala veranschaulicht wird und oberhalb<br />
des STL-ListView als Wert [mm] angezeigt wird.<br />
5.7 Berechnung der Distanz zwischen Tumor und Gefäßen<br />
Für den Erfolg einer Operation zur Entfernung von Lebertumoren ist die räumliche Bezie-<br />
hung der Tumore zum Gefäßverlauf von entscheidender Bedeutung. Bei der Resektion des<br />
Tumors muss das Lebergewebe, das innerhalb <strong>eines</strong> Sicherheitsabstandes von 0.5 cm liegt,<br />
mitentfernt werden. Die Abbildung 5.19 zeigt eine Szene mit Gefäßbaum, zwei Tumoren und<br />
den für die Operation vorgeschlagenen Resektionsvolumina. Falls in dem Sicherheitsbreich<br />
Gefäße verlaufen, werden die von ihnen versorgten Lebersegmente bei der Resektion mitent-<br />
fernt. Bis jetzt wurde dieser Abstand empirisch bestimmt, so dass keine exakte Beurteilung<br />
über die Entfernung der Strukturen möglich war.<br />
SceneHandler<br />
SliderWidget<br />
STL-ListView<br />
ColorSlider<br />
Abbildung 5.15: Einsatz des PropertyWidget zur Berechnung des Sicherheitsabstandes<br />
73
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
Dieser Abschnitt beschreibt den Weg zur exakten Bestimmung <strong>eines</strong> Sicherheitsabstandes,<br />
durch den die Qualität <strong>eines</strong> Resektionsvorschlages erhöht wird. Die Gefäßbaum- und Ober-<br />
flächenmodelle werden aus einzelnen Punkten aufgebaut, die unstrukturiert im Raum verteilt<br />
sind.<br />
root<br />
(1.Stufe)<br />
(2.Stufe)<br />
(a) Oktree Raumunterteilung<br />
root<br />
1.Stufe<br />
2.Stufe<br />
Abbildung 5.16: Aufteilung des <strong>3D</strong>-Raumes<br />
1.Punkteliste<br />
2. Punkteliste<br />
3. Punkteliste<br />
4. Punkteliste<br />
5. Punkteliste<br />
6. Punkteliste<br />
7. Punkteliste<br />
8. Punkteliste<br />
9. Punkteliste<br />
10. Punkteliste<br />
…<br />
64. Punkteliste<br />
(b) Locator Punkteliste<br />
Eltern<br />
Oktanten<br />
Abschluss<br />
Oktanten<br />
Die Datenelemente der Gefäßbaummodelle verfügen über einen vtkPointLocator, der mit<br />
einem Octree-Raumunterteilungsverfahren, die Szene in Würfel aufteilt (siehe Abbildung<br />
5.16(a)). Dieses Verfahren kann in mehreren Stufen durchgeführt werden, wodurch der <strong>3D</strong>-<br />
Raum in gleichgroße Würfel und einer gleichmäßigen Struktur aufgeteilt wird. Dadurch kann<br />
jeder Punkt der Szene über seine Koordinaten eindeutig einem Würfel zugordnet werden. Der<br />
vtkLocator vergibt für jeden Würfel eine Punkteliste, in der die Punkte des Gefäßbaumes,<br />
die sich innerhalb des Würfels befinden, gespeichert werden (siehe Abbildung 5.16(b)).<br />
Unter Verwendung dieser Strukturen ist es möglich, effektive Suchoperationen innerhalb<br />
<strong>eines</strong> Bildvolumens durchzuführen.<br />
Das PropertyWidget verfügt über eine Listenansicht, in der die Namen der Tumore angezeigt<br />
werden und eine Auswahl möglich ist. Nach der Auswahl der Tumore und der Einstellung<br />
des Sicherheitsabstandes mit dem ColorSlider, können alle Punkte des Gefäßbaumes, die<br />
74
5.8. EXPORTIEREN VON VRML-SZENEN<br />
sich innerhalb des Sicherheitsabstandes befinden, bestimmt werden. Hierzu wird für jeden<br />
Punkt <strong>eines</strong> Tumor-Oberflächenmodells untersucht, in welchem Würfel er sich befindet und<br />
der Abstand zu den Gefäßbaumpunkten des Würfels bestimmt. Da auch Gefäßbaumpunkte<br />
der Nachbarwürfel innerhalb des Sicherheitsabstandes liegen könnnen, muss auch für alle<br />
Punkte dieser Würfel der Abstand berechnet werden. Alle untersuchten Punkte des Gefäß-<br />
baumes deren Abstand zu mindestens einem Punkt des Tumors, kleiner als der vorgegebene<br />
Sicherheitsabstand ist, werden jetzt rot markiert werden (Abbildung 5.15).<br />
5.8 Exportieren von VRML-Szenen<br />
Zur Zeit ist es ein wichtiges Ziel im Bereich der Operationsplanung, die <strong>3D</strong>-Rekonstruktionen<br />
über das Internet verschiedenen Partnern anbieten zu können (siehe ). Dieser Ab-<br />
schnitt zeigt, wie eine Organicer-Szene in das VRML-Format (siehe Kapitel 3.3.6) umge-<br />
wandelt wird und dadurch mit einem Webbrowser dargestellt werden kann.<br />
Diese Umwandlung erfolgt in der entwickelten Klasse VRMLExporter unter Verwendung<br />
des Visualization Toolkits (VTK). Die Grundlage hierzu bietet aber die besprochene<br />
ViewProperty-Klasse, die die Materialeigenschaften der Datenelemente mit Strukturen des<br />
Visualization Toolkits ( vtkLookupTable, vtkFloatArray ) organisiert und damit eine Visua-<br />
liserung mit VTK ermöglicht. Zum Export einer Szene mit VTK werden die verschiedenen<br />
Objekte in einem vtkRenderWindow visualisiert und anschließend mit einem vtkVRMLEx-<br />
porter in Textformat in eine Datei geschrieben.<br />
Zur Visualisierung der Objekte mit VTK, müssen die Objekte der Organicer-Szene im<br />
vtkPolyData-Format vorliegen oder in dieses Format umgewandelt werden. Die STL-Dateien<br />
können mit einem vtkSTLReader vom Dateisystem gelesen werden, der das gewünschte<br />
vtkPolyData-Dataset liefert.<br />
Die Gefäßbaumobjekte müssen allerdings erst in eine polygonale Datenstruktur konvertiert<br />
werden. Dazu werden die vorhandenen Punkten des Gefäßbaumes (siehe Kapitel 4.1.2) mit<br />
Zylindern verbunden.<br />
4<br />
3<br />
2<br />
9<br />
Gefäßbaumpunkte<br />
0<br />
1<br />
5<br />
6<br />
Abb. 5.17 Gefäßbaumrepräsentation<br />
8<br />
7<br />
Diese Aufgabe erledigt der vtkTubeFilter, der die<br />
Verbindungszylinder durch Pyramidenstümpfe, mit<br />
einer bestimmbaren Anzahl von Ecken, annähert<br />
und als Ausgabe ein polygonales Dataset liefert. Die<br />
Abbildung 5.17 zeigt wie aus zwei Punkten des Ge-<br />
fäßbaumes, eine Pyramide mit fünf Ecken entsteht.<br />
75
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
Die Materialeigenschaften der Gefäßbaummodelle werden über die Einteilung der VesselEle-<br />
mente zu bestimmten Gefäßtypen bestimmt und müssen den Punkten der PolyData-Objekte<br />
über skalare Werte, die den Identifikaktionsnummern der Gefäßtypen entsprechen, zugeord-<br />
net werden.<br />
Segment 1 Segment 2<br />
1<br />
2<br />
1<br />
1<br />
2<br />
2<br />
Skalararray<br />
0 1 2 3 4 5 6 7<br />
1 1 1 1 1 1 1 1<br />
8 9<br />
...<br />
...<br />
Skalarwert = Identifikationsnummer<br />
Punkt ID<br />
51 52 53 54 55<br />
1 1 2 2 2 2 2<br />
Abbildung 5.18: Farbzuordnung bei Gefäßbäumen<br />
id<br />
0<br />
1<br />
2<br />
3<br />
Lookuptable<br />
r g<br />
b<br />
0.80.3<br />
0.8<br />
0.10.3<br />
0.1<br />
0.3 0.10.8<br />
0.10.8<br />
0.9<br />
Die Anzahl der Punkte die im PolyData-Dataset ein VesselElement repräsentieren, ist von<br />
der Anzahl der Punkte des VesselElementes abhängig. Diese liegen im Mittelpunkt der<br />
Grundfläche bzw. Deckfläche der Pyramidenstümpfe, die zur Verbindung der Punkte dienen.<br />
Die Abbildung 5.18 geht davon aus, dass die Pyramidenstümpfe fünf Ecken besitzen. Ein<br />
VesselElement mit zwei Punkten wird dann nach der Verbindung mit Pyramidenstümpfen,<br />
durch 10 Eckpunkte repräsentiert, die über die Identifikationsnummer als skalarer Wert<br />
die Information des Gefäßtyps erhalten und mit einer dem Gefäßtyp zugeordneten Farbe<br />
dargestellt werden.<br />
76
5.9 <strong>Entwicklung</strong> PlugIn-Adapterklasse<br />
5.9. ENTWICKLUNG PLUGIN-ADAPTERKLASSE<br />
Die Abbildung 5.19 zeigt den Einsatz des Organicers als PlugIn, dabei befindet sich der<br />
Arbeitsbereich des Organicers innerhalb der roten Umrandung.<br />
Studienauswahl Serienauswahl<br />
Lichtkasten<br />
SceneHandler<br />
Resektionsvorschlag<br />
Tumor<br />
Abbildung 5.19: CHILI-Teleradiologiesystem<br />
PropertyWidget<br />
( Darstellung der Resektionsvolumina in beiger Farbe )<br />
DataListView<br />
Das Teleradiologiesystem CHILI bietet mit einem PlugIn-Mechanismus und einer offengeleg-<br />
ten Schnittstelle (siehe ), die Möglichkeit Zusatzmodule zur Funktionserweiterung<br />
zu entwickeln. Da das CHILI Softwaresystem zur Zeit aber, von einer UNIX-Implementierung<br />
auf eine plattformunabhängige Qt-Version umgestellt wird und sich dadurch auch die PlugIn-<br />
Schnittstelle ändern wird, wurde bei der <strong>Entwicklung</strong> des Organicer-PlugIns weitgehend auf<br />
die Nutzung der Schnittstelle verzichtet, um spätere Änderungen zu minimieren. Des wei-<br />
teren hat sich im Verlauf der Enwicklung des Organicer-PlugIns gezeigt, dass die Anforde-<br />
rungen des Organicer-PlugIn’s durch die angebotene CHILI-Schnittstelle nicht ausreichend<br />
77
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
erfüllt werden.<br />
Deshalb wurde zur Integration des Organicers eine eigene PlugIn-Schnittstelle entwickelt.<br />
Die Kommunikation zwischen dem Teleradiologiesystem CHILI und dem Organicer über-<br />
nimmt dabei eine Adapterklasse. Diese Klasse arbeitet mit den entwickelten Serien- und<br />
Imageklassen zusammen, um Informationen über Serien und Bilder zu erhalten.<br />
5.9.1 Die Adapterklasse OrganicerPluginFrame<br />
ChiliPluginFrame<br />
QString getAbsSeriesPath();<br />
QString getRelSeriesPath();<br />
bool insertTextToLB(QString,QString);<br />
void insertPixmapToLB(char** pm,int pos);<br />
// CHILI callbacks<br />
void selectSeries(int ,void* user_data,void*);<br />
void selectImage(int, void* user_data,void*);<br />
char* getImageTypeFromSeries(char* seriesOID);<br />
bool findSegmentationFromOrig(char* seriesOID);<br />
void selectAllSeriesFromStudy(char* studyOID);<br />
void selectSegmentationsFromOrig(char*):<br />
void newOrganNicerSeries();<br />
void initSegmentationSeries(SegmentationSeries*);<br />
void findSTLFromSeries(SegmentationSeries*);<br />
void findOrganNicerText();<br />
void insertTextToSeries(char* seriesOID,QString text,QString mime,char* oid);<br />
void getSeriesInformationFromOriginal();<br />
void selectSeries();<br />
void selectStudy():<br />
void selectImage(int position);<br />
void seriesListAppend(SegmentationSeries* );<br />
SegmentationSeries* getSegmentationSeries(int id);<br />
void serieListCount();<br />
void slotLoadVolume(int id);<br />
QPtrListIterator getSeriesListIterator();<br />
void slotLoadProperty(DataNode*);<br />
void slotSaveProperty(QString);<br />
void slotExportVRML();<br />
void slotSaveOCN(QString);<br />
OrganNicerPluginFrame<br />
OpMediator* mediator;<br />
SliceInfo* sliceinfo;<br />
ChiliSeries* originalSeries;<br />
OrganNicerSeries* organNicerSeries;<br />
QPtrList SeriesList;<br />
Abbildung 5.20: Adapterklasse OrganicerPluginFrame<br />
78
5.9. ENTWICKLUNG PLUGIN-ADAPTERKLASSE<br />
Die Oberklasse ChiliPluginFrame wurde entwickelt um verschiedene spezielle PlugIns ent-<br />
wickeln zu können. Dazu besitzt sie wie jede Oberklasse Methoden, die für alle speziellen<br />
abgeleiteten PlugIn-Klassen interresant sind. Eine wichtige Funktion ist das Weiterleiten von<br />
Nachrichten des CHILI-Programms, bei einer Änderung der aktuellen Patienten-, Studien-,<br />
Serien-, Bild- oder Textauswahl.<br />
Die OrganicerPluginFrame-Klasse ist eine spezielle PlugIn-Klasse, mit der die Organicer-<br />
Applikation und das CHILI-Programm zusammenarbeiten, können.<br />
Sie speichert verschiedene Informationen in ihren Attributen :<br />
• Falls in der aktuellen Studie von CHILI eine OrganicerSerie (Abschnitt 5.9.4) vor-<br />
handen ist, werden die Informationen in der Variablen organNicerSeries gehalten.<br />
• Die Informationen über die aktuell ausgewählte Serie mit Originalbildern, enthält die<br />
Variable originalSeries.<br />
• In die SeriesList werden alle segmentierten Serien, der ausgewählten Serie mit Origi-<br />
nalbildern, eingetragen.<br />
Neben diesen Attributen besitzt die Adapterklasse verschiedene Methoden die zum Daten-<br />
austausch benötigt werden und bei der Beschreibung der im Abschnitt 5.4.3 aufgeführten<br />
Aktivitäten erwähnt wurden. Die Kommunikation zwischen CHILI und dem Organicer wird<br />
durch die folgenden Methoden ermöglicht:<br />
◮ Die Bestimmung des Typs (Original oder Segmentierung) einer Serie, mit der Funktion<br />
getImageTypeFromSeries(), ist nur über die enthaltenen Bilder möglich. Deshalb muss<br />
zuerst über eine Datenbankabfrage ein Bild dieser Serie selektiert werden, bevor mit<br />
der getImageType-Funktion der SliceInfo-Klasse (Abschnitt 5.9.4), der Typ bestimmt<br />
werden kann.<br />
◮ Um alle segmentierten Serien einer Originalserie zu erhalten, können diese mit einer<br />
Datenbankselektion in der Funktion findAllSeriesFromStudy() abgefragt und in die<br />
SeriesList eingetragen werden.<br />
◮ Beim Einsatz des Organicers in CHILI soll die Serienansicht, nur Serien mit Originalbil-<br />
dern anzeigen, da die Segmenentierungsergebnisse in der Datenansicht des Organicers<br />
angezeigt werden. Die Funktion selectAllSeriesFromStudy() implementiert eine Da-<br />
tenbankabfrage, die die Originalserien zu diesem Zweck selektiert.<br />
79
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
◮ Zum Speichern einer Szene oder von Materialeigenschaften wird eine OrganicerSzene<br />
benötigt, die mit der Funktion newOrganicerSeries() angelegt werden kann.<br />
◮ Bei der Auswahl einer Studie wird mit der Funktion selectAllSeriesFromOrig(), nach<br />
einer OrganicerSerie in der Studie gesucht. Falls eine OrganicerSerie gefunden wird,<br />
werden ihre Informationen im Attribut organNicerSeries gespeichert und ihre Textein-<br />
träge im Lichtkasten von CHILI angezeigt.<br />
◮ In jeder segmentierten Serie wird mit der Funktion findSTLFromSeries() nach einem<br />
Texteintrag, der das Oberflächenmodell des Segmentierungsergebnisses repräsentiert,<br />
gesucht.<br />
◮ Mit der Funktion insertTextToSeries() kann ein Text, der Oberflächenmodelle oder<br />
Szenen repräsentiert, in die Datenbank zur aktuellen Studie eingetragen werden.<br />
◮ Die Funktion getSeriesInformationFromOriginal() trägt den Spacing-Wert einer Serie<br />
in eine Instanz der Klasse SegmentationSeries ein.<br />
◮ Die Funktionen selectSeries(), selectStudy() und selectImage(int) werden durch die<br />
Eventbehandlung in der ChiliPluginFrame-Klasse, nach einer Änderung in der Daten-<br />
bankschnittstelle aufgerufen.<br />
◮ Mit der Funktion serieListAppend() werden Serien mit Segmentierungsergebnissen in<br />
die SeriesList eingetragen. Die Funktion getSeriesListIterator() ermöglicht den Zugriff<br />
auf die SeriesList über einen Iterator.<br />
◮ Nach der Auswahl <strong>eines</strong> SeriesCheckListItems in der Datenansicht des Organicers (Ab-<br />
80<br />
schnitt 5.6.2), wird das Volumen des Segmentierungsergenisses geladen (slotLoadVo-<br />
lume(int)). Dabei wird die Existenz und Aktualität des Oberflächenmodells überprüft<br />
und bei Bedarf, aus dem ImageVolume des Segmentierungsergebnisses, ein neues<br />
Oberflächenmodell erzeugt.
5.9.2 Datenbankabfragen der Adapterklasse<br />
patient_t<br />
char* oid;<br />
char* name;<br />
study_t<br />
char* oid;<br />
char* instanceUID;<br />
char* modality;<br />
char* description;<br />
1<br />
n<br />
series_t<br />
char* oid;<br />
char* instanceUID;<br />
char* description;<br />
1<br />
text_t<br />
1<br />
n<br />
char* oid;<br />
char* chiliText;<br />
char* mime_type;<br />
n<br />
1<br />
n<br />
image_t<br />
char* oid;<br />
char* instanceUID;<br />
char* imageType;<br />
char* path;<br />
char* date;<br />
char* time;<br />
Abbildung 5.21: Datenbankobjekte<br />
5.9. ENTWICKLUNG PLUGIN-ADAPTERKLASSE<br />
Das in der Abbildung 5.21 dargestellte Klas-<br />
sendiagramm zeigt die Beziehung zwischen den<br />
Datenbankobjekten der CHILI-Datenbank und<br />
ähnelt dabei dem DICOM-Objektdiagramm<br />
aus Kapitel 3.6. Diese Objekte enthalten<br />
neben einer eindeutigen Datenbank Objekt-Id<br />
(oid), auch die in der Tabelle 3.2 aufgeführten<br />
eindeutigen Instance UID des DICOM-Headers<br />
zur Identifikation. Das Datenbankobjekt text t<br />
wird vom PlugIn zur Speicherung der Szenen<br />
und Materialeigenschaften verwendet. Eine<br />
Organicer-Szene im XML-Format wird als<br />
String im Attribut chiliText gespeichert und<br />
erhält den mime type “OCN”. Dagegen wird<br />
eine VRMLSzene vom VRMLExporter auf die<br />
Festplatte geschrieben und die Pfadangabe<br />
als chiliText angegeben, sowie der mime type<br />
als “WRL” festgelegt. Bei den Imageobjekten<br />
ist insbesondere die Pfadangabe wichtig, da sie zum Laden <strong>eines</strong> PIC-Bildes mit der<br />
ipPicGet-Funktion der PIC-Bibliothek benötigt wird (siehe Kapitel 3.1.5).<br />
Zur Umsetzung der Datenbankabfragen werden Routinen die auch das CHILI-System be-<br />
nutzt, abgewandelt und in die Adapterklasse eingebaut. Diese Abfragen liefern als Ergebnis<br />
(dbResult t), eine Liste aus Zeigern, auf die verschiedenen Datenbankobjekte der Selektion.<br />
Diese Datenbankobjekte sind aber keine Objekte im objektorientierten Sinne, da sie über kei-<br />
ne Methoden verfügen, die den Zugriff auf ihre Attribute ermöglicht, sondern als Strukturen<br />
implementiert sind. Das weiteren sind, wie am Beispiel des Datenbankobjektes image t viele<br />
benötigte Informationen nicht vorhanden. Bei der Bildklasse sind einige Informationen, die<br />
für die Arbeit mit dem PlugIn benötigt werden, nicht direkt über das Bild-Datenbankobjekt<br />
zu abzufragen, sondern erst nach dem Laden <strong>eines</strong> PIC-Bildes, im PIC- oder DICOM-Header<br />
verfügbar.<br />
Deshalb wurde die Klasse SliceInfo (Abschnitt 5.23) entwickelt, mit der es möglich ist,<br />
Informationen über Schichtbilder zu erhalten.<br />
81
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
5.9.3 Die Imageklassen<br />
ImageVolume<br />
int getSize();<br />
void addSlice();<br />
void sortVolume();<br />
Volume::iterator getSliceIterator();<br />
vtkPolyData* getPolyData();<br />
std::deque Volume;<br />
Volume::iterator it;<br />
Volume volume;<br />
ImageSlice<br />
void setPath(QString path);<br />
void setZ(QString z);<br />
void setNumber(int n);<br />
int n,z;<br />
QString path;<br />
Abbildung 5.22: PlugIn-Imageklassen<br />
Das in Kapitel 3.1.5 vorgestellte PIC-Format stellt zwar gegenüber dem DICOM-Format<br />
mehr Informationen zur Verfügung, bei der <strong>Entwicklung</strong> der Adapterklasse hat sich aber her-<br />
ausgestellt, dass diese nicht ausreicht. Deshalb wurden die in Abbildung 5.22 dargestellten<br />
Imageklassen entwickelt, die den Umgang mit den Bilddaten vereinfachen. Die wichtigste<br />
Funktion dieser Klassen ist das, in Abschnitt 5.9.4 beschriebene, Bereitstellen <strong>eines</strong> Oberflä-<br />
chenmodells. Dazu werden die, durch die Klasse ImageData repräsentierten Einzelschichten,<br />
in einer Containerklasse sequentiell angeordnet. Dieser Container bietet gegenüber einer An-<br />
ordnung in einem PIC-Volumen einige Vorteile. Die enthaltenen ImageSlices können nach<br />
bestimmten Kriterien sortiert werden, über einen Iterator ist ein einfacher Zugriff möglich<br />
und die Klasse kann neuen Anforderungen angepasst werden.<br />
5.9.4 Informationen über Schichtbilder<br />
SliceInfo<br />
char* getImageType(ipPicDescriptor*);<br />
float getZValueFromPic(ipPicDescriptor*);<br />
float getImageNumber(int);<br />
char* getSeriesSourceUID(ipPicDescriptor*);<br />
Vector3 getSpacingFromSlices(ipPicDescriptor* pic[2]);<br />
Abbildung 5.23: Die Klasse SliceInfo<br />
Im folgenden werden die verschiedenen Funktionen der Klasse SliceInfo, die die benötig-<br />
82
5.9. ENTWICKLUNG PLUGIN-ADAPTERKLASSE<br />
ten Schichtbild-Informationen über einen ipPicDescriptor aus dem PIC-Header abfragen,<br />
vorgestellt:<br />
◮ Die Methode getImageType() liefert den ImageType <strong>eines</strong> PIC-Bildes, der das Bild<br />
z.B. als Originalbild oder Segmentierungsergebiss kennzeichnet. Diese Information<br />
muss abgefragt werden, wenn eine Serie als Originalserie oder Segmentierungsergebnis<br />
identifiziert werden soll.<br />
◮ Um von einer Segmentierungsserie die Originalserie zu erhalten, muss die instan-<br />
ceUID der Originalserie mit der Funktion getSeriesSourceUID(), über den Header<br />
<strong>eines</strong> Schichtbildes der segmentierten Serie abgefragt werden.<br />
◮ Die Anfangs- und Endposition des Patienten bei einer radiologischen Untersuchung,<br />
bestimmen die Größe der Ausdehnung <strong>eines</strong> Bildvolumens in z-Richtung. Für jedes<br />
einzelne Schichbild kann mit der Funktion getZValueFromPic() die Position innerhalb<br />
dieses Volumens abgefragt werden.<br />
◮ Die einzelnen Schichtbilder einer Serie sind in z-Richtung aufsteigend sortiert und mit<br />
der ImageNumber nummeriert. Die Datenbank-Selektion aller Bilder einer Serie liefert<br />
ein nicht sortiertes Volumen, dass mit der ImageNumber sortiert werden kann.<br />
◮ Der Spacing-Wert beschreibt die Ausrichtung <strong>eines</strong> Volumens in x-y-z-Richtung. Dieser<br />
Wert läßt sich durch die, in den PIC-Header eingetragene, Pixelgröße und durch den<br />
Abstand zweier Schichten mit der Funktion getSpacingFromSlices() bestimmen.<br />
83
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
Die Serieninformations-Klassen<br />
ChiliSeries<br />
QString type;<br />
double spacing[3];<br />
QString description;<br />
QString absolutPath;<br />
QString relativPath;<br />
QString chiliOID;<br />
QString instanceUID;<br />
SegmentationSeries<br />
void setDateTime(char* date,char* time);<br />
bool stlActual();<br />
ImageVolume* getVolume();<br />
QString stlPath;<br />
QDateTime dateTime;<br />
QDateTime stlDateTime;<br />
bool stlFound;<br />
OrganNicerSeries<br />
QString vrmlOID;<br />
QString sceneOID;<br />
Abbildung 5.24: Serieninformations-Klassen<br />
Das Organicer-PlugIn mehr Informationen<br />
benötigt, als das Serienobjekt von CHILI<br />
anbietet, wurden die, in der Abbildung 5.24<br />
abgebildeten Klassen entwickelt, die zusätz-<br />
lich die notwendige Funktionalität anbietet,<br />
um mit diesen Klassen arbeiten zu können.<br />
Zu den einzelnen Attributen der verschiede-<br />
nen Klassen gibt es Set- und GetMethoden,<br />
zum Abfragen bzw. Setzen der Werte. Mit<br />
der SegmentationSeries-Klasse sin die In-<br />
formationen über segmentierte Serien ver-<br />
bunden. Bei der Initialiserung dieser Klasse<br />
wird untersucht, ob zur Serie ein Oberflä-<br />
chenmodell vorhanden ist und falls es exis-<br />
tiert der Pfad und der Zeitpunkt der letzten<br />
Modifikation gespeichert. Um die Aktualität <strong>eines</strong> Obeflächenmodells überprüfen zu können,<br />
müssen in den Image-Datenbankobjekten einer segmentierten Serie, die Zeiten des Daten-<br />
bankeintrages abgefragt werden und die jüngste Änderungszeit, mit der Modifikationszeit<br />
der STL-Oberflächendatei verglichen werden.<br />
84
PlugIn Workflow<br />
PlugIn aktivieren<br />
Studie auswählen<br />
Serien selektieren<br />
[ Originalserie ] [ OrganNicer-Serie ]<br />
Anzeigen in<br />
Chili-Serienansicht<br />
Anzeigen in<br />
Chili-Lichtkasten<br />
Originalserie auswählen Szenendatei auswählen<br />
Segmentierte Serien<br />
selektieren<br />
for each<br />
Pfadangaben der Einzelbilder speichern<br />
Erstellungsdatum abfragen<br />
Existenz und Datum STL-Datei abfragen<br />
for all<br />
Szene laden<br />
Anzeigen in DataListView<br />
Segmentierte Serie auswählen<br />
Aktualität STL-Datei überprüfen<br />
[ aktuell ] [ nicht aktuell ]<br />
STL-Daten laden<br />
Abbildung 5.25:<br />
STL-Daten erzeugen<br />
Aktivätsdiagramm PlugIn-Workflow<br />
5.9. ENTWICKLUNG PLUGIN-ADAPTERKLASSE<br />
Das Diagramm auf dieser Seite beschreibt<br />
den Arbeitsablauf nach dem Aktivieren des<br />
Organicer-PlugIns. Durch die Farbunter-<br />
legung der Symbole können die, an einer<br />
Aktivität beteiligten Akteure, unterschie-<br />
den werden. Den verschiedenen Akteuren<br />
werden folgende Farben zugeordnet:<br />
� Anfragen des PlugIns an die Chili-<br />
Datenbank<br />
� Auslesen von Header-Informationen<br />
durch das PlugIn<br />
� Eingaben des Benutzers<br />
� CHILI-Aktionen<br />
Symbole ohne Farbunterlegung repräsen-<br />
tieren Aktionen des PlugIns. Nachdem<br />
der Benutzer eine Studie ausgewählt hat,<br />
werden in der Serienansicht von CHILI,<br />
die zu dieser Studie gehörenden Serien<br />
mit Originalbildern angezeigt. Falls eine<br />
Organicer-Serie existiert, werden die vor-<br />
handenen Organicer-Szenen als Einträge<br />
im Lichtkasten angezeigt und können gela-<br />
den werden (siehe Abbildung 5.25). Nach<br />
der Auswahl einer Originalserie werden die,<br />
von ihr abgeleiteten Serien, gesucht. Für<br />
jede dieser Serien müssen die Einzelbilder<br />
selektiert werden. Von den Schichtbildern<br />
werden die Pfadangaben gespeichert und<br />
in den Pic-Headern das Erstellungsdatum<br />
abgefragt und das jüngste Datum als Seri-<br />
endatum gespeichert. In der Datenansicht<br />
kann der Benutzer eine segmentierte Serie<br />
85
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
zur Visualisierung auswählen. Wenn zu dieser Serie eine STL-Datei existiert und diese<br />
aktuell ist, wird sie geladen. Andernfalls muss aus den Segmentierungsergenissen erst ein<br />
Oberflächenmodell erzeugt werden.<br />
Erzeugen von Oberflächen<br />
Speicherplatz für Bildvolumen allokieren<br />
für jede<br />
Einzelschicht<br />
Bilddaten von Platte lesen<br />
Zum Bildvolumen kopieren<br />
alle<br />
Schichten<br />
Bildvolumen skalieren<br />
In vtkImage konvertieren<br />
Binärvolumen erzeugen<br />
Auflösung reduzieren<br />
Binärvolumen glatten<br />
Konturfläche erzeugen<br />
Reduzierung der Dreiecke<br />
vtkPolyData-Oberfläche glätten<br />
STL-Daten laden<br />
Abb. 5.26: Aktivitäten<br />
STL-Erzeugung<br />
86<br />
Zur Erzeugung der Oberflächenmodelle wurde ein Ablauf erar-<br />
beitet, der aus den, von CHILI angebotenen Schichtbildern,<br />
STL-Daten erzeugt. Ziel ist es eine glatte Oberfläche, mit<br />
möglichst wenig Polygonen herzustellen. Nachdem in der Da-<br />
tenansicht des Organicers eine segmentierte Serie ausgewählt<br />
ist, wird in der PlugIn-Adapterklasse geprüft, ob eine Neuer-<br />
stellung <strong>eines</strong> Oberflächenmodells notwendig ist. Der in der<br />
Abbildung 5.26 dargstellte Ablauf, findet in der getPolyDa-<br />
ta-Funktion der ImageVolume-Klasse statt. Nach dem Laden,<br />
der im PIC-Format auf der Festplatte abgelegten Schichtbilder,<br />
mit der ipPicGet-Funktion, werden diese im Arbeitsspeicher zu<br />
einer Bildsequenz zusammengefügt. Die im PIC-Format auf der<br />
Festplatte gespeicherten Schichtbilder werden im Arbeitsspei-<br />
cher zu einer Bildsequenz zusammengefügt. Mit der ipFuncS-<br />
cale-Funktion wird das Bildvolumen isotrop, auf die Pixelgröße<br />
(1,1,1) , skaliert. Um zur weiteren Verarbeitung, die Funk-<br />
tionen des Visualization Toolkits (Kapitel 3.3.4) nutzen zu<br />
können, wird dieses Bildvolumen in eine topologisch und geo-<br />
metrisch regelmäßige Struktur, ein vtkImageData, konvertiert.<br />
Eine Glättung des Volumens wird durch die Bearbeitung mit<br />
einem Gaußfilter erreicht, bei dem einem Bildpunkt, unter Be-<br />
rücksichtigung seiner Nachbarpixel, ein Mittelwert zugeordnet<br />
wird. Mit dem in Kapitel 3.3.2 vorgestellten Marching-Cubes-<br />
Algorithmus, wird ein aus Polygonen bestehendes Oberflächen-<br />
modell erzeugt. Da dieses Modell überflüssige Polygone ent-<br />
hält, werden diese mit einem Dezimierer reduziert. Zur weiteren<br />
Glättung wird ein Filter benutzt, der durch die Lagebeziehung<br />
einzelner Punkte zu ihren Nachbarpunkten einen Mittelwert
5.9. ENTWICKLUNG PLUGIN-ADAPTERKLASSE<br />
bestimmt und diesen als Grundlage zur Glättung der Oberfläche benutzt. Das bearbeitete<br />
Oberflächenmodell wird durch die Adapterklasse, an den DataReader weitergegeben und<br />
dort geladen.<br />
Durch den hier vorgstellten Workflow vereinfacht und beschleunigt sich auch der Ablauf<br />
einer Operationsplanung, da keine Bilddaten exportiert werden müssen und die Schritte 1-4<br />
in der Abbildung 4.4 entfallen.<br />
PlugIn Klassenstruktur<br />
Dieser letzte Abschnitt gibt einen Überblick über die Klassenstruktur der entwickelten<br />
PlugIn-Schnittstelle. Dazu zeigt das Klassendiagramm 5.27 die Verbindungen zwischen<br />
den einzelnen Klassen und die abschließende kurze Beschreibung einiger Klasse.<br />
1<br />
STL-Texteintrag<br />
Instance UID<br />
Eintrag<br />
1<br />
1-n<br />
SegmentationSerie<br />
Instance UID<br />
Description<br />
1<br />
ImageVolume<br />
ImageSliceArray<br />
1<br />
ImageSlice<br />
Nummer<br />
Pfad<br />
1<br />
1<br />
1-n<br />
1<br />
CT-Bild<br />
Instance UID<br />
Pixeldaten<br />
1-n<br />
1<br />
OrganNicerPluginFrame<br />
OrganNicerApp* organNicerApp;<br />
1 1 1<br />
1<br />
OriginalSeries<br />
Instance UID<br />
Description<br />
SliceInfo<br />
char* getImageType()<br />
float getZValueFromPic()<br />
1<br />
1<br />
1<br />
OrganNicerSerie<br />
Instance UID<br />
Description<br />
Abbildung 5.27: PlugIn Klassenstruktur<br />
1<br />
1<br />
1-n<br />
Instance UID<br />
Eintrag<br />
VRML-Szene<br />
Instance UID<br />
Eintrag<br />
OrganNicerSzene<br />
1-n<br />
87
KAPITEL 5. PRAKTISCHE REALISIERUNG<br />
◮ In der OrganicerSerie werden die zu einer Studie gehörenden Organicer- und VRML-<br />
Szenen abgelegt.<br />
◮ Eine Organicer-Szene wird als XML-Szenenbeschreibung der OrganicerSerie zugeord-<br />
net und erhält den Mime-Type OCN.<br />
◮ Der Texteintrag einer VRML-Szene enthält eine Pfadangabe der VRML-Datei auf der<br />
Festplatte und den Mime-Type WRL.<br />
◮ Die Klasse ImageSlice enthält den Pfad zu einem PIC-Schichtbild und eine Nummer,<br />
welche die Position innerhalb des PIC-Volumens beschrieben.<br />
◮ In der ImageVolume werden die einzelnen Schichtbilder in einem Array gespeichert.<br />
◮ In der Klasse SegmentationSeries werden die Segmentierungsergebnisse als ImageVo-<br />
lume gespeichert und können als vtkPolyData abgefragt werden.<br />
◮ Die Klasse SliceInfo verfügt über verschiedene Funktionen zur Abfrage von Informa-<br />
88<br />
tionen über Schichtbilder.
6 Zusammenfassung der Diplomarbeit<br />
In der Abteilung Medizinische und Biologische Informatik des Deutschen Krebsforschungs-<br />
zentrums ist ein Prototyp zur Visualisierung medizinischer Bilddaten, der OrgaNicer, ent-<br />
wickelt worden. Dieses Tool wird überwiegend zur Planung von Lebertumoroperationen<br />
eingesetzt. Dabei werden die Leberhülle, die Gefäßbäume und berechnete Segmente als<br />
Oberflächenmodelle visualisiert.<br />
Durch eine enge Zusammenarbeit mit der Radiologie und Chirurgie der Universitätsklinik<br />
Heidelberg ist es möglich, die gewonnenen <strong>3D</strong>-Rekonstruktionen zur Verbesserung der Dia-<br />
gnosestellung und Operationsdurchführung in den klinischen Alltag zu integrieren. Hierzu<br />
wird weiterhin an der Optimierung der Arbeitsabläufe und der Datenkommunikation gearbei-<br />
tet. In der medizinischen Bildverarbeitung ist dabei nicht nur das Übertragen der Bilddaten<br />
von einem Ort zu einem anderen zu betrachten, sondern auch der Weg der Daten innerhalb<br />
<strong>eines</strong> Programms.<br />
Im Mittelpunkt dieser Diplomarbeit stand die Weiterentwicklung des <strong>3D</strong>-Visualisierungstools<br />
OrgaNicer und die Integration in das Teleradiologiesystem CHILI. Mit dem Redesign dieses<br />
Softwareproduktes wurde das Ziel erreicht, seine Funktionalität als Standalone- und PlugIn-<br />
Version zur Verfügung zu stellen. Die vorgenommenen Änderungen lassen sich in adaptieren-<br />
de und perfektionierende Wartungsmaßnahmen unterteilen. Zur Umsetzung dieser Arbeiten<br />
wurde die Programmiersprache C++ und die C++-Klassenbibliothek Qt verwendet.<br />
Bei den perfektionierenden Wartungsmaßnahmen standen die Neugestaltung der Datenhal-<br />
tung und die <strong>Entwicklung</strong> einer, für interaktive Anwendungen geeigneten, Programmstruktur<br />
im Vordergrund. Durch die Verwendung von Entwurfsmustern ist ein modular aufgebautes<br />
Programm entstanden, in dem die verschiedenen Funktionalitäten in eigenen Klassen gekap-<br />
selt sind. Eine Vermittlerklasse organisiert dabei den Nachrichtenmechanismus mit den am<br />
Datenaustausch beteiligten Programmteilen. Mit einem neugestaltenen Datenformat kön-<br />
nen die Daten auf die Festplatte oder in die Datenbank des Teleradiologiesystems CHILI<br />
geschrieben bzw. von dort gelesen werden.<br />
Zur Darstellung des Sicherheitsabstands zwischen den Tumoren und dem Gefäßbaum wurde<br />
ein Verfahren implementiert, mit dem tumornahe Gefäße farblich markiert werden können.<br />
Des Weiteren wurde ein Ablauf zur Konvertierung von <strong>3D</strong>-Szenen in das internetfähige<br />
89
KAPITEL 6. ZUSAMMENFASSUNG DER DIPLOMARBEIT<br />
VRML-Format implementiert. Beide Maßnahmen wurden mit dem Visualization Toolkit<br />
(VTK) umgesetzt.<br />
Mit einem eigenen Konzept wurde die Verwendung von VTK und das reine OpenGL-<br />
Rendering des OrgaNicer’s kombiniert. In diesem Konzept verwaltet die ViewProperty-<br />
Klasse die Materialeigenschaften und ermöglicht, neben der qualitativ hochwertigen Tranz-<br />
parenzdarstellung der Oberflächenmodelle, die Verwaltung der Materialdefinitionen in Da-<br />
tenstrukturen von VTK.<br />
Durch die Integration <strong>eines</strong> Tool’s zur Segmentberechnung ist die Erstellung und Visua-<br />
lisierung von Resektionsvorschlägen möglich. Hierzu werden die Gefäßteile innerhalb des<br />
Sicherheitsabstandes markiert und das von ihnen versorgte Gewebe berechnet.<br />
Im Verlauf der <strong>Entwicklung</strong> des OrgaNicer-PlugIn’s hat sich gezeigt, dass die CHILI-PlugIn-<br />
Schnittstelle den Anforderungen nicht genügt:<br />
• Die Datenbank von CHILI ist inkonsistent. Wichtige Bildinformationen werden nicht<br />
in die vorgesehenen Datenbankstrukturen eingetragen.<br />
• Die Bilddaten sind mit einem Steuerelement (Lichtkasten) verknüpft, welches vom<br />
OrgaNicer-PlugIn nicht benutzt wird.<br />
• Benötigte Bildinformationen sind im Datenbankkonzept von CHILI nicht vorgesehen<br />
und mussten über die Header der Bilder abgefragt werden.<br />
• Aus den Datenbankobjekten der Serien kann keine Information gewonnen werden, ob<br />
es sich um eine Serie mit Originalbildern oder Segmentierungsergebnissen handelt. Es<br />
gibt auch keine Zuordnungsmöglichkeit zwischen Originalserie und ihren Segmentie-<br />
rungsergebnissen.<br />
• Die mit C-Strukturen implementierten Datenbankobjekte bieten keine Funktionalität<br />
zum Zugriff auf die Daten an.<br />
• Das Eintragen mehrerer Texteinträge zu einer ausgewählten Serie war nicht möglich.<br />
Änderungswünsche wurden von den Entwicklern des Teleradiologiesystems CHILI nicht be-<br />
rücksichtigt. Deshalb wurde die Integration des OrgaNicer’s nicht mit der vorhandenen<br />
Schnittstelle vollzogen, sondern mit der Neuentwicklung einer eigenen Schnittstelle gelöst.<br />
Diese neue Schnittstelle verfügt über eine Adapterklasse, welche die Kommunikation mit<br />
90
dem Teleradiologiesystem organisiert. Weitere Klassen erlauben den Zugriff auf die DICOM-<br />
Informationen der Serien und Bilder und bieten Informationen an, welche von den Daten-<br />
bankobjekten des Teleradiologiesystems nicht zur Verfügung gestellt werden. Durch adap-<br />
tierende Änderungen an der Programmstruktur des OrgaNicer’s ist es möglich, weite Teile<br />
des Quellcodes in der Standalone und in der PlugIn-Version zu nutzen. Auch die Elemen-<br />
te der graphischen Benutzerschnittstelle können, durch die Verwendung <strong>eines</strong> Tool’s zur<br />
Gestaltung von graphischen Benutzerschnittstellen, in beiden Anwendungsarten verwendet<br />
werden.<br />
Die Funktionalität des OrgaNicer’s steht mit der PlugIn-Version im Teleradiologiesystem<br />
CHILI zur Verfügung, so dass Operationsplanungen innerhalb dieses Teleradiologiesystems<br />
möglich sind. Somit ist es nicht mehr notwendig die Bilddaten zu exportieren, wodurch<br />
sich die Bearbeitungszeit einer Operationsplanung verkürzt. Auch wird durch einen neuen<br />
Workflow die Erzeugung der Oberflächenmodelle aus den Einzelschichten optimiert.<br />
Mit der allgemeinen Schnittstellenklasse ChiliPluginFrame arbeitet mittlerweile ein Pro-<br />
gramm zur Analyse von Gefäßstrukturen am Herzen. Die erzeugten VRML-Szenen können<br />
mit dem OrgaNicer-PlugIn in die Datenbank von CHILI importiert und so einem webbasier-<br />
ten Informationssystem zur Verfügung gestellt werden.<br />
Mit der vorliegenden Diplomarbeit steht darüber hinaus eine Dokumentation zur Verfügung,<br />
die mit der modular gestalteten Programmstruktur die Verständlichkeit der Programmstruk-<br />
tur erhöht und zur Qualitätsverbesserung des OrgaNicer’s beiträgt.<br />
91
KAPITEL 6. ZUSAMMENFASSUNG DER DIPLOMARBEIT<br />
92
Altsystem Aktueller Stand<br />
CHILI<br />
Unix<br />
OpenGL OpenGL + VTK<br />
7.1 Ablösung des Altsystems<br />
7 Ausblick<br />
CHILI<br />
Qt<br />
Ausblick<br />
Abbildung 7.1: <strong>Entwicklung</strong> <strong>eines</strong> Visualisierungstools<br />
MITK (VTK)<br />
Die Migrationstrategie erfolgt stufenweise und soll schon frühzeitig nutzbare Ergebnisse<br />
bringen. Allerdings ensteht durch diese Vorgehensweise auch der Aufwand, dass beide Sys-<br />
teme in dieser Zeit koexistieren und gepflegt werden müssen. Durch intensive Tests müssen<br />
Fehler in der Neuentwicklung gefunden und beseitigt werden. Der Einsatz des Neusystems<br />
in der Operationsplanung ist erst mit einer stabilen Version möglich, da aufgrund des engen<br />
Zeitplans einer solchen Planung, nur mit einer stabilen Version gearbeitet werden kann.<br />
7.1.1 Ausbau der Visualisierungsplattform CHILI<br />
Nach der vollzogenen Ablösung des Altsystems, soll die Integration in das Teleradiologiesys-<br />
tem CHILI vorangetrieben werden. Hierzu muss allerdings ein Programm entwickelt werden,<br />
dass die Gefäßbäume innerhalb des Teleradiologiesystems segmentiert und über die CHILI-<br />
Datenbank dem Organicer zur Verfügung stellt. Die Funktionalität des Organicers steht mit<br />
VTK<br />
93
KAPITEL 7. AUSBLICK<br />
der PlugIn-Version im Teleradiologiesystem zur Verfügung. Allerdings muss diese Version<br />
noch intensiv getestet werden, da das zugrundeliegende CHILI-Softwaresystem sensibel auf<br />
Fehler reagiert. Ziel dieser Migrationphase ist die Durchführung des kompletten Workflows<br />
einer Operationsplanung im Teleradiologiesystem CHILI.<br />
Die Erfahrungen der PlugIn-<strong>Entwicklung</strong> können auch für andere Projekte genutzt werden.<br />
• Diese Diplomarbeit könnte helfen eine neue CHILI-PlugIn-Schnittstelle für die Qt-<br />
Version zu entwickeln. Da das Organicer-PlugIn größtenteils mit der Datenbank von<br />
CHILI zusammenarbeitet, ist die Umstellung auf die Qt-Version von CHILI unproble-<br />
matisch.<br />
• Teile der Funktionalität der Organicer-Adapterklasse könnten in die Oberklasse (Chi-<br />
liPluginFrame) ausgelagert werden und damit auch den anderen <strong>Entwicklung</strong>en in-<br />
nerhalb der MBI-Abteilung zur Verfügung gestellt werden.<br />
Eine Verlagerung der Funktionalität der Organicer-Adapterklasse in andere Bereiche, würde<br />
die Wiederverwendung der gefundenen Lösungen ermöglichen und andererseits die Komple-<br />
xität der Organicer-Adapterklasse reduzieren.<br />
7.2 Das Visualisierungsframework MITK<br />
Das Hauptziel der MBI-Abteilung ist es, alle Neuentwicklungen innerhalb <strong>eines</strong> Visuali-<br />
sierungsframeworks umzusetzen. Dazu gehören neben der Leberoperationsplanung, For-<br />
schungsprojekte im Bereich Lunge und Herz, ein kommerzielles Projekt zur Verfolgung von<br />
Instrumenten bei Herzoperationen, die Navigation von Instrumenten in der Leberchirurgie<br />
und die Verbesserung der Segmentierungsalgorithmen. Dieses Framework bildet den Rah-<br />
men in dem Klassen und Entwürfe entwickelt werden, die in möglichst vielen Bereichen der<br />
MBI-Abteilung genutzt werden können. Dies soll in Zukunft die schnellere <strong>Entwicklung</strong> von<br />
Anwendungen mit ähnlichen Strukturen ermöglichen und die Wartbarkeit und Wiederver-<br />
wendbarkeit der Komponenten erhöhen.<br />
Die <strong>Entwicklung</strong> dieses Frameworks ist allerdings noch nicht so weit fortgeschritten, dass es<br />
sich zur Realisierung <strong>eines</strong> Operationsplanungstools eignet. Deswegen ist es auch noch nicht<br />
abzusehen, ob mit diesem Framework auch die qualitativ hochwertigen Visualisierungen des<br />
Organicers umgesetzt werden können und die <strong>Entwicklung</strong> <strong>eines</strong> flexiblen, erweiterbaren<br />
Softwareproduktes möglich ist. Allerdings sind in diesem Framework Funktionalitäten rea-<br />
lisiert, die auch für den Organicer interessant sind. Die Möglichkeit Schnittbilder innerhalb<br />
94
7.3. NEUE EINSATZGEBIETE DES ORGANICERS<br />
einer <strong>3D</strong>-Rekonstruktion (Multiplanare Rekonstruktion) darstellen zu können, kann u.a. dazu<br />
genutzt werden Visualisierungsergebnisse mit den Originalbildern zu vergleichen. Nach einer<br />
kompletten Umstellung der Visualisierung des Organicers auf VTK, könnte eine Anbindung<br />
an das Framework stattfinden. Da im Framework auch VTK-Darstellungsfenster verwendet<br />
werden, müsste im Organicer der SceneHandler durch ein solches Fenster ersetzt werden.<br />
Diese Anbindung wurde während dieser Diplomarbeit getestet, setzt aber die vollständige<br />
Umstellung des Organicers auf VTK voraus.<br />
7.3 Neue Einsatzgebiete des Organicers<br />
Das Softwareprodukt Organicer wurde speziell für die Operationsplanung in der Leberchirur-<br />
gie konzipiert, aber auch schon im Bereich der Nieren-, Pankreas-, Herz- und Lungenchirur-<br />
gie in Heidelberg eingesetzt. Dieses Visualisierungstool könnte aber auch in anderen Berei-<br />
chen, in denen zur Beurteilung der anatomischen Strukturen Bilder aufgenommen werden,<br />
zum Einsatz kommen. Natürlich kann der Organicer auch für spezielle Aufgaben angepasst<br />
werden. Denkbar wäre ein verstärkter Einsatz bei orthopädischen oder neurochirurgischen<br />
Problemstellungen.<br />
Mit der <strong>Entwicklung</strong> des webbasierten Informationssystems können die VRML-Szenen über<br />
das Internet anderen Kliniken angeboten werden. Bis jetzt konnten Ergebnisse der Operati-<br />
onsplanungen nur mittels FTP-Server übertragen werden. Durch die Präsentation über das<br />
Internet ist auch ein Ausbau der Zusammenarbeit mit den Kliniken John Hopkins Washing-<br />
ton, Presbyterian Hospital Pittsburgh und der Universitätsklinik Lausanne möglich. Zur Zeit<br />
werden auch Wege gesucht Visualisierungsergebnisse, als Dienstleistung, anderen Kliniken in<br />
Deutschland anzubieten. Dazu muss allerdings geklärt werden, wer die Kosten einer solchen<br />
Leistung trägt.<br />
7.4 Schlusswort<br />
Die Verbesserung der Aufnahmegeräte für medizinische Bilder und die Fortschritte in der<br />
medizinischen Bildverarbeitung führen zu immer besseren Visualisierungsergebnissen. Mit<br />
verschiedenen Messungen und Methoden kann dieses objektive Wissen noch erweitert wer-<br />
den. Dies führt aber weder zu einer allwissenden Erkenntnis, noch kann ein Erfolg einer<br />
Therapie vorrausgesagt werden, denn dieser hängt auch von der individuellen Verfassung<br />
des Menschen ab. Deswegen wird bei Leberlebendspenden in Heidelberg nicht nur die Spen-<br />
95
KAPITEL 7. AUSBLICK<br />
derleber auf ihre Tauglichkeit untersucht, sondern auch die psychische Eignung des Spenders<br />
beurteilt. So wurden bereits Operationen abgesagt obwohl die Spenderleber, nach der ob-<br />
jektiven Beurteilung, für eine Leberlebendspende geeignet war.<br />
Dieses Beispiel zeigt, dass nur durch eine Zusammenarbeit der medizinischen Berufsgruppen<br />
und dem Austausch der gewonnenen Informationen, eine bestmögliche individuelle Therapie<br />
für den Patienten gefunden werden kann.<br />
96
Tabellenverzeichnis<br />
3.1 Patientenobjekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />
3.2 Instance UID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />
97
Tabellenverzeichnis<br />
98
A Listings<br />
Die in diesem Anhang vorgestellten Listings sind keine lauffähigen Programme. Sie sollen<br />
einen Einblick in die Implementierungen dieser Diplomarbeit geben und verwenden dazu<br />
Ausschnitte aus verschiedenen Teilen des Quellcodes.<br />
A.1 Listing zum Aufbau <strong>eines</strong> VTK-Datasets<br />
Das folgende Listing zeigt am Beispiel des Würfels aus Abbildung 3.10 den Aufbau <strong>eines</strong><br />
Polydata-Datasets innerhalb einer VTK-Pipeline:<br />
/ ∗ A r r a y d e r P u n k t e , D r e i e c k e und S k a l a r e i n s t a n z i i e r e n ∗/<br />
vtkCellArray* polys = vtkCellArray::New();<br />
vtkPoints* points = vtkPoints::New();<br />
vtkFloatArray* scalars = vtkFloatArray::New();<br />
/ ∗ E c k p u n k t e f e s t l e g e n ∗/<br />
static float x[8][3]= {{-1,-1,-1},{1,-1,-1},{1,1,-1},{-1,1,-1},<br />
{-1,-1,1},{1,-1,1},{1,1,1},{-1,1,1}};<br />
/ ∗ P u n k t d a t e n , D r e i e c k e und S k a l a r w e r t e z u o r d n e n ∗/<br />
for(int p=0;pInsertPoint(p,x[p]);<br />
for(int i=0;iInsertNextCell(3,pts[i]);<br />
for(int s=0;sInsertTuple1(s,s);<br />
/ ∗ F a r b w e r t e f e s t l e g e n u nd d e n S k a l a r e n z u o r d n e n ∗/<br />
vtkLookupTable* lut = vtkLookupTable::New();<br />
for(int l=0;lSetTableValue(l,1,0,0,0.85);<br />
for(int l=4;lSetTableValue(l,0,0,1,0.85);<br />
scalars->SetLookupTable(lut);<br />
/ ∗ P u n k t e und D r e i c k e dem D a t a s e t z u o r d n e n ∗/<br />
vtkPolyData* polydata = vtkPolyData::New();<br />
99
ANHANG A. LISTINGS<br />
polydata->SetPoints(points);<br />
polydata->SetPolys(polys);<br />
polydata->GetPointData()->SetScalars(scalars);<br />
/ ∗ M a p p e r dem A c t o r z u o r d n e n ∗/<br />
vtkPolyDataMapper* cubeMapper = vtkPolyDataMapper::New();<br />
cubeMapper->SetInput(polydata); // d a s D a t e n o b j e k t dem M a p p e r<br />
vtkActor* cubeActor = vtkActor::New();<br />
cubeActor->SetMapper(cubeMapper);<br />
/ ∗ R e n d e r e r dem F e n s t e r z u o r d n e n ∗/<br />
vtkRenderer *renderer = vtkRenderer::New();<br />
vtkRenderWindow *window = vtkRenderWindow::New();<br />
window->AddRenderer(renderer);<br />
window->Render()<br />
A.2 Listing Mediator - Datenhaltung<br />
Listing A.1: Aufbau <strong>eines</strong> Polydata Datasets<br />
Der Mediator implementiert den Nachrichtenmechanismus der Anwendung und organisiert<br />
die Datenhaltung (aus mediator.h und mediator.cpp).<br />
// a u s m e d i a t o r . h<br />
class Mediator : public QObject{<br />
Q_OBJECT<br />
public slots:<br />
// u p d a t e Model −View − C o n t r o l l e r<br />
signals:<br />
void slotUpdateMVC();<br />
void updateMVC();<br />
public:<br />
// g i b t E l e m e n t o r g a n i s a t o r zum E i n t r a g e n d e r D a r s t e l l u n g s e l e m e n t e<br />
ElementOrganizer* getElementOrganizer();<br />
// l o e s c h t d i e D a t e n l i s t e und d i r E l e m e n t l i s t e n<br />
100
void clearLists();<br />
// ü f g t D a t e n e l e m e n t i n D a t e n l i s t e<br />
void dataListAppend(DataNode* dn);<br />
// l o e s c h t D a t e n e l e m e n t a u s D a t e n l i s t e<br />
void dataListRemove(int n);<br />
A.2. LISTING MEDIATOR - DATENHALTUNG<br />
// l i e f e r t d i e A n z a h l d e r E l e m e n t e i n d e r D a t e n l i s t e<br />
int dataListCount(){ return dataCounter;}<br />
// l i e f e r t e i n D a t e n e l e m e n t u e b e r e i n e n I n d e x<br />
DataNode* getDataNode(int i);<br />
// I t e r a t o r zum Z u g r i f f a u f a l l e E l e m e n t e d e r D a t e n l i s t e<br />
QPtrListIterator getDataListIterator();<br />
// g i b t I n s t a n z d e s M e d i a t o r s<br />
static Mediator* getInstance();<br />
// z u r P r u e f u n g ob M e d i a t o r b e r e i t s i n s t a n z i i e r t i s t<br />
friend class std::auto_ptr;<br />
// g i b t I d e n t i f i k a t i o n s n u m m e r f u e r n e u e s D a t e n e l e m e n t<br />
int getId(){ return idCounter; }<br />
protected:<br />
// Z a e h l e r d e r I d e n t i f i k a t i o n s n u m m e r n<br />
static int idCounter;<br />
// ä Z h l e r d e r D a t e n l i s t e<br />
static int dataCounter;<br />
// c o n s t r u c t o r NOT p u b l i c ! ( s i n g l e t o n p a t t e r n )<br />
Mediator();<br />
virtual ~Mediator();<br />
// Z e i g e r a u f d i e I n s t a n z d e s M e d i a t o r s<br />
static std::auto_ptr oneAndOnlyInstance;<br />
// d i e D a t e n l i s t e d e r A n w e n d u n g<br />
typedef QPtrList DataNodeList;<br />
DataNodeList DataList;<br />
private:<br />
};<br />
// s p e i c h e r t d i e I d e n t i f i k a t i o n s n u m m e r n d e r D a t e n e l e m e n t e<br />
typedef QValueList IDList;<br />
IDList idList;<br />
// o r g a n i s i e r t d i e D a r s t e l l u n g s e l e m e n t e<br />
ElementOrganizer* elementOrganizer;<br />
// a u s m e d i a t o r . c p p<br />
101
ANHANG A. LISTINGS<br />
Mediator* Mediator::getInstance(){<br />
if (oneAndOnlyInstance.get() == 0) {<br />
oneAndOnlyInstance.reset(new Mediator());<br />
}<br />
return oneAndOnlyInstance.get();<br />
}<br />
void Mediator::dataListRemove(int dnId){<br />
}<br />
IDList::iterator it;<br />
it = idList.at(dnId);<br />
int dlIdx = *it; // g e t t h e d a t a l i s t i n d e x<br />
DataNode* dn = DataList.at(dlIdx);<br />
elementOrganizer->removeDataNode(dnId);<br />
DataList.remove(dlIdx);<br />
dataCounter-=1;<br />
if(dataCounter == 0 )clearLists();<br />
emit updateMVC();<br />
bool Mediator::dataListIsEmpty(){<br />
}<br />
return DataList.isEmpty();<br />
ElementOrganizer* Mediator::getElementOrganizer(){<br />
}<br />
return elementOrganizer;<br />
void Mediator::dataListAppend(DataNode* dn){<br />
}<br />
int idx = idList.count();<br />
dn->setId(dataCounter);<br />
idList.append(idCounter);<br />
DataList.append(dn);<br />
++dataCounter;<br />
++idCounter;<br />
DataNode* Mediator::getDataNode(int dnId){<br />
IDList::iterator it;<br />
it = idList.at(dnId);<br />
int id = *it;<br />
DataNode* dn = DataList.at(id);<br />
return dn;<br />
}<br />
102
A.3. UPDATE MECHANISMUS DER DATENANSICHT<br />
QPtrListIterator Mediator::getDataListIterator() {<br />
}<br />
QPtrListIterator iterator(DataList);<br />
return iterator;<br />
void Mediator::clearLists(){<br />
}<br />
dataCounter=0;<br />
idCounter = 0;<br />
idList.clear();<br />
DataList.clear();<br />
elementOrganizer->clearLists();<br />
emit clearSeriesList();<br />
void Mediator::slotUpdateMVC(){<br />
}<br />
emit updateMVC( );<br />
Listing A.2: Implementierung Mediator<br />
A.3 Update Mechanismus der Datenansicht<br />
Diese Funktion übernimmt die Aktualisierung der Datenansicht nach einer Veränderung des<br />
Models (aus datalistview.cpp).<br />
void DataListView::updateListView(){<br />
if(!isBlocked()){<br />
DataCheckListItem* dcli;<br />
clear();<br />
typedef std::map::const_iterator it;<br />
it s; // ä E i n t r g e d e r S e r i e n<br />
for ( s = SeriesList.begin(); s != SeriesList.end(); ++s){<br />
}<br />
dcli = new DataCheckListItem(this,s->se,s->fi,CheckBox);<br />
dcli->setSelectable(true);<br />
// h o l t s i c h d e n D a t a L i s t − I t e r a t o r<br />
103
ANHANG A. LISTINGS<br />
}<br />
QPtrListIterator dit=mediator->getDataListIterator();<br />
DataNode* dn;<br />
ViewProperty* vp;<br />
QCheckListItem* cli;<br />
if(mediator->dataListCount() > 0){<br />
while((dn = dit.current()) != 0){ // D a t e n e l e m e n t e e i n t r a g e n<br />
dcli = new DataCheckListItem(this,dn->getName(),dn,CheckBox);<br />
QListViewItem* qc =new QListViewItem(dcli, "P:"+dn->getPath());<br />
if(dn->getType()==QString("VES"))<br />
qc = new QListViewItem(dcli, "D:"+ dn->getDescription());<br />
if(dn->getType()==QString("STL"))<br />
if(dn->getType()=="VES"){ // S e g m e n t e i n t r a e g e<br />
for(int i=0; i< vp->getNumberOfColors(); ++i){<br />
QString text;<br />
text = *(SegmentTypes.at(i));<br />
SegmentListViewItem*type=new SegmentListViewItem(prop,text,vp,i);<br />
type->setSelectable(true);<br />
}<br />
}<br />
repaint(qc);<br />
}<br />
++dit;<br />
}<br />
}<br />
setBlocked(false);<br />
A.4 Oberflächemodell erzeugen<br />
Listing A.3: Update Datalistview<br />
Das Erzeugen von Oberfächenmodellen ist in der Klasse ImageData implementiert (aus<br />
ImageData.cpp).<br />
vtkPolyData* ImageVolume::getPolyData(){<br />
104<br />
ipPicDescriptor* picVolume = ipPicNew();
}<br />
ipPicClear( picVolume );<br />
ipPicDescriptor* pic,first;<br />
vtkPolyData* polyData; void* importPointer;<br />
vtkPolyDataNormals* data3d;<br />
Volume::iterator it = volume.begin();<br />
for(int i = 0; i < volume.size() ;++i,++it){<br />
path = (char*)it->getPath().latin1();<br />
pic = ipPicGet(path,NULL);<br />
if(i==0){<br />
first = pic;<br />
ipPicCopyHeader(first,picVolume);<br />
type = first->type;<br />
bpe = first->bpe;<br />
picsize = _ipPicSize(pic);<br />
}<br />
picsize*=size;<br />
picVolume->data = (char*)malloc(picsize);<br />
importPointer = picVolume->data;<br />
id = _ipPicSize(first)*i ;<br />
A.4. OBERFLÄCHEMODELL ERZEUGEN<br />
memcpy(&((char *)picVolume->data)[id],pic->data,ipPicSize(pic));<br />
if(i == (volume.size() -1)){<br />
picVolume->dim = 3;<br />
ipFloat8_t scale[3] = { 0.58,0.58,3.0 };<br />
picVolume = ipFuncScale(picVolume,scale,ipFuncScaleNN);<br />
vtkImageData* imageData= Pic2vtk::convert(picVolume);<br />
vtkImageThreshold *iselect = vtkImageThreshold::New();<br />
vtkImageGaussianSmooth *gaussian = vtkImageGaussianSmooth::New();<br />
vtkImageShrink<strong>3D</strong> *shrinker = vtkImageShrink<strong>3D</strong>::New();<br />
vtkMarchingCubes* mc = vtkMarchingCubes::New();<br />
vtkDecimate* decimate = vtkDecimate::New();<br />
vtkSmoothPolyDataFilter*smoother=vtkSmoothPolyDataFilter::New();<br />
if(picVolume){ipPicFree(picVolume);}<br />
}<br />
return polyData; }}<br />
Listing A.4: Oberflächenmodell erzeugen<br />
105
ANHANG A. LISTINGS<br />
A.5 Datenbankabfrage der Adapterklasse<br />
Nach der Auswahl einer Studie im Teleradiologiesystem CHILI überprüft diese Funktion, ob<br />
eine Organicer-Serie in dieser Studie vorhanden ist und trägt alle Segmentierungsergebnisse<br />
in eine Liste ein (aus organicerPluginFrame.cpp).<br />
void OrganNicerPluginFrame::selectAllSeriesFromStudy<br />
QStringList oidList;;<br />
dbBrowser_t *browser;<br />
QString abspath;<br />
QString relpath;<br />
if(pCurrentStudy()){<br />
(char *studyOID ){<br />
abspath=QString((char*)pGetValues(this->myInstance,"db_path"));<br />
abspath.append("/");<br />
relpath.append(pCurrentStudy()->modality);relpath.append("/");<br />
relpath.append(pCurrentStudy()->instanceUID);<br />
relpath.append("/");<br />
abspath += relpath;<br />
}<br />
series_t *series;<br />
int result = 0;<br />
browser = globals.browser[1];<br />
if( browser->db_type == dbTypePostgres ) {<br />
dbObject_t *study_object;<br />
study_object=dbObjectNewOID(browser->studyIOD,studyOID);<br />
if( study_object ) {<br />
dbResult_t *result_text;<br />
result_text=dbObjectList(study_object,browser->sIOD);<br />
if( result_text ){<br />
106<br />
dbObject_t *tmpObj = NULL;<br />
for( tmpObj = dbResultFirst(result_text,NULL);<br />
tmpObj != NULL;<br />
tmpObj = dbResultNext(result_text, NULL)){<br />
if( dbObjectNull(tmpObj))continue;<br />
if( !dbObjectAllowed(tmpObj, dbRIGHT_R)){
}<br />
printf("not_allowed_to_read\n");}<br />
else{<br />
A.5. DATENBANKABFRAGE DER ADAPTERKLASSE<br />
series = (series_t*)malloc( sizeof( image_t ) );<br />
initSeriesStruct(series_t);<br />
if(!dbObjectGetData(tmpObj,series)){<br />
coutinstanceUID;}<br />
organicerSeries->setAbsolutPath(abspath);}<br />
if(ipStrCmp("Image,Segmentation",<br />
}<br />
getImageTypeFromSeries(series->oid))==0){<br />
oidList.append(series->oid);}}}<br />
Listing A.5: Beispiel einer Datenbankabfrage<br />
107
ANHANG A. LISTINGS<br />
108
Literaturverzeichnis<br />
[Bus96] Pattern-orientierte Softwareentwicklung Frank Buschmann, Addison-Wesley, 1996<br />
[Chi02] Steinbeis-Transferzentrum Medizinische Informatik,Heidelbeg, CHILI-<br />
Produktbeschreibung Stand Januar 2002, Eigenverlag, 2002<br />
[Cla97] Claussen Ute, Programmieren mit OpenGL, Springer-Verlag Berlin,Heidelberg,New<br />
York, 1997<br />
[Eng95] U. Engelmann, A. Schröter, DKFZ, Abt. MBI , <strong>Technical</strong> <strong>Report</strong> PIC-Format,<br />
Eigenverlag ,1995<br />
[Eng00] U.Engelmann, M.Scheab, U.Eisenmann, M.Vetter,Radiologiesystem CHI-<br />
LI,Telemedizinführer Deutschland,2000<br />
[Eng02] U.Engelmann,M.Schwab,A.Schröter,H.-P.Meinzer,Evaluation des CHILI-<br />
Teleradiologienetzwerks nach 4 Jahren im klinischen Einsatz,Springer-Verlag,2002<br />
[Fow00] Martin Fowler, Refactoring,Object Technology International,Inc., 0000<br />
[Gam96] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides Entwurfsmuster,<br />
Addison-Wesley,1996<br />
[Mei03] H.P.Meinzer, Vorlesungsskript Medizinische Bildverarbeitung, Universität Heidel-<br />
berg, 2003<br />
[Mue97] Bernd Mueller, Reengineering -Eine Einführung-, Teubner Verlag, 1997<br />
[Oes98] B.Oestereich, Objektorientierte Softwareentwicklung - Analyse und<br />
Design,Addison-Wesley, 1998<br />
[OGL99] Richard S. Wright,Michael Sweet, OpenGL SuperBible, Waite Group Press, 1999<br />
[Plu99] Steinbeis-Transferzentrum Medizinische Informatik,Plugin Software Developer Kit<br />
Version 1.8,Eigenverlag,1999<br />
109
Literaturverzeichnis<br />
[Psy89] Psyschrembel Klinisches Wörterbuch, de Gruyter Verlag,, 1989<br />
[QtD03] Trolltech,Trolltech Qt-Dokumentation,Copyright Trolltech,2003<br />
[Rad01] Kauffmann,Moser,Sauer, Radiologie, Urban & Fischer, 2001<br />
[Sch02] Max Schöbinger, Analyse von Gefäßstrukturen und vesorgtem Gewebe, <strong>Technical</strong><br />
<strong>Report</strong>, DKFZ, 2002<br />
[Sil79] S.Silbernagl,A.Despopoulus, Taschenbuch der Physiologie, Thieme-Verlag, 1997<br />
[Som92] Sommerville, Software Engineering,Addison Wesley, 1992<br />
[uml01] Dr.Thomas Ehrler, Das Einsteigerseminar UML, bhv-Verlag, 2001<br />
[Vtk99] Lorenzen, The Visualization Toolkit, Verlag, 1999<br />
[Wil99] Marco Wiltgen, Digitale Bildverarbeitung in der Medizin, Shaker-Verlag, 1999<br />
[Xpp00] Kent Beck,Extreme Programming,Addison Wesley,0000<br />
[Yal03] Baris Yalcin,<strong>Entwicklung</strong> <strong>eines</strong> webbasierten Informationssystems für die computer-<br />
gestützte Leberoperationsplanung,DKFZ <strong>Technical</strong> <strong>Report</strong>,2003<br />
[<strong>3D</strong>s00] Adrian Perez,Dan Royer, 3-D Spieleprogrammierung, Software & Support Verlag,<br />
2000<br />
[<strong>3D</strong>l00] Norman Lin, Linux <strong>3D</strong>-Grafik, Software & Support Verlag, 2001<br />
[www.lebertransplantation.de] http://www.lebertransplantation.de<br />
[www.w3.org] http://www..w3.org/XML<br />
[www.mevis.de] http://www.mevis.de<br />
[www.ircad.com] http://www.ircad.com<br />
[www.web3d.org] http://www.web3d.org<br />
[www.medical.nema.org] http://www.medical.nema.org<br />
110
Abbildungsverzeichnis<br />
2.1 Anwendungsfälle Operationsplanung . . . . . . . . . . . . . . . . . . . . . 6<br />
2.2 Zeitplan der Leberoperationsplanung . . . . . . . . . . . . . . . . . . . . . 7<br />
2.3 Datenaustausch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />
2.4 Aktivitäten Operationsplanung . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
3.1 Segmenteinteilung der Leber nach Couinaud (aus ) . . . . . . . . 10<br />
3.2 Dichteskala nach Hounsfield . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
3.3 Schematische Darstellung Computertomographie . . . . . . . . . . . . . . 12<br />
3.4 Schichteinstellung Magnetresonanztherapie . . . . . . . . . . . . . . . . . 14<br />
3.5 Schema Ultraschall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
3.6 Objektdiagramm Dicom . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />
3.7 Beispieltags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />
3.8 Bildaufbereitung durch Segmentierung . . . . . . . . . . . . . . . . . . . . 19<br />
3.9 Bildverarbeitungsoperationen . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
3.10 Beispielobjekt Würfel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
3.11 Darstellung Welt-Objektkoordinatensystem . . . . . . . . . . . . . . . . . 24<br />
3.12 Punkte im Welt-Objektkoordinatensystem . . . . . . . . . . . . . . . . . 24<br />
3.13 2D-Transformationen <strong>eines</strong> Dreiecks . . . . . . . . . . . . . . . . . . . . . 25<br />
3.14 Kamera- und Lichteinstellungen . . . . . . . . . . . . . . . . . . . . . . . 27<br />
3.15 Marching Cubes - Aufbau <strong>eines</strong> Würfels . . . . . . . . . . . . . . . . . . . 28<br />
3.16 Entscheidungsfälle beim Marching-Cubes-Algorithmus . . . . . . . . . . . 29<br />
3.17 Vereinfachte Darstellung des Raytracing-Prinzips . . . . . . . . . . . . . . 30<br />
3.18 OpenGL-Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />
3.19 Beschreibung der OpenGL Unterstützung . . . . . . . . . . . . . . . . . . 32<br />
3.20 Klassendiagramm VTK . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />
3.21 VTK Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
3.22 Darstellung Welt-Objektkoordinatensystem . . . . . . . . . . . . . . . . . 37<br />
3.23 Änderungskostenkurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
111
Abbildungsverzeichnis<br />
112<br />
3.24 Der Reengineering-Prozess . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />
3.25 Singleton-Muster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />
3.26 Beobachter-Muster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />
3.27 Benutzerschnittstelle als Kompositum-Muster . . . . . . . . . . . . . . . . 43<br />
4.1 Verfahren der Transparenzdarstellung<br />
Die Zahlen kennzeichnen die Reihenfolge der Darstellung . . . . . . . . . . 46<br />
4.2 Transparenzdarstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />
4.3 Einteilung <strong>eines</strong> Gefäßbaumes . . . . . . . . . . . . . . . . . . . . . . . . 48<br />
4.4 Workflow<br />
Leberoperationsplanung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />
4.5 Lichtkasten des Teleradiologiesystems CHILI . . . . . . . . . . . . . . . . . 53<br />
5.1 Model-View-Controller Prinzip . . . . . . . . . . . . . . . . . . . . . . . . 59<br />
5.2 Strategie Transparenzdarstellung . . . . . . . . . . . . . . . . . . . . . . . 60<br />
5.3 Die Klassen der Gefäßbäume und Oberflächenmodelle . . . . . . . . . . . 61<br />
5.4 Organicer Scenegraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />
5.5 Zentrale Verwaltung der Daten . . . . . . . . . . . . . . . . . . . . . . . . 62<br />
5.6 An der Datenspeicherung beteiligte Klassen . . . . . . . . . . . . . . . . . 63<br />
5.7 Sequenzdiagramm ViewProperty laden . . . . . . . . . . . . . . . . . . . . 64<br />
5.8 Sequenzdiagramm ViewProperty speichern . . . . . . . . . . . . . . . . . . 65<br />
5.9 Aktivität Daten laden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
5.10 Aktivität Daten speichern . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />
5.11 GUI Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />
5.12 ViewProperty Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />
5.13 Farbwertzuordnung über Skalare . . . . . . . . . . . . . . . . . . . . . . . 71<br />
5.14 Datenansicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />
5.15 Einsatz des PropertyWidget zur Berechnung des Sicherheitsabstandes . . . 73<br />
5.16 Aufteilung des <strong>3D</strong>-Raumes . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />
5.17 Gefäßbaumrepräsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />
5.18 Farbzuordnung bei Gefäßbäumen . . . . . . . . . . . . . . . . . . . . . . . 76<br />
5.19 CHILI-Teleradiologiesystem<br />
( Darstellung der Resektionsvolumina in beiger Farbe ) . . . . . . . . . . . 77<br />
5.20 Adapterklasse OrganicerPluginFrame . . . . . . . . . . . . . . . . . . . . . 78
Abbildungsverzeichnis<br />
5.21 CHILI Datenbankobjekte . . . . . . . . . . . . . . . . . . . . . . . . . . . 81<br />
5.22 PlugIn-Imageklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />
5.23 Die Klasse SliceInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />
5.24 Serieninformations-Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . 84<br />
5.25 Aktivätsdiagramm PlugIn-Workflow . . . . . . . . . . . . . . . . . . . . . 85<br />
5.26 Aktivität STL-Modell erzeugen . . . . . . . . . . . . . . . . . . . . . . . . 86<br />
5.27 PlugIn Klassenstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87<br />
7.1 <strong>Entwicklung</strong> <strong>eines</strong> Visualisierungstools . . . . . . . . . . . . . . . . . . . . 93<br />
113
Abbildungsverzeichnis<br />
1.6 Glossar<br />
D<br />
DICOM-Standard Bildformat und Übertragungsprotokoll für medizische Bilddaten<br />
DKFZ Deutsches Krebsforschungszentrum Heidelberg<br />
E<br />
Entwurfsmuster Entwurfsmuster beschreiben wiederkehrende Probleme und verwenden Lö-<br />
F<br />
sungen, die zuvor erfolgreich eingesetzt wurden<br />
Framework Ein Framework besteht aus einer Menge kooperierender Klassen, welche die Ele-<br />
G<br />
mente <strong>eines</strong> wiederverwendbaren Entwurfs für eine bestimmte Art von Software dar-<br />
stellen (siehe ).<br />
Gefäßtyp Autonome Versorgungsgebiete der Gefäße werden mit einem Typ gekennzeichnet.<br />
Grauwertbild Bilder deren Bildpunkte mit Grautönen dargestellt sind.<br />
H<br />
Hounsfield Englischer Physiker der 1979 für die <strong>Entwicklung</strong> der Computertomographie mit<br />
I<br />
dem Nobelpreis ausgezeichnet wurde<br />
ipFunc-Bibliothek Die ipFunc-Bibliothek stellt eine grosse Anzahl von Funktionen zur Bear-<br />
beitung von Pic-Bildern bereit<br />
ipPic-Bibliothek Stellt grundlegende Funktionen für den Umgang mit PIC-Dateien zur Ver-<br />
fügung.<br />
Isotrope Skalierung Durch eine isotrope Skalierung wird die Ausdehnung, der im Bildvolumen<br />
114<br />
enthaltenen Voxel, auf eine in x-y-z-Richtung einheitliche Größe, skaliert.
K<br />
1.6. GLOSSAR<br />
Komponente Ein gekapselter Teil <strong>eines</strong> Softwaresystems mit einer Schnittstelle, die den Zu-<br />
gang zu ihren Diensten ermöglicht<br />
Kopplung Ausmaß der Abhängigkeit von Softwarekomponenten.<br />
M<br />
MBI Abteilung für medizinische und biologische Informatik des Deutschen Krebsforschungs-<br />
zentrums<br />
Modul Eine syntaktische und konzeptionelle Einheit <strong>eines</strong> Softwaresystems.<br />
Multiplanare Rekonstruktion Eine multiplanare Rekonstruktion bietet die Möglichkeit belie-<br />
N<br />
bige Schnitte durch ein Visualisierungsergebniss legen zu können auf denen die Struk-<br />
turen, welche sich in diesem Bereich befinden, dargestellt werden.<br />
Navigation Die Möglichkeit des Benutzers seinen Standort und seine Blickrichtung innerhalb<br />
P<br />
der dargestellzen Szene frei zu wählen.<br />
Picking OpenGL bietet einen Picking-Mechanismus an, mit dem ein Benutzer Objekte einer<br />
Szene selektieren kann.<br />
Pixel Ein Pixel ist die kleinste, einzeln ansprechbare sichtbare Element <strong>eines</strong> Rasterbildschir-<br />
mes<br />
Polygon Ein Objekt mit vielen Ecken. In der Computergraphik werden <strong>3D</strong>-Objekte aus Po-<br />
lygonen aufgebaut<br />
Punkt Ein Punkt bezeichnet eine feste Koordinate<br />
R<br />
Redesign Redesign verbessert das Design bzw. die Softwarearchitektur bestehender Softwa-<br />
resysteme<br />
115
Abbildungsverzeichnis<br />
Rendering Beim Rendering werden Computermodelle in Darstellungen auf dem Bildschirm<br />
umgewandelt.<br />
Restrukturierung Restruktuerierung verbessert die Implementierung bestehender Software<br />
Reverse-Engineering Reverse-Engineering bezeichnet den Vorgang bei dem aus einem Aus-<br />
gangssystem (Altsystem) ein Modell gewonnnen wird.<br />
Rolle Die Verantwortlichkeit einer Komponente im Kontext mehrerer Komponenten<br />
S<br />
Spacing Im Spacing-Wert werden die Pixelgröße und der Abstand der Einzelschichten ge-<br />
speichert, aus denen sich die Größe <strong>eines</strong> Voxels im Bildvolumen ergeben.<br />
SSL-Protokoll Das Secure Sockets Layer Protokoll emöglicht die Verschlüsselung und Au-<br />
thentifikation einer Client-Server-Kommunikation mittels verschiedener Algorithmen<br />
STL-Datei Eine STL-Datei beschreibt in einer Liste die Dreicke aus denen ein Oberflächen-<br />
T<br />
modell besteht.<br />
Tupel Liste von Zahlen<br />
V<br />
Vektor Verchiebung im Raum<br />
Vertex Verbindungspunkte von Polygonen<br />
VesselElement Gefäßabschnitt zwischen zwei Verzweigungspunkten <strong>eines</strong> Gefäßbaumes<br />
Voxel Die den Pixeln entsprechenten Volumenelemente in <strong>3D</strong>-Bildern<br />
VRML Dateiformat zur Beschreibung virtueller Welten zur Darstellung im Internet<br />
VTK Open-Source Klassenbibliothek für Visualisierungen<br />
X<br />
XML-Format XML ist eine Sprache zur Beschreibung von strukturierten Daten und Doku-<br />
116<br />
menten und ist ein universelles Format zum Datenaustausch.
Index<br />
DICOM-Standard....................15<br />
DKFZ ............................ 6, 18<br />
Entwurfsmuster .................. 39, 96<br />
Framework .......................... 94<br />
Gefäßtyp ........................ 10, 75<br />
Hounsfield...........................11<br />
Interpolation.....................28, 34<br />
ipFunc-Bibliothek....................19<br />
ipPic-Bibliothek ..................... 19<br />
Isotrope Skalierung .................. 86<br />
Komponente ........................ 39<br />
Kopplung ........................... 39<br />
Leber<br />
” Anatomie........................9<br />
” Segmente ...................... 10<br />
Leberkrebs<br />
” HCC . .......................... 10<br />
” Metastase ...................... 10<br />
MBI..............................5, 18<br />
Modalität ........................... 52<br />
Modul...........................39, 72<br />
Multiplanare Rekonstruktion. .........94<br />
Navigation .......................... 45<br />
Oberflächenerendering ............... 28<br />
Picking. .............................45<br />
Pixel ................................31<br />
Punkt...............................22<br />
Redesign ............................ 37<br />
Rendering ........................... 28<br />
Restrukturierung.....................37<br />
Reverse-Engineering. .................37<br />
Rolle................................60<br />
117
Index<br />
Segmentierung ...................... 19<br />
Spacing ............................. 79<br />
SSl-Protokoll ......................... 7<br />
STL-Datei...........................86<br />
Tupel . .............................. 22<br />
Vertex .............................. 22<br />
VesselElement ................... 47, 75<br />
Volumenrendering ................... 28<br />
Voxel ............................... 28<br />
VRML ....................... 36, 57, 75<br />
VTK ............................ 33, 94<br />
XML-Format ........................ 63<br />
118
Erklärung<br />
Index<br />
Diese Diplomarbeit wurde im Rahmen des Studiums zum Diplom-Informatiker (FH) im<br />
Fachbereich Informatik -Studiengang Informatik- der Fachhochschule Worms verfasst.<br />
Hiermit erkläre ich eidesstattlich, dass die vorliegende Diplomarbeit von mir selbstständig<br />
und ohne unerlaubte Hilfe erstellt worden ist.<br />
Ort, Datum Christian Sonek - M.Nr. 657424<br />
119
Index<br />
120