2008-09-23 17 views
17

Qual è il modo più semplice e più pignolo per analizzare un file DICOM?Analizza file DICOM in Python nativo

Un'implementazione nativa di Python senza l'uso di librerie non Python sarebbe molto preferibile. DICOM è il formato di file standard nell'imaging medico digitale (vedi here per ulteriori informazioni).

Esistono alcune librerie C/C++ che supportano la lettura (un sottoinsieme) di file DICOM. Due o tre di loro hanno anche collegamenti Python. Un parser Python nativo avrebbe due scopi:

  1. Non è necessario creare alcuna libreria esterna C/C++.
  2. Ulteriori informazioni sul formato di file DICOM.

risposta

18

E da oggi c'è un altro file di lettura pacchetto Python DICOM puri disponibili: pydicom

0

Mi chiedo che cosa abbia provato il poster originale e quali metodi funzionino e non funzionino per lui. Non ho mai lavorato con DICOM, ma una rapida ricerca su google per "DICOM python" ha dato molti risultati interessanti. Sembra che questo progetto: http://www.creatis.univ-lyon1.fr/Public/Gdcm/ dovrebbe fornire ciò che desideri. Ha collegamenti Python e una mailing list piuttosto attiva.

+0

Si tratta di una "Si prega di fare i compiti per me" questione? –

+0

No, IMHO Ho fatto i compiti: ci sono alcune librerie C/C++ che supportano la lettura (un sottoinsieme) di file DICOM. Due o tre di loro hanno anche collegamenti Python. Un parser Python nativo potrebbe servire a me due scopi: 1. Non è necessario creare alcuna libreria C/C++. 2. Informazioni sul formato di file DICOM. –

1

ci sono alcune librerie (più spesso implementate in C/C++) con Python, ad esempio:

Comunque, sto cercando una Python nativo implementazione per ulteriori informazioni sul formato di file DICOM.

+0

entrambi i link appaiono marci –

+0

@MonicaHeddneck Grazie per l'heads up; Ho appena aggiornato entrambi i link. –

3

Alcuni anni fa, stavo cercando la stessa cosa ed ho trovato questo: Python DICOM lib

non ero troppo impressionato con il codice, ma è la lettura dei file DICOM Python nativo.

9

Se si vuole conoscere il formato DICOM, "Digital Imaging and Communications in Medicine (DICOM): A Practical Introduction and Survival Guide "di Oleg Pianykh è abbastanza leggibile e offre una buona introduzione ai concetti chiave di DICOM. Springer-Verlag è l'editore di questo libro. L'intero standard DICOM è, naturalmente, il riferimento finale anche se è un po 'più intimidatorio. È disponibile da NEMA (http://medical.nema.org).

Il formato del file è in realtà meno esoterico di quanto si possa immaginare ed è costituito da un preambolo seguito da una sequenza di elementi di dati. Il preambolo contiene il testo ASCII "DICM" e diversi byte riservati non utilizzati. Seguendo il preambolo è una sequenza di elementi di dati. Ogni elemento di dati è costituito dalla dimensione dell'elemento, un codice ASCII a due caratteri che indica la rappresentazione del valore, un tag DICOM e il valore. Gli elementi di dati nel file sono ordinati in base ai loro numeri di tag DICOM. L'immagine stessa è solo un altro elemento dati con una dimensione, una rappresentazione del valore, ecc.

Le rappresentazioni del valore specificano esattamente come interpretare il valore. È un numero? È una stringa di caratteri? Se si tratta di una stringa di caratteri, è breve o lunga e quali caratteri sono consentiti? Il codice di rappresentazione del valore ti dice questo.

Un tag DICOM è un codice esadecimale di 4 byte composto da un numero di "gruppo" a 2 byte e un numero di "elemento" a 2 byte. Il numero di gruppo è un identificatore che indica quale entità di informazioni il tag applica (ad esempio, il gruppo 0010 si riferisce al paziente e il gruppo 0020 si riferisce allo studio). Il numero dell'elemento identifica l'interpretazione del valore (voci come il numero ID del paziente, la descrizione della serie, ecc.). Per scoprire come interpretare il valore, il codice cerca il tag DICOM in un file di dizionario.

