Parsen Sie DICOM-Dateien in nativem Python
Was ist die einfachste und am meisten-pythonic way zum analysieren einer DICOM-Datei?
Eine native Python-Implementierung ohne die Verwendung von nicht-Python-Bibliotheken würden viel lieber. DICOM ist das standard-Dateiformat in der digitalen medizinische Bildgebung (Aussehen hier für weitere Informationen).
Gibt es einige C/C++ Bibliotheken, Unterstützung zu Lesen (eine Teilmenge) von DICOM-Dateien. Zwei oder drei von Ihnen haben sogar Python-bindings. Eine native Python-parser würde zwei Zielen dienen für mich:
- Kein Aufbau jeglicher externer C/C++ - Bibliotheken.
- Erfahren Sie mehr über die DICOM-Datei-format.
InformationsquelleAutor der Frage Tom Pohl | 2008-09-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Und heute ist ein reines Python-Paket Lesen von DICOM-Dateien zur Verfügung: pydicom
InformationsquelleAutor der Antwort MvdD
Ich bin mit pydicom stark in diesen Tagen, und es rockt.
Es ist ziemlich einfach zu beginnen mit ihm zu spielen:
Zu Holen Sie sich die interessanten Dinge aus, die "data" - Objekt, das irgendwie ähnlich dcmdump Ausgabe:
Ich denke, ein guter Weg, um mehr zu erfahren über das dicom-format zu öffnen, ähnlich wie Dateien und code schreiben, um Sie zu vergleichen, die nach verschiedenen Aspekten: Beschreibung der Studie, Fenster-Breite und-center, pixel-Darstellung und so weiter.
Spaß haben! 🙂
InformationsquelleAutor der Antwort ema
Wenn Sie möchten, erfahren Sie mehr über das DICOM-format "Digital Imaging and Communications in Medicine (DICOM): A Practical Introduction and Survival Guide" von Oleg Pianykh ist gut lesbar und gibt eine gute Einführung in die wichtigsten DICOM-Konzepte. Springer-Verlag ist der Herausgeber dieses Buches. Die volle DICOM-standard ist, natürlich, die ultimative Referenz, obwohl es etwas mehr einschüchternd. Es ist von NEMA (http://medical.nema.org).
Datei-format ist eigentlich weniger esoterisch, als Sie sich vorstellen können und besteht aus einer Präambel, gefolgt von einer Sequenz von Datenelementen. Die Präambel enthält den ASCII-text "DICM" und einige der reservierten bytes nicht verwendet werden. Nach der Präambel ist eine Folge von Datenelementen. Jedes Datenelement besteht aus der Größe des Elements, eine zwei-Zeichen-ASCII-code, der angibt, die Wert auf Repräsentation DICOM-tag und dem Wert. Daten-Elemente in der Datei sind in der Reihenfolge Ihrer DICOM-tag-Nummern. Das Bild selbst ist nur ein Daten-element mit einer Größe, Wert, Vertretung, etc.
Wert Zusicherungen, die genau angeben, wie der Wert interpretiert werden. Ist es eine Zahl? Ist es eine Zeichenfolge? Wenn es eine Zeichenkette ist, wird es kurz oder lang und welche Zeichen sind erlaubt? Die Wert-Darstellung code, der dir das sagt.
Einem DICOM-tag wird ein 4-byte-hexadezimal-code, bestehend aus einem 2-byte - "group" - Nummer und einer 2-byte - "element" - Reihe. Die Gruppe Zahl ist die id, die Ihnen sagt, welche Informationen Entität, die das tag angewendet wird (z.B. Konzern 0010 bezieht sich auf den Patienten und die Gruppe 0020 bezieht sich auf die Studie). Die element-Nummer identifiziert und die interpretation des Wertes (z.B. die Patienten-ID-Nummer, die Serie, Beschreibung, etc). Finden Sie heraus, wie Sie interpretieren den Wert, dein code sieht bis der DICOM tag-in einem Wörterbuch-Datei.
Gibt es einige andere details an, aber das ist die Essenz davon. Wohl das aufschlussreichste, was Sie tun können, um mehr über die Datei-format ist ein Beispiel DICOM-Datei, schauen Sie es mit einem hex-editor, und gehen Sie durch den Prozess der Analyse es psychisch. Ich würde abraten, versuchen zu lernen, über DICOM-durch den Blick auf vorhandene open-source-Implementierungen, zumindest anfänglich. Es ist eher zu verwirren, anstatt aufzuklären. Immer das große Bild ist wichtiger. Sobald Sie das große Bild, dann kann man hinabsteigen in die Feinheiten.
InformationsquelleAutor der Antwort
Die Bibliothek pydicom oben erwähnt scheint wie eine große Bibliothek für den Zugriff auf die DICOM-Datenstrukturen. Verwenden Sie für den Zugriff auf z.B. RT-DOSIS Daten, ich denke, man würde etwas tun, wie
dann, wenn Sie in mayavi,
Diese gibt falschen Koordinaten und die Dosis Skalierung, aber das Prinzip sollte sein sound.
CT-Daten sollten sehr ähnlich sein.
InformationsquelleAutor der Antwort user59010
Neuere gdcm Entwicklung jetzt hier passieren:
http://gdcm.sourceforge.net/
Unterstützt es Java und C# auf die Oberseite von python.
Warum schreiben noch ein weiteres dicom-Implementierung wenn Sie zentralisieren einer einzigen C++ - Implementierung und haben Zugriff auf so viele verschiedene Sprachen
InformationsquelleAutor der Antwort user47414
Einigen Jahren war ich auf der Suche für die gleiche Sache und fand dieses:
Python DICOM-lib
War ich nicht zu beeindruckt mit dem code, aber es ist native Python-Lesen von DICOM-Dateien.
InformationsquelleAutor der Antwort MvdD
DICOM ist eine echte Schmerzen... auch wenn der Hersteller hält sich an die standards. Wenn Sie schreiben Ihre eigenen DICOM-Bibliothek finden Sie verschiedene Hersteller DICOMs effektiv inkompatibel mit anderen Anbietern [citation needed].
Habe ich versucht (in meiner Freizeit) schreiben Sie ein C-dicom-parser, die Kreditaufnahme stark von einem netten kleinen Ruby-parser stieß ich auf schlau nennt sich 'ruby-dicom'. Es ist eigentlich sehr lesbaren code (ich sah in einem der kleineren früheren Versionen).
Die größten Kopfschmerzen versucht hatte, Sie zu sammeln, Bibliothek der header-tags mit dem erwarteten Datentypen. Es sind die standard-tags definiert, und die vendor-tags. Die ruby-dicom-Dateien enthalten eine Bibliothek von tags in ein text-format, die problemlos überprüft werden können.
Gab ich auf der offiziellen Literatur, wie ich war nur daran interessiert, die Datei-format, die anscheinend nur in einer der 10 oder so riesige PDF-Dateien.
Meinem lokalen DICOM-Dateien sind nicht komprimiert und Folgen Sie den standard-einfach-code-bit-arrangements, aber bereit sein, für unterschiedliche Kompressionen und seltsame 12-bit-Bilder in 8-bit-Container mit big oder little endian und no padding bits...
Gab ich einmal die Zeit wurde sehr knapp.
Python ist wahrscheinlich eine weit bessere Wahl als C für diese Art von header-parsing-obwohl...
InformationsquelleAutor der Antwort Oli
Gibt es einige Bibliotheken (in den meisten Fällen implementiert in C/C++) mit Python-bindings, z.B.:
Jedoch, ich bin auf der Suche nach einem native Python-Implementierung, um mehr zu erfahren über die DICOM-Datei-format.
InformationsquelleAutor der Antwort
Frage ich mich, was das ursprüngliche Plakat versucht und mit welchen Methoden gearbeitet und nicht für ihn gearbeitet. Ich war noch nie mit DICOM -, aber eine schnelle google-Suche nach "DICOM-python" gab einige interessante Ergebnisse. Es scheint, dass dieses Projekt: http://www.creatis.univ-lyon1.fr/Public/Gdcm/ sollte das liefern, was Sie wollen. Es hat python-Bindungen und eine Recht aktive Mailingliste.
InformationsquelleAutor der Antwort Boris Gorelik