赞
踩
相信很多和我一样做医学图像处理的小伙伴都接触过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(系列描述)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。