Skip to main content

用于解码 JPEG 和解码/编码 DICOM RLE 数据的 Python 框架,重点支持 pydicom

项目描述

编解码器 构建状态 PyPI 版本 Python 版本

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 查看哈希

已上传 source

内置分布

pylibjpeg-1.4.0-py3-none-any.whl (28.1 kB 查看哈希

已上传 py3