2008-09-23 79 views
17

¿Cuál es la forma más simple y pitónica de analizar un archivo DICOM?Archivos Parse DICOM en Python nativo

Sería preferible una implementación nativa de Python sin el uso de bibliotecas que no sean Python. DICOM es el formato de archivo estándar en imágenes médicas digitales (consulte here para obtener más información).

Hay algunas bibliotecas C/C++ que admiten lectura (un subconjunto) de archivos DICOM. Dos o tres de ellos incluso tienen enlaces de Python. Un analizador de Python nativo podría servir a dos propósitos para mí:

  1. No hay necesidad de construir ninguna biblioteca externa C/C++.
  2. Conozca el formato de archivo DICOM.

Respuesta

18

Y a partir de hoy hay otro archivos DICOM Python paquete de lectura puros disponibles: pydicom

0

Me pregunto qué intentó el cartel original y qué métodos funcionaron y no funcionaron para él. Nunca he trabajado con DICOM, pero una búsqueda rápida de Google para "DICOM python" dio varios resultados interesantes. Parece que este proyecto: http://www.creatis.univ-lyon1.fr/Public/Gdcm/ debe ofrecer lo que desea. Tiene enlaces de python y una lista de correo bastante activa.

+0

Es esto un "Por favor, hacer mi tarea para mí" pregunta? –

+0

No, en mi humilde opinión Hice mi tarea: hay algunas bibliotecas C/C++ que admiten lectura (un subconjunto) de archivos DICOM. Dos o tres de ellos incluso tienen enlaces de Python. Un analizador nativo de Python me serviría para dos propósitos: 1. No es necesario crear ninguna biblioteca C/C++. 2. Aprenda sobre el formato de archivo DICOM. –

1

hay Bibliotecas (más a menudo implementados en C/C++) con enlaces de Python, por ejemplo:

Sin embargo, estoy buscando una nativa de Python implementación para aprender más sobre el formato de archivo DICOM. Hace

+0

Ambos enlaces aparecen podridos –

+0

@MonicaHeddneck Gracias por el aviso; Acabo de actualizar ambos enlaces. –

3

algunos años yo estaba buscando lo mismo y encontré esto: Python DICOM lib

que no estaba muy impresionado con el código, pero es archivos DICOM lectura Python nativo.

9

Si quieres aprender sobre el formato DICOM, "Digital Imaging and Communication in Medicine (DICOM): Una Guía Práctica Introducción y Supervivencia "por Oleg Pianykh es bastante legible y da una buena introducción a los conceptos clave de DICOM. Springer-Verlag es el editor de este libro. El estándar completo DICOM es, por supuesto, la última referencia, aunque es algo más intimidante. Está disponible en NEMA (http://medical.nema.org).

El formato de archivo es en realidad menos esotérico de lo que pueda imaginarse y consiste en un preámbulo seguido de una secuencia de elementos de datos. El preámbulo contiene el texto ASCII "DICM" y varios bytes reservados que no se utilizan. Siguiente el preámbulo es una secuencia de elementos de datos. Cada elemento de datos consta del tamaño del elemento, un código ASCII de dos caracteres que indica la representación del valor, una etiqueta DICOM y el valor. Los elementos de datos en el archivo están ordenados por sus números de etiqueta DICOM. La imagen en sí misma es solo otro elemento de datos con un tamaño, representación de valores, etc.

Las representaciones de valores especifican exactamente cómo interpretar el valor. ¿Es un número? ¿Es una cadena de caracteres? Si se trata de una cadena de caracteres, ¿es corta o larga y qué caracteres están permitidos? El código de representación del valor te dice esto.

etiqueta A DICOM es un código hexadecimal de 4 byte compuesto de un número de 2 byte "grupo" y un número de 2 byte "elemento". El número de grupo es un identificador que le dice a qué entidad de información se aplica la etiqueta (por ejemplo, el grupo 0010 se refiere al paciente y el grupo 0020 hace referencia al estudio). El número del elemento identifica la interpretación del valor (elementos tales como el número de identificación del paciente, la descripción de la serie, etc.). Para saber cómo debe interpretar el valor, su código busca la etiqueta DICOM en un archivo de diccionario.

hay algunos otros detalles involucrados, pero esa es la esencia de la misma. Probablemente lo más instructivo que puede hacer para aprender sobre el formato de archivo es tomar un archivo DICOM ejemplo, mirarlo con un editor hexadecimal, y pasar por el proceso de analizarlo mentalmente. Aconsejaría no intentar aprender sobre DICOM mirando las implementaciones de código abierto existentes, al menos inicialmente. Es más probable confundir en lugar de iluminar. Obtener una visión general es más importante. Una vez que tenga una idea general, podrá descender a las sutilezas.

4

desarrollo reciente gdcm ahora sucede aquí:

http://gdcm.sourceforge.net/

Es compatible con Java y C# en la parte superior del pitón.

¿Por qué escribir otra aplicación DICOM cuando se puede centralizar una sola C aplicación ++ y tenerlo accesibles a tantos idiomas diferentes

7

la biblioteca pydicom mencionado anteriormente que parece una gran biblioteca para acceder a las estructuras de datos DICOM. Para usarlo para acceder, p. DOSIS datos RT, supongo que se podría hacer algo como

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)) 

y luego, si estás en Mayavi,

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

Esto da las coordenadas equivocadas y escalado de dosis, pero el principio debe ser sonido .

CT datos deben ser muy similares.

17

estoy usando pydicom en gran medida en estos días, y rocas.

Es bastante fácil para empezar a jugar con él:

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

Para obtener el material interesante de que los "datos" objeto, de alguna manera se asemeja a dcmdump de salida:

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) 

creo una gran manera para obtener más información sobre el formato dicom es abrir archivos similares y escribir códigos para compararlos de acuerdo con varios aspectos: descripción del estudio, ancho y centro de la ventana, representación de píxeles, etc.

divertirse! :)

+2

He encontrado mucha documentación que dice 'import pydicom'. Para mí, con la versión 0.9.9 anterior ('import dicom') era el nombre correcto del módulo, a pesar de haberlo instalado con' python -m pip install pydicom'. –

2

DICOM es un verdadero dolor ... incluso cuando el fabricante se adhiere a las normas. Si escribe su propia biblioteca DICOM encontrará diferentes fabricantes. Los DICOM son efectivamente incompatibles con otros proveedores [cita requerida].

he intentado (en mi tiempo libre) escribiendo un analizador C DICOM préstamos en gran medida a partir de un pequeño analizador de Ruby me encontré con astucia llamado 'ruby-dicom'.En realidad, es un código muy legible (miré a una de las versiones anteriores más pequeñas).

El mayor dolor de cabeza estaba tratando de acumular una biblioteca de las etiquetas de encabezado con los tipos de datos esperados. Existen las etiquetas definidas estándar y las etiquetas de proveedor. Los archivos ruby-dicom contienen una biblioteca de etiquetas en un formato de texto que se puede inspeccionar fácilmente.

Renuncié a la literatura oficial ya que solo estaba interesado en el formato de archivo que parece estar solo en uno de los 10 o más archivos PDF grandes.

Mis archivos DICOM locales no están comprimidos y siguen arreglos de bits estándar fáciles de codificar, pero prepárense para varias compresiones y extrañas imágenes de 12 bits almacenadas en contenedores de 8 bits con gran o poca endianidad y sin relleno.

Me rendí una vez que el tiempo se volvió muy escaso.

Python es probablemente una opción mucho mejor que C para este estilo de análisis de los encabezados aunque ...