用于解码 JPEG 和解码/编码 DICOM RLE 数据的 Python 框架,重点支持 pydicom
项目描述
pylibjpeg
用于解码 JPEG 图像和解码/编码 RLE 数据集的 Python 3.7+ 框架,重点是提供对pydicom的支持。
安装
安装当前版本
pip install pylibjpeg
安装额外要求
该软件包可以安装额外的要求,以启用对 JPEG(带libjpeg
)、JPEG 2000(带openjpeg
)和运行长度编码(RLE)(带rle
)的支持,分别:
pip install pylibjpeg[libjpeg,openjpeg,rle]
或者只是all
:
pip install pylibjpeg[all]
安装开发版本
确保安装了Git,然后
git clone https://github.com/pydicom/pylibjpeg
python -m pip install pylibjpeg
插件
在pylibjpeg能够处理 JPEG 图像或 RLE 数据集之前,需要一个或多个插件。要处理给定的格式或 DICOM 传输语法,您首先必须安装相应的包:
支持的格式
格式 | 解码? | 编码? | 插入 | 基于 |
---|---|---|---|---|
JPEG、JPEG-LS 和 JPEG XT | 是的 | 不 | pylibjpeg-libjpeg | libjpeg |
JPEG 2000 | 是的 | 不 | pylibjpeg-openjpeg | 打开jpeg |
RLE 无损 (PackBits) | 是的 | 是的 | pylibjpeg-rle | - |
DICOM 传输语法
用户标识符 | 描述 | 插入 |
---|---|---|
1.2.840.10008.1.2.4.50 | JPEG 基线(过程 1) | pylibjpeg-libjpeg |
1.2.840.10008.1.2.4.51 | JPEG 扩展(过程 2 和 4) | pylibjpeg-libjpeg |
1.2.840.10008.1.2.4.57 | JPEG 无损、非分层(过程 14) | pylibjpeg-libjpeg |
1.2.840.10008.1.2.4.70 | JPEG 无损、非分层、一阶预测 (过程 14,选择值 1) |
pylibjpeg-libjpeg |
1.2.840.10008.1.2.4.80 | JPEG-LS 无损 | pylibjpeg-libjpeg |
1.2.840.10008.1.2.4.81 | JPEG-LS 有损(近无损)图像压缩 | pylibjpeg-libjpeg |
1.2.840.10008.1.2.4.90 | JPEG 2000 图像压缩(仅限无损) | pylibjpeg-openjpeg |
1.2.840.10008.1.2.4.91 | JPEG 2000 图像压缩 | pylibjpeg-openjpeg |
1.2.840.10008.1.2.5 | RLE 无损 | pylibjpeg-rle |
如果您不确定数据集的传输语法 UID是什么,可以通过以下方式确定:
>>> from pydicom import dcmread
>>> ds = dcmread('path/to/dicom_file')
>>> ds.file_meta.TransferSyntaxUID.name
用法
解码
使用 pydicom
假设您安装了pydicom v2.1+ 和合适的插件:
from pydicom import dcmread
from pydicom.data import get_testdata_file
# With the pylibjpeg-libjpeg plugin
ds = dcmread(get_testdata_file('JPEG-LL.dcm'))
jpg_arr = ds.pixel_array
# With the pylibjpeg-openjpeg plugin
ds = dcmread(get_testdata_file('JPEG2000.dcm'))
j2k_arr = ds.pixel_array
# With the pylibjpeg-rle plugin and pydicom v2.2+
ds = dcmread(get_testdata_file('OBXXXX1A_rle.dcm'))
# pydicom defaults to the numpy handler for RLE so need
# to explicitly specify the use of pylibjpeg
ds.decompress("pylibjpeg")
rle_arr = ds.pixel_array
generate_frames()
对于具有多个帧的数据集,您可以通过使用生成器函数分别处理每个帧来减少内存使用量:
from pydicom import dcmread
from pydicom.data import get_testdata_file
from pydicom.pixel_data_handlers.pylibjpeg_handler import generate_frames
ds = dcmread(get_testdata_file('color3d_jpeg_baseline.dcm'))
frames = generate_frames(ds)
arr = next(frames)
独立 JPEG 解码
您也可以只使用pylibjpeg将 JPEG 图像解码为numpy ndarray,前提是您安装了合适的插件:
from pylibjpeg import decode
# Can decode using the path to a JPG file as str or path-like
arr = decode('filename.jpg')
# Or a file-like...
with open('filename.jpg', 'rb') as f:
arr = decode(f)
# Or bytes...
with open('filename.jpg', 'rb') as f:
arr = decode(f.read())
编码
使用 pydicom
假设您安装了pydicom v2.2+ 和合适的插件:
from pydicom import dcmread
from pydicom.data import get_testdata_file
from pydicom.uid import RLELossless
ds = dcmread(get_testdata_file("CT_small.dcm"))
# Encode in-place using RLE Lossless and update the dataset
# Updates the Pixel Data, Transfer Syntax UID and Planar Configuration
ds.compress(uid)
# Save compressed
ds.save_as("CT_small_rle.dcm")
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
pylibjpeg-1.4.0.tar.gz
(25.4 kB
查看哈希)
内置分布
pylibjpeg-1.4.0-py3-none-any.whl
(28.1 kB
查看哈希)