ถอดรหัสไฟล์ DICOM สำหรับการถ่ายภาพทางการแพทย์

ดูบน TensorFlow.org ทำงานใน Google Colab ดูแหล่งที่มาบน GitHub ดาวน์โหลดโน๊ตบุ๊ค

ภาพรวม

นี้แสดงให้เห็นว่าการสอนวิธีการใช้ tfio.image.decode_dicom_image ใน TensorFlow IO การถอดรหัสไฟล์ที่มี DICOM TensorFlow

การตั้งค่าและการใช้งาน

ดาวน์โหลดภาพ DICOM

ภาพ DICOM ที่ใช้ในการกวดวิชานี้เป็นจาก ชุด X-ray NIH หน้าอก

NIH หน้าอกชุด X-ray ประกอบด้วย 100,000 ภาพ de-ระบุของหน้าอกรังสีเอกซ์ในรูปแบบ PNG ให้โดย NIH คลินิกศูนย์และสามารถดาวน์โหลดผ่าน ลิงค์นี้

Google Cloud นอกจากนี้ยังมีรุ่น DICOM ของภาพที่มีอยู่ใน การจัดเก็บเมฆ

ในการกวดวิชานี้คุณจะดาวน์โหลดไฟล์ตัวอย่างของชุดข้อมูลจาก repo GitHub

  • Xiaosong Wang, Yifan Peng, Le Lu, Zhiyong Lu, Mohammadhadi Bagheri, Ronald Summers, ChestX-ray8: ฐานข้อมูล X-ray ทรวงอกในโรงพยาบาลและเกณฑ์มาตรฐานในการจำแนกประเภทและการแปลเป็นภาษาท้องถิ่นของโรคทรวงอกทั่วไป 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

png

ถอดรหัส DICOM Metadata และทำงานกับ Tags

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