04.01.2013 Aufrufe

Technical Report 153 / 2004 Entwicklung eines 3D ... - Dkfz

Technical Report 153 / 2004 Entwicklung eines 3D ... - Dkfz

Technical Report 153 / 2004 Entwicklung eines 3D ... - Dkfz

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!