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

文章介绍了DICOM格式在医学图像处理中的常见问题,并详细讲解了如何使用Python的pydicom库来读取DICOM文件中的患者信息,如姓名、ID、出生日期等,并提供了两种读取文本信息的方法。此外,还提醒了处理文件名大小写问题以及强制读取的必要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        相信很多和我一样做医学图像处理的小伙伴都接触过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(系列描述)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherry330

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值