在 TensorFlow.org 上查看 | 在 Google Colab 中运行 | 在 GitHub 上查看源代码 | 下载笔记本 |
概述
本教程展示了如何在 TensorFlow IO 中使用 tfio.image.decode_dicom_image
使用 TensorFlow 解码 DICOM 文件。
设置和使用
下载 DICOM 图像
本教程中使用的 DICOM 图像来自 NIH 胸部 X 射线数据集。
NIH 胸部 X 射线数据集包含 100,000 张去标识的 PNG 格式胸部 X 射线图像,由 NIH 临床中心提供,可通过 此链接 下载。
Google Cloud 还提供图像的 DICOM 版本,可在 Cloud Storage 中获得。
在本教程中,你将从 GitHub 存储库 下载数据集的示例文件。
- Xiaosong Wang、Yifan Peng、Le Lu、Zhiyong Lu、Mohammadhadi Bagheri、Ronald Summers,ChestX-ray8:医院规模的胸部 X 射线数据库以及常见胸部疾病的弱监督分类和定位基准,IEEE CVPR,第 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
安装必需的软件包,并重新启动运行时
try:
# Use the Colab's preinstalled TensorFlow 2.x
%tensorflow_version 2.x
except:
pass
pip install tensorflow-io
解码 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
解码 DICOM 元数据并使用标签
decode_dicom_data
解码标签信息。 dicom_tags
包含患者年龄和性别等有用信息,因此你可以使用 DICOM 标签,例如 dicom_tags.PatientsAge
和 dicom_tags.PatientsSex
。tensorflow_io 从 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