Vom fMRI Scan zum 3D-Druck meines Gehirns

Am Zentrum für integrierte Neurowissenschaften und Neurodynamik (CINN) meiner Alma Mater wurden zur Zeit meiner Promotion verschiedene Experimente durchgeführt, mit der die Funktion des Gehirns untersucht wurde. Um Probanden zu motivieren, sich für eine halbe Stunde einer funktionellen Magnetresonanztomografie (fMRI) zu unterziehen, bekam man für seinen wissenschaftlichen Beitrag nach dem Experiment ein Foto seines Gehirns auf Papier ausgedruckt. Eine am CINN forschende Kollegin von mir, erzählte mir eines Abends im Pub, dass der computerunterstützte 3 Tesla starke Tomograf der Universität nicht nur ein zweidimensionales Bild, sondern eine Datei mit dreidimensionalen Daten erzeugt, von der dann ein in einer Gehirnhemisphäre liegender Querschnitt ausgewählt und ausgedruckt wird. Fast scherzhaft wettete ich, dass ich ihr eingescanntes Gehirn als dreidimensionales Modell ausdrucken könnte, wenn sie mir bei Gelegenheit die vollständige Datei zukommen lassen könnte. Ohne es zu wissen, begann mit dieser Wette ein Abschnitt meiner Promotion, mit dem ich für Freunde, Kollegen und deren Bekannte mehrere duzend Gehirne ausdruckte und somit meinen 3D Drucker mehr als selbst finanzierte.

Dieser Beitrag fasst zusammen, wie ich es schaffte von einem fMRI-Scan eines Gehirns eine STL Datei zu erzeugen, die wiederum ausgedruckt werden kann.

Erste Visualisierung

Der am CINN herrschende Standard, war die Erzeugung einer Neuroimaging Informatics Technology Initiative, oder kurz NIFTI Datei (*.nii - Wiki, NIFTI1, NIFTI2). Mit dem Programm FreeSurfer (Wiki) konnten die Kollegen am CINN diese NiFTI Datei einlesen, anzeigen und einen Querschnitt auswählen, der dann ausgedruckt wurde. Es war schnell zu erkennen, dass es sich bei der NiFTI Datei um eine aus verschiedenen Schichten bestehende Datei handelt, wobei jede Schicht ein Bild im Bitmapformat enthält, dass dann selektiv angezeigt werden kann. Mit einfacher Feldmanipulation konnte das Programm dann Querschnitte in X-, Y- und Z-Richtung anzeigen.

Ein zufällig ausgewähltes Gehirn
Ein zufällig ausgewähltes Gehirn

Leider enthielt die Datei keinerlei Volumeninformationen, die für einen 3D Druck wesentlich sind. Jedoch schien FreeSurfer mehr als nur die Anzeige von NiFTI Dateien zu unterstützen. Zwar verstand ich damals nicht viel von den technischen Begriffen der grafischen Benutzeroberfläche (schließlich bin ich kein Neurowissenschaftler sondern Elektroingenieur), aber dem Wiki war zu entnehmen, dass FreeSurfer eine umfangreiche Befehlseingabe bereitstellt. Über diese kann man aus mehreren zweidimensionalen Bildern der NiFTI Datei eine Datei mit dreidimensionalen Informationen bezüglich Eckpunkte eines 3D-Modells erzeugen. Um die dafür notwendige Verarbeitung zu starten, muss FreeSurfer installiert und die Systemumgebung für die Benutzung der Befehlseingabe vorbereitet werden.

FreeSurfer vorbereiten

Das Programm kann von hier heruntergeladen werden. Nach der Installation (wenn z.B. unter macOS der Ordner /Programme/freesurfer erzeugt wurde) muss eine kostenlose Lizenz erhalten werden, indem man sich über ein Formular registriert (Link). Über E-Mail bekommt man dann eine license.txt Datei zugesandt, die man dann in den FreeSurfer Ordner kopieren muss.

Zudem muss der Pfad zum Ordner von FreeSurfer auch als Umgebungsvariable exportiert werden. Unter macOS würde dies wie folgt geschehen:

export FREESURFER_HOME=/Applications/freesurfer/7.2.0
source $FREESURFER_HOME/SetUpFreeSurfer.sh

Bei mir mussten dann die Zugriffsrechte alle unter /Applications/freesurfer gespeicherten Dateien korrigiert werden. Dies lag daran, das die (damalige) Installation Dateien erzeugte, deren Zugriff nur für Administratoren freigeschaltet war. Möglicherweise muss dieser Schritt zukünftig nicht mehr ausgeführt werden:

sudo chmod -R 755 /Applications/freesurfer

Nun konnte im Ordner /Applications/freesurfer/7.2.0/subjects die NIfTI Datei abgelegt und eingelesen werden.

NIfTI Datei einlesen

Das Wiki empfiehl, die NIfTI Datei mit dem Befehl recon-all zu importieren. Das durch diesen Befehl ausgeführte Programm schien neben dem Import zugleich die Konvertierung zu ermöglichen. Man muss den Befehl nur mit den folgenden Argumenten ausführen:

Im Großen und Ganzen schaute die Befehlseingabe dann wie folgt aus:

$FREESURFER_HOME/bin/recon-all -all -parallel -i input.nii -subjid my_friend

Geduld

Nun ist viel Geduld gefragt, da bei mir die Konvertierung mehrere Stunden dauerte. Ich ließ meinen Mac damals die Nacht durchrechnen und erhielt am nächsten Morgen die folgende Ausgabe:

...
Started at Mon May 16 20:08:21 BST 2016
Ended at Tue May 17 06:04:48 BST 2016
#@#%# recon-all-run-time-hours 9.941
recon-all -s ******* finished without error at Tue May 17 06:04:48 BST 2016
done

Was für ein Erfolg! Nach fast 10 Stunden Rechenzeit wurde die NIfTI Datei erfolgreich verarbeitet und verschiedene Dateien waren im /Applications/freesurfer/7.2.0/subjects/my_friend abgelegt.

Ergebnis

In dem Ordner (allgemein unter SUBJECTS_DIR/SUBJID) wurden verschiedene Dateien abgelegt, wobei die Dateien im Ordner surf von besonderem Interesse sind. Diese Dateien sind Dateien, die eine ein Volumen einschließende Oberfläche (surface) beschreiben und somit eine druckfähige Geometrie enthalten.

Dateien, die mit rh.* anfangen, beziehen sich auf die rechte Gehirnhemisphäre und Dateien, die mit lh.* anfangen, beziehen sich auf die linke Gehirnhemisphäre. Hier sind die Dateien, die mit *.white und *.pial enden, relevant. Dateien, die mit *.white enden, beschreiben die weiße Substanz (white matter) des Gehirns, also den Anteil des Zentralnervensystems, der überwiegend aus Leitungsbahnen bzw. Nervenfasern besteht und somit vornehmlich Nervenzellfortsätze enthält. Dateien, die mit *.pial enden, bezeichnen die Pialfläche (pial surface) bzw. die graue Substanz (grey matter) des Gehirns, also den Anteil des Zentralnervensystems, der vornehmlich Nervenzellkörper (Perikaryen) enthält und beispielsweise Kerne bzw. Kerngebiete darstellt.

Die mit *.pial endenden Dateien werden im nächsten Schritt in druckfähige STL Dateien umgewandelt.

Graue Substanz zu STL

Im Ordner des Probanden (hier my_friend) muss dann der Befehl mris_convert ausgeführt werden, wobei nur zwei Argumente eingegeben werden müssen:

  1. <input_file> als Eingabedatei; und
  2. <output_file> als Ausgabedatei.

Der vollständige Befehl sieht dann in etwa so aus:

$FREESURFER_HOME/bin/mris_convert rh.pial ../tmp/rh.pial.stl
$FREESURFER_HOME/bin/mris_convert lh.pial ../tmp/lh.pial.stl

Dies erzeugt in einem übergeordneten Verzeichnis tmp die Dateien rh.pial.stl und lh.pial.stl. Diese zwei Dateien sind jedoch viel zu detailreich und groß um von einem 3D-Slicer sinnvoll verarbeitet werden zu können (bei mit waren sie in der Regel größer als 50 MB), und die linke und rechte Hirnhälften sind separat gespeichert; müssen also noch kombiniert werden.

Mesh vereinfachen

Hier behalf ich mir mit dem Programm MeshLab (Link), mit dem die Dateien von über 50 MB auf 1/4 der Größe reduziert werden konnten, ohne spürbare Einbußen in Qualität oder Detailreiche zu verzeichnen. Wenn man die zwei STL Dateien in das Programm lädt, warnt es automatisch, dass doppelte Eckpunkte (vertices) gefunden wurden:

MeshLab entdeckt doppelte Eckpunkte
MeshLab entdeckt doppelte Eckpunkte

Erscheint die Eingabeaufforderung nicht, kann man die Reduzierung auch über Filters > Mesh Layer > Flatten Visible Layers ausführen. Lässt man MeshLab gewähren und importiert so beide Gehirnhälften, erhält man ein vollständiges dreidimensionales Modell des Gehirns:

Endlich ein 3D-Hirn
Endlich ein 3D-Hirn

Die vollständige Datei kann man nun als einheitliches und quasi druckfähiges Modell speichern.

Vorbereiten auf den Druck

Jedoch war mein damaliger Drucker nicht in der Lage ein derart großes Modell zu drucken, und tat sich auch mit der Berechnung von Stützmaterial schwer. Grade Gehirne in der Regel keine flachen Oberflächen aufweisen, wäre es vorteilhaft, das Modell optimal auszurichten, bevor das Stützmaterial hinzugefügt und die Skalierung angepasst wird.

Ein zufällig ausgewähltes Gehirn
Ein zufällig ausgewähltes Gehirn

Um den 3D Druck zu ermöglichen, benutzte ich ein weiteres Programm namens Meshmixer (Link) mit dem zusätzliche Druckstützen (support material) zum Modell hinzugefügt werden konnten. Das Ergebnis sah dann wie folgt aus:

Gehirn mit Stützmaterial
Gehirn mit Stützmaterial

Die Größe, des Modells war jedoch um ein Vielfaches größer als das druckbare Volumen meins Druckers. Also reduzierte ich das Modell auf eine angemessene Größe - auf einen Maßstab von 1:3 - und exportierte die fertige STL Datei zum Drucken.

Drucken

Mit der höchstmöglichen Druckqualität meines 3D Druckers dauerte der erste Druckvorgang mehr als 63 Stunden und 35 Minuten (ca. 2,6 Tage); doch das Ergebnis war faszinierend!

Ein abgeschlossener Druck mit Stützmaterial auf dem Druckerbett
Ein abgeschlossener Druck mit Stützmaterial auf dem Druckerbett
Der fertige Druck nachdem das Modell vom Druckerbett entfernt wurde
Der fertige Druck nachdem das Modell vom Druckerbett entfernt wurde

Letzten Endes spielte ich mich auf eine mittlere Druckqualität ein, sodass der druck eines ca 50 Gramm schweren Gehirnmodells bei ungefähr 5 bis 6 Stunden lag.

Zum Spaß ließ ich meinen Slicer berechnen, wie lange es dauern würde die zwei Gehirnhälften separat im Maßstab 1:1 zu drucken; für das Gehirn der eingangs erwähnten Kollegin hätte der Drucker 5,7 Tage lang gedruckt und fast zwei Spulen Material verarbeitet - hierfür hätte ich utopische Preise verlangen müssen, um gewinnbringend (oder zumindest kostendeckend) Hirnmodelle an Probanden veräußern zu können.

Zusammenfassung

Letzten Endes lässt sich der vorstehende Ablauf wie folgt zusammenfassen. Zuerst wurden FreeSurfer installiert und die Umgebungsvariablen richtig eingestellt:

export FREESURFER_HOME=/Applications/freesurfer/7.2.0
source $FREESURFER_HOME/SetUpFreeSurfer.sh

Dann wurde die NIfTI Datei des Probanden analysiert (dies dauerte abhängig vom Scan manchmal mehr als 12 Stunden) und die somit erzeigten *.pial Dateien wurden in STL Dateien umgewandelt:

$FREESURFER_HOME/bin/recon-all -all -i input.nii -subjid my_friend
cd my_friend
$FREESURFER_HOME/bin/mris_convert rh.pial ../tmp/rh.pial.stl
$FREESURFER_HOME/bin/mris_convert lh.pial ../tmp/lh.pial.stl

In MeshLab wurden dann beide Gehirnhälften importiert, alle doppelten Eckpunkte (vertices) entfernt (ggf. über die Schaltfläche Flatten Visible Layers) und ein vollständiges Modell des Gehirns als STL Datei exportiert.

In MeshMixer wurde dann das Modell importiert, ausgerichtet, skaliert und das Stützmaterial berechnet, sodass eine druckfähige STL Datei erhalten wird.

Schlussendlich kann der Hirnscan gedruckt werden. Meiner sieht dann wie folgt aus - und ähnliche Modelle wurden im Jahr 2016 von mir an der University of Reading an freiwillige Probanden die sich Experimente im fMRI unterzogen übergeben.

Ein 1:3 Modell meines Gehirns
Ein 1:3 Modell meines Gehirns

Hinweis zum Datenschutz

Alle hier gezeigten 3D Modelle von Gehirnen basieren entweder auf den von FreeSurfer mitgelieferten Scans, oder auf einem Scan meines eigenen Gehirns (siehe oben). Daten der Gehirne meiner Freunde oder eines anderen, für den ich sein Gehirn ausgedruckt habe, werden hier nicht veröffentlicht.

Historisches

Dieser Beitrag entsprang einer Beitragsserie auf meiner alten (hauptsächlich auf Englisch) geführten Webseite. Diese Beiträge können über die nachfolgenden Links weiterhin eingesehen werden, da ich Gerfficient neu aufgesetzt und selber betreibe: