Décoder les fichiers DICOM pour l'imagerie médicale

Voir sur TensorFlow.org Exécuter dans Google Colab Voir la source sur GitHub Télécharger le cahier

Aperçu

Ce tutoriel montre comment utiliser tfio.image.decode_dicom_image dans tensorflow IO pour décoder les fichiers DICOM avec tensorflow.

Configuration et utilisation

Télécharger l'image DICOM

L'image de DICOM utilisé dans ce tutoriel est de la poitrine NIH ensemble de données de rayons X .

Le coffre NIH ensemble de données de rayons X se compose de 100.000 images dépersonnalisées de radiographies pulmonaires au format PNG, fournies par le NIH Clinical Center et peut être téléchargé via ce lien .

Google Cloud fournit également une version DICOM des images, disponibles dans Cloud Storage .

Dans ce tutoriel, vous allez télécharger un fichier échantillon de l'ensemble de données à partir du repo GitHub

  • Xiaosong Wang, Yifan Peng, Le Lu, Zhiyong Lu, Mohammadhadi Bagheri, Ronald Summers, ChestX-ray8 : base de données sur les radiographies thoraciques à l'échelle de l'hôpital et points de référence sur la classification et la localisation faiblement supervisées des maladies courantes du thorax, IEEE CVPR, pp. 3462 -3471, 2017
curl -OL https://github.com/tensorflow/io/raw/master/docs/tutorials/dicom/dicom_00000001_000.dcm
ls -l dicom_00000001_000.dcm
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   164    0   164    0     0    600      0 --:--:-- --:--:-- --:--:--   598
100 1024k  100 1024k    0     0  1915k      0 --:--:-- --:--:-- --:--:-- 1915k
-rw-rw-r-- 1 kbuilder kokoro 1049332 Nov 22 03:47 dicom_00000001_000.dcm

Installez les packages requis et redémarrez le runtime

try:
  # Use the Colab's preinstalled TensorFlow 2.x
  %tensorflow_version 2.x 
except:
  pass
pip install tensorflow-io

Décoder l'image DICOM

import matplotlib.pyplot as plt
import numpy as np

import tensorflow as tf
import tensorflow_io as tfio

image_bytes = tf.io.read_file('dicom_00000001_000.dcm')

image = tfio.image.decode_dicom_image(image_bytes, dtype=tf.uint16)

skipped = tfio.image.decode_dicom_image(image_bytes, on_error='skip', dtype=tf.uint8)

lossy_image = tfio.image.decode_dicom_image(image_bytes, scale='auto', on_error='lossy', dtype=tf.uint8)


fig, axes = plt.subplots(1,2, figsize=(10,10))
axes[0].imshow(np.squeeze(image.numpy()), cmap='gray')
axes[0].set_title('image')
axes[1].imshow(np.squeeze(lossy_image.numpy()), cmap='gray')
axes[1].set_title('lossy image');
2021-11-22 03:47:53.016507: E tensorflow/stream_executor/cuda/cuda_driver.cc:271] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected

png

Décoder les métadonnées DICOM et travailler avec les balises

decode_dicom_data décode les informations d'étiquette. dicom_tags contient des informations utiles comme l'âge et le sexe du patient, de sorte que vous pouvez utiliser des balises DICOM tels que dicom_tags.PatientsAge et dicom_tags.PatientsSex . tensorflow_io emprunte la même notation de balise du package pydicom dicom.

tag_id = tfio.image.dicom_tags.PatientsAge
tag_value = tfio.image.decode_dicom_data(image_bytes,tag_id)
print(tag_value)
tf.Tensor(b'58', shape=(), dtype=string)
print(f"PatientsAge : {tag_value.numpy().decode('UTF-8')}")
PatientsAge : 58
tag_id = tfio.image.dicom_tags.PatientsSex
tag_value = tfio.image.decode_dicom_data(image_bytes,tag_id)
print(f"PatientsSex : {tag_value.numpy().decode('UTF-8')}")
PatientsSex : M