一个用于读取和写入DICOM数据的纯Python包
项目描述
pydicom
pydicom 是一个用于处理 DICOM 文件的纯 Python 包。它允许您以简单直观的 "Pythonic" 方式读取、修改和写入 DICOM 数据。作为一个纯 Python 包,pydicom 可以在任何运行 Python 的地方运行,无需其他要求,尽管如果您正在处理 像素数据,我们建议您也安装 NumPy。
请注意,pydicom 是一个通用的 DICOM 框架,专注于读取和写入 DICOM 数据集。为了保持项目可管理,它不处理单个 SOP 类别或 DICOM 的其他方面的具体细节。pydicom 组织内外其他库基于 pydicom 构建,并提供对 DICOM 的其他方面和更具体应用的支持。
例如,有 pynetdicom,这是一个用于 DICOM 网络的 Python 库,以及 deid,它支持 DICOM 文件的匿名化。
安装
使用 pip
pip install pydicom
使用 conda
conda install -c conda-forge pydicom
有关更多信息,包括开发版本的安装说明,请参阅 安装指南。
文档
pydicom 的用户指南、教程、示例和 API 参考文档可在 GitHub Pages 上的 当前版本 和 开发版本 上找到。
像素数据
压缩和非压缩的 像素数据 始终可用,可以以 bytes 的形式读取、更改和写入。
>>> from pydicom import dcmread
>>> from pydicom.data import get_testdata_file
>>> path = get_testdata_file("CT_small.dcm")
>>> ds = dcmread(path)
>>> type(ds.PixelData)
<class 'bytes'>
>>> len(ds.PixelData)
32768
>>> ds.PixelData[:2]
b'\xaf\x00'
如果已安装 NumPy,则可以使用 Dataset.pixel_array 属性将 像素数据 转换为 ndarray。
>>> arr = ds.pixel_array
>>> arr.shape
(128, 128)
>>> arr
array([[175, 180, 166, ..., 203, 207, 216],
[186, 183, 157, ..., 181, 190, 239],
[184, 180, 171, ..., 152, 164, 235],
...,
[906, 910, 923, ..., 922, 929, 927],
[914, 954, 938, ..., 942, 925, 905],
[959, 955, 916, ..., 911, 904, 909]], dtype=int16)
解压缩 像素数据
JPEG、JPEG-LS 和 JPEG 2000
将 JPEG、JPEG-LS 或 JPEG 2000 压缩的 像素数据 转换为 ndarray
需要安装一个或多个额外的 Python 库。有关需要哪些库的信息,请参阅 像素数据处理器文档。
RLE
解压缩 RLE 像素数据 只需要 NumPy,但它可能相当慢。您可能需要考虑 安装一个或多个额外的 Python 库 来加快处理过程。
压缩 像素数据
有关使用以下格式之一压缩 像素数据 的信息,请参阅相应的 编码指南。这些指南涵盖了每种编码方法的特定要求,我们建议您在执行图像压缩时熟悉它们。
JPEG-LS、JPEG 2000
将来自 ndarray
或 bytes
对象的图像数据压缩为 JPEG-LS 或 JPEG 2000 需要安装以下
- JPEG-LS 需要使用 pyjpegls
- JPEG 2000 需要使用 pylibjpeg 和 pylibjpeg-openjpeg 插件
RLE
使用 RLE 压缩不需要额外的包,但可能会比较慢。可以通过安装 pylibjpeg 的 pylibjpeg-rle 插件或 gdcm 来提高速度。
示例
更多示例可以在文档中找到。
更改患者的 ID
from pydicom import dcmread
ds = dcmread("/path/to/file.dcm")
# Edit the (0010,0020) 'Patient ID' element
ds.PatientID = "12345678"
ds.save_as("/path/to/file_updated.dcm")
显示像素数据
使用 NumPy 和 matplotlib
import matplotlib.pyplot as plt
from pydicom import dcmread, examples
# The path to the example "ct" dataset included with pydicom
path: "pathlib.Path" = examples.get_path("ct")
ds = dcmread(path)
# `arr` is a numpy.ndarray
arr = ds.pixel_array
plt.imshow(arr, cmap="gray")
plt.show()
贡献
我们都是志愿者,在业余时间从事 pydicom 的工作。由于我们的资源有限,我们非常重视您的贡献,无论是错误修复、新的核心功能还是文档改进。有关更多信息,请参阅我们的 贡献指南。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
pydicom-3.0.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7b8be344b5b62493c9452ba6f5a299f78f8a6ab79786c729b0613698209603ec |
|
MD5 | 3a287c3e2c6d556a6ec1520fe411517b |
|
BLAKE2b-256 | d76f55ea163b344c91df2e03c007bebf94781f0817656e2c037d7c5bf86c3bfc |
pydicom-3.0.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | db32f78b2641bd7972096b8289111ddab01fb221610de8d7afa835eb938adb41 |
|
MD5 | 34dea1f02f0f5c6fb17342b20a3d51d3 |
|
BLAKE2b-256 | 27a698651e752a49f341aa99aa3f6c8ba361728dfc064242884355419df63669 |