python医学图像处理之读取DICOM文件信息

        相信很多和我一样做医学图像处理的小伙伴都接触过DICOM格式的数据吧。由于不同的DICOM文件在存储和传输时存在差异,所以处理起来总是让我们非常头疼。

        接下来,我就教大家如何读取DICOM文件中的文本信息。

        那么,在DICOM文件中,比较常用的信息究竟都有哪些呢?这里大致给大家列举一下:

  • Patient Name(患者姓名):患者的姓名。

  • Patient ID(患者ID):患者的唯一标识符。

  • Patient Birth Date(患者出生日期):患者的出生日期。

  • Patient Sex(患者性别):患者的性别。

  • Modality(影像模态):表示产生影像的设备类型,如CT、MRI、X-Ray等。

  • Series Description(系列描述):描述系列的信息,例如图像采集的方向或参数设置。

  • Image Orientation (Patient)(图像定位(患者)):表示图像在患者坐标系中的方向。

  • Pixel Spacing(像素间距):表示图像中像素在物理空间中的尺寸。

  • Slice Thickness(切片厚度):表示图像的切片厚度。

  • ……

       接下来,我们就开始读取DICOM文件。这里,我们使用的是pydicom库。这是一个python中常用来处理DICOM文件的库,当然,SimpleITK库和vtk库也可以用来处理这种格式的文件。

path = r"D:\cartilage\1-1_1_1B420709.dcm"  # dicom文件路径
dicom = pydicom.dcmread(path, force=True)

        这里呢,要强调一下,“force=True”一定要加上!!!由于存储和传输的不同,导致我们的DICOM文件可能会缺少一些必要的元素,如果不强制读取,就很有可能会报错哦~

        再跟大家分享一个小问题的解决方式吧,不知道是否有小伙伴也遇到过类似的问题。有的文件后缀是大写的”DCM”,如果我们将path写为”D:\cartilage\1-1_1_1B420709.DCM”,就会报错。这个时候,我们只需要强制将源文件的文件后缀改为小写的”dcm”,代码中path也同样使用小写的”dcm”就可以解决了哦~

        然后,我们输出一下我们的dicom文件,看看文件中究竟都包含了哪些信息呢?图1是我的文件输出结果。

print(dicom) 

 图1 文件输出结果

        下面就教大家如何读取文本信息,这里提供两种方式。

        第一种,从图1我们可以看到每一项信息前都有一个编号,我们可以通过输入编号读取信息。输出结果如图2所示。

print(dicom[('0008', '0060')])
print(dicom[('0019', '101e')])

 图2 方法一输出结果

       第二种,也是我个人比较喜欢的一种,直接指定输出哪些信息,同样的代码适用于绝大多数的DICOM文件。输出结果如图3所示。

print(dicom.Modality) #Modality(影像模态)
print(dicom.StudyDate) #拍摄时间
print(dicom.PatientName) #Patient Name(患者姓名)
print(dicom.PatientID) #Patient ID(患者ID)
print(dicom.PatientSex) #Patient Sex(患者性别)
print(dicom.PatientBirthDate) #Patient Birth Date(患者出生日期)
print(dicom.SliceThickness) #Slice Thickness(切片厚度)
print(dicom.Rows) #图像的宽
print(dicom.Columns) #图像的长
print(dicom.PixelSpacing) #Pixel Spacing(像素间距)
print(dicom.ImageOrientationPatient) #Image Orientation (Patient)(图像定位(患者))
print(dicom.SeriesDescription) #Series Description(系列描述)

 图3 方法二输出结果

        DICOM文件中这些信息,对我们开发基于医学影像的软件,或者是整理数据、进行三维重建等都十分有帮助。如果大家对医学图像三维重建感兴趣的话,也可以浏览一下我的另一篇博客:https://blog.csdn.net/Cherry330/article/details/131836418?spm=1001.2014.3001.5502

        最后附上源码,希望对小伙伴们有所帮助哦~

# -*- coding: utf-8 -*-
import pydicom

path = r"D:\cartilage\1-1_1_1B420709.dcm"  # dicom文件路径
dicom = pydicom.dcmread(path, force=True)
print(dicom)
print("------------------------------------------------------------------------------------")
print(dicom[('0008', '0060')])
print(dicom[('0019', '101e')])
print("------------------------------------------------------------------------------------")
print(dicom.Modality) #Modality(影像模态)
print(dicom.StudyDate) #拍摄时间
print(dicom.PatientName) #Patient Name(患者姓名)
print(dicom.PatientID) #Patient ID(患者ID)
print(dicom.PatientSex) #Patient Sex(患者性别)
print(dicom.PatientBirthDate) #Patient Birth Date(患者出生日期)
print(dicom.SliceThickness) #Slice Thickness(切片厚度)
print(dicom.Rows) #图像的宽
print(dicom.Columns) #图像的长
print(dicom.PixelSpacing) #Pixel Spacing(像素间距)
print(dicom.ImageOrientationPatient) #Image Orientation (Patient)(图像定位(患者))
print(dicom.SeriesDescription) #Series Description(系列描述)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年11月30日
下一篇 2023年11月30日

相关推荐