使用Python对Dicom文件进行读取与写入

Pydicom

单张影像的读取

使用 pydicom.dcmread() 函数进行单张影像的读取,返回一个pydicom.dataset.FileDataset对象.

import os
import pydicom
# 调用本地的 dicom file 
folder_path = r"D:\Files\Data\Materials"
file_name = "PA1_0001.dcm"
file_path = os.path.join(folder_path,file_name)
ds = pydicom.dcmread(file_path)

在一些特殊情况下,比如直接读取从医院拿到的数据(未经任何处理)时,可能会发生以下报错:

raise InvalidDicomError("File is missing DICOM File Meta Information "
pydicom.errors.InvalidDicomError: File is missing DICOM File Meta Information header or the 'DICM' prefix is missing from the header. Use force=True to force reading.

可以看到,由于缺失文件元信息头,无法直接读取,只能强行读取.这种情况可以直接根据提示,调整命令为:

ds = pydicom.dcmread(file_path,force=True)

但后续还会碰到:

AttributeError: 'Dataset' object has no attribute 'TransferSyntaxUID'

在网上检索后发现,可以通过设置TransferSyntaxUID来解决问题:

ds.file_meta.TransferSyntaxUID = pydicom.uid.ImplicitVRLittleEndian

这样就大功告成了(这里实际上就提前接触到了下面读取Dicom Tags的内容了)

一些简单处理

读取成功后,我们可以对 Dicom文件 进行一些简单的处理

读取并编辑Dicom Tags

可以通过两种方法来读取Tag的值

  1. 使用的Tag的Description
print(ds.PatientID,ds.StudyDate,ds.Modality)
  1. 使用 ds.get() 函数. 函数内参数采用的是Tag ID.几种简单的打开Dicom文件的软件(如RadiAnt DICOM Viewer)都可以直接看到.这里不再赘述.
ds.get(0x00100020) # 这里得到的是PatientID 

读取到相应的Tag值后, 也可以将其他的值写入这些Tag.只要最后保存一下就可以了.

  • 43
    点赞
  • 203
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
使用Python读取DICOM文件,你可以使用pydicom库中的dcmread()函数。这个函数可以读取单张影像,并返回一个pydicom.dataset.FileDataset对象。首先,你需要导入os和pydicom库,并指定DICOM文件的路径和文件名。然后,你可以使用dcmread()函数来读取文件。例如,你可以使用以下代码来读取一个名为"PA1_0001.dcm"的DICOM文件: ```python import os import pydicom folder_path = r"D:\Files\Data\Materials" file_name = "PA1_0001.dcm" file_path = os.path.join(folder_path, file_name) ds = pydicom.dcmread(file_path) ``` 有时候,由于缺失文件信息,无法直接读取DICOM文件,这时需要强制读取。你可以使用force参数来调整dcmread()函数。例如,你可以使用以下代码来强制读取DICOM文件: ```python ds = pydicom.dcmread(file_path, force=True) ``` 读取DICOM文件后,你可以使用numpy和图像处理库(如PIL.Image)来进行简单的处理。例如,你可以使用numpy库将像素数组转换为numpy数组: ```python import numpy as np data = np.array(ds.pixel_array) ``` 这样,你就可以使用python读取DICOM文件进行相关处理了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [使用PythonDicom文件进行读取写入](https://blog.csdn.net/weixin_40451627/article/details/105574348)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值