Ci sono alcuni altri dettagli coinvolti, ma questo è l'essenza di esso. Probabilmente la cosa più istruttiva che puoi fare per conoscere il formato del file è prendere un esempio di file DICOM, guardarlo con un editor esadecimale e passare attraverso il processo di analisi mentale. Vorrei sconsigliare di provare a conoscere DICOM osservando le implementazioni open source esistenti, almeno inizialmente. È più probabile che confonda invece che illuminare. Ottenere il quadro generale è più importante. Una volta che hai il quadro generale, puoi scendere in sottigliezze.

4

recente sviluppo gdcm ora accadere qui:

http://gdcm.sourceforge.net/

Esso supporta Java e C# in cima al pitone.

Perché scrivere ancora un'altra implementazione DICOM quando è possibile centralizzare una singola implementazione C++ e lo hanno accessibili a tante lingue diverse

7

La biblioteca pydicom di cui sopra sembra una grande biblioteca per l'accesso alle strutture di dati DICOM. Per usarlo per accedere ad es. Dati RT Dose, credo che si potrebbe fare qualcosa di simile

import dicom,numpy 
dose = dicom.ReadFile("RTDOSE.dcm") 
d = numpy.fromstring(dose.PixelData,dtype=numpy.int16) 
d = d.reshape((dose.NumberofFrames,dose.Columns,dose.Rows)) 

e poi, se siete in Mayavi,

from enthought.mayavi import mlab 
mlab.pipeline.scalar_field(d) 

Questo dà le coordinate sbagliate e ridimensionamento della dose, ma il principio dovrebbe essere suono .

I dati CT devono essere molto simili.

17

Sto usando il pydicom pesantemente in questi giorni e si scaglia.

E 'abbastanza facile per iniziare a giocare con esso:

import dicom 
data = dicom.read_file("yourdicomfile.dcm") 

Per ottenere la roba interessante da quella oggetto "dati", in qualche modo simile a dcmdump uscita:

for key in data.dir():   
    value = getattr(data, key, '') 
    if type(value) is dicom.UID.UID or key == "PixelData": 
     continue 

    print "%s: %s" % (key, value) 

Credo che un ottimo modo per saperne di più sul formato dicom è di aprire file simili e scrivere codice per confrontarli in base a vari aspetti: descrizione dello studio, larghezza e centro della finestra, rappresentazione dei pixel e così via.

Buon divertimento! :)

+2

Ho trovato molta documentazione che dice 'import pydicom'. Per me, con la versione 0.9.9 il precedente ('import dicom') era il nome corretto del modulo, nonostante l'abbia installato con' python -m pip install pydicom'. –

2

DICOM è un vero dolore ... anche quando il produttore si attiene agli standard. Se scrivi la tua libreria DICOM, troverai che diversi produttori DICOM sono effettivamente incompatibili con altri fornitori [citazione necessaria].

Ho provato (nel mio tempo libero) scrivendo un parser C dicom prendendo a prestito pesantemente da un simpatico parser Ruby che ho incontrato astutamente chiamato "ruby-dicom".In realtà è un codice molto leggibile (ho guardato una delle versioni precedenti più piccole).

Il più grande mal di testa stava tentando di accumulare una libreria dei tag di intestazione con i tipi di dati previsti. Esistono i tag definiti dallo standard e i tag del fornitore. I file di ruby-dicom contengono una libreria di tag in un formato di testo che può essere facilmente ispezionata.

Ho rinunciato alla letteratura ufficiale perché mi interessava solo il formato di file che sembra essere solo in uno dei 10 o più enormi PDF.

miei file DICOM locali non sono compressi e seguono standard di facile codice bit-accordi, ma essere pronti per le varie compressioni e le immagini a 12 bit strane conservati in contenitori a 8-bit con grande o piccolo endianness e nessun bit padding ..

Ho rinunciato una volta il tempo è diventato molto scarso.

Python è probabilmente una scelta di gran lunga migliore di C per questo stile di intestazione analisi però ...