¿Qué es DICOM?
DICOM (Digital Imaging and Communications in Medicine) es el estándar internacional para almacenar, transmitir y gestionar datos de imagen médica. Publicado y mantenido por el Comité de Estándares DICOM desde 1993, DICOM se usa en prácticamente cada hospital, clínica, centro de radiología y fabricante de dispositivos médicos del mundo. Es el formato detrás de cada resonancia magnética, tomografía computarizada, radiografía, ecografía, PET scan y mamografía producidos por equipos médicos modernos.
DICOM no es solo un formato de archivo — es un protocolo completo de red y comunicación que define cómo los dispositivos de imagen, las estaciones de trabajo, los archivos y los sistemas de información hospitalaria se comunican entre sí. El formato de archivo (.dcm) es un componente de este ecosistema más amplio.
Lo que hace único a DICOM
A diferencia de los formatos de imagen de consumo (JPEG, PNG, TIFF), los archivos DICOM llevan metadatos del paciente y del estudio incrustados directamente en el mismo archivo que los datos de píxeles. Un archivo DICOM es inseparable de su contexto: quién es el paciente, cuándo se realizó el estudio, en qué máquina, por qué operador, con qué parámetros de adquisición.
Este diseño previene un riesgo crítico de seguridad médica: que los datos de píxeles se separen accidentalmente de su contexto identificativo. Un JPEG de una resonancia magnética cerebral, despojado de sus metadatos, es solo una imagen en escala de grises — no puedes saber de quién es el cerebro, cuándo se escaneó, ni cómo interpretarlo clínicamente. Un archivo DICOM siempre lleva esta información.
Estructura de un archivo DICOM
Todo archivo DICOM consta de dos partes lógicas:
1. El conjunto de datos (cabecera)
Un conjunto de datos DICOM es una secuencia de Elementos de Datos, cada uno identificado por una Etiqueta — un par de números hexadecimales entre paréntesis (GGGG,EEEE).
Etiquetas clave:
| Etiqueta | Nombre | Ejemplo |
|---|---|---|
| (0010,0010) | Nombre del Paciente | García^María |
| (0010,0020) | ID del Paciente | HCH-123456 |
| (0008,0060) | Modalidad | CT (tomografía computarizada) |
| (0008,0020) | Fecha del Estudio | 20260425 |
| (0028,0010) | Filas | 512 |
| (0028,0011) | Columnas | 512 |
| (0028,0030) | Espaciado de Píxeles | 0.488\0.488 (mm) |
| (0028,0100) | Bits Asignados | 16 |
| (0028,1050) | Centro de Ventana | 40 (UH — Unidades Hounsfield) |
| (0028,1051) | Anchura de Ventana | 400 |
| (7FE0,0010) | Datos de Píxeles | [datos binarios de píxeles] |
La jerarquía DICOM estructura los datos de imagen en cuatro niveles:
Paciente
└── Estudio (una sesión de exploración)
└── Serie (una secuencia de adquisición, ej. TC axial)
└── Instancia (una imagen / un corte)
Un TC de abdomen típico produce un Estudio, 3-4 Series y 200-600 Instancias (una por corte axial).
2. Los datos de píxeles
Los datos de píxeles (etiqueta 7FE0,0010) contienen la imagen sin procesar. DICOM soporta múltiples sintaxis de transferencia (formatos de compresión) para los datos de píxeles. La compresión con pérdida generalmente se evita para imágenes de diagnóstico — las regulaciones DICOM en la mayoría de países requieren almacenamiento sin pérdida para imágenes de diagnóstico primarias.
Unidades Hounsfield y Ventana
Las imágenes TC almacenan valores de píxeles como Unidades Hounsfield (UH) — una escala calibrada de atenuación de rayos X relativa al agua:
| Material | Rango UH |
|---|---|
| Aire | -1000 |
| Tejido pulmonar | -600 a -400 |
| Grasa | -120 a -90 |
| Agua | 0 |
| Tejido blando | +20 a +80 |
| Sangre | +30 a +70 |
| Hueso | +700 a +3000 |
Un píxel TC de 16 bits puede representar 65.536 valores UH diferentes — muchos más de los que el ojo humano puede distinguir simultáneamente. El enventanado mapea un rango de valores UH al rango de visualización 0-255.
Trabajar con archivos DICOM
Python con pydicom
# pip install pydicom numpy matplotlib
import pydicom
import numpy as np
import matplotlib.pyplot as plt
# Cargar un archivo DICOM
ds = pydicom.dcmread('TC_corte_042.dcm')
# Imprimir etiquetas clave
print(f"Paciente: {ds.PatientName}")
print(f"Modalidad: {ds.Modality}")
print(f"Fecha del estudio: {ds.StudyDate}")
print(f"Filas x Columnas: {ds.Rows} x {ds.Columns}")
# Acceder al array de píxeles (devuelve array NumPy)
array_pixeles = ds.pixel_array # shape: (512, 512) para TC
# Aplicar Pendiente/Intercepto de Rescalado para obtener Unidades Hounsfield
uh = array_pixeles * float(ds.RescaleSlope) + float(ds.RescaleIntercept)
# Aplicar enventanado para visualización
centro = float(ds.WindowCenter)
anchura = float(ds.WindowWidth)
inferior = centro - anchura / 2
superior = centro + anchura / 2
enventanado = np.clip(uh, inferior, superior)
display = ((enventanado - inferior) / anchura * 255).astype(np.uint8)
# Mostrar
plt.imshow(display, cmap='gray')
plt.axis('off')
plt.savefig('tc_corte.png', dpi=150, bbox_inches='tight')
Anonimizar DICOM para investigación
import pydicom
ds = pydicom.dcmread('escaneo_paciente.dcm')
# Eliminar / reemplazar etiquetas identificativas
ds.PatientName = "ANONIMO"
ds.PatientID = "ANON-001"
ds.PatientBirthDate = ""
ds.PatientAddress = ""
ds.InstitutionName = ""
ds.ReferringPhysicianName = ""
# Eliminar etiquetas privadas (pueden contener PHI)
ds.remove_private_tags()
ds.save_as('escaneo_anonimizado.dcm')
Convertir DICOM a PNG para visualización
import pydicom
import numpy as np
from PIL import Image
def dicom_a_png(ruta_dicom, ruta_salida):
ds = pydicom.dcmread(ruta_dicom)
pixel = ds.pixel_array.astype(float)
if hasattr(ds, 'RescaleSlope'):
pixel = pixel * float(ds.RescaleSlope) + float(ds.RescaleIntercept)
wc = float(getattr(ds, 'WindowCenter', pixel.mean()))
ww = float(getattr(ds, 'WindowWidth', pixel.max() - pixel.min()))
inferior, superior = wc - ww / 2, wc + ww / 2
pixel = np.clip(pixel, inferior, superior)
pixel = ((pixel - inferior) / ww * 255).astype(np.uint8)
img = Image.fromarray(pixel)
img.save(ruta_salida)
print(f"Guardado: {ruta_salida}")
dicom_a_png('TC_042.dcm', 'TC_042.png')
Herramientas de línea de comandos
# DCMTK — el kit de herramientas DICOM de referencia
# Volcar todas las etiquetas de un archivo DICOM
dcmdump TC_042.dcm
# Convertir DICOM a PNG
dcm2pnm --write-png TC_042.dcm TC_042.png
# Anonimizar un archivo DICOM
dcmodify -ie -nb -k "PatientName=ANONIMO" -k "PatientID=ANON001" TC_042.dcm
Servicios de red DICOM
Más allá del formato de archivo, DICOM define servicios de red para la comunicación entre dispositivos de imagen:
| Servicio | Descripción |
|---|---|
| C-STORE | Enviar un objeto DICOM a otro nodo |
| C-FIND | Consultar un PACS para estudios/series coincidentes |
| C-MOVE | Solicitar a un nodo que envíe imágenes a un tercero |
| C-ECHO | Prueba de conectividad ("ping DICOM") |
PACS (Picture Archiving and Communication System) es el software de servidor de grado hospitalario (Orthanc, dcm4chee, Horos) que almacena archivos DICOM y los sirve mediante estos protocolos de red.
Privacidad y consideraciones regulatorias
Los archivos DICOM contienen Información de Salud Protegida (PHI/ISP) bajo la HIPAA en Estados Unidos y regulaciones equivalentes en todo el mundo (RGPD en Europa). Requisitos clave:
- El almacenamiento debe estar en sistemas conformes con la normativa de protección de datos
- La transmisión debe usar canales seguros (TLS para DICOM-TLS, VPN para sitio a sitio)
- La anonimización es obligatoria antes de compartir para investigación o entrenar modelos de IA
- Generalmente se requiere registro de auditoría del acceso a archivos DICOM
Nunca compartas archivos DICOM sin procesar de sistemas clínicos en repositorios públicos sin anonimización adecuada y acuerdos de uso de datos.
Conversiones relacionadas
Lo más habitual al trabajar con imágenes son estas direcciones de conversión: