GitHub - pydicom/pylibjpeg-openjpeg: A J2K, JP2 and HTJ2K plugin for pylibjpeg (original) (raw)

Build status Test coverage PyPI versions Python versions Code style: black

pylibjpeg-openjpeg

A Python 3.8+ wrapper foropenjpeg, with a focus on use as a plugin for pylibjpeg.

Linux, OSX and Windows are all supported.

Installation

Dependencies

NumPy

Installing the current release

python -m pip install -U pylibjpeg-openjpeg

Installing the development version

Make sure Python, Git and CMake are installed. For Windows, you also need to installMicrosoft's C++ Build Tools.

git clone --recurse-submodules https://github.com/pydicom/pylibjpeg-openjpeg python -m pip install pylibjpeg-openjpeg

Supported JPEG Formats

Decoding

ISO/IEC Standard ITU Equivalent JPEG Format
15444-1 T.800 JPEG 2000

Encoding

Encoding of NumPy ndarrays is supported for the following:

Transfer Syntaxes

UID Description
1.2.840.10008.1.2.4.90 JPEG 2000 Image Compression (Lossless Only)
1.2.840.10008.1.2.4.91 JPEG 2000 Image Compression
1.2.840.10008.1.2.4.201 High-Throughput JPEG 2000 Image Compression (Lossless Only)
1.2.840.10008.1.2.4.202 High-Throughput JPEG 2000 with RPCL Options Image Compression (Lossless Only)
1.2.840.10008.1.2.4.203 High-Throughput JPEG 2000 Image Compression

Usage

With pylibjpeg and pydicom

from pydicom import dcmread from pydicom.data import get_testdata_file

ds = dcmread(get_testdata_file('JPEG2000.dcm')) arr = ds.pixel_array

Standalone JPEG decoding

You can also decode JPEG 2000 images to a numpy ndarray:

from openjpeg import decode

with open('filename.j2k', 'rb') as f: # Returns a numpy array arr = decode(f)

Or simply...

arr = decode('filename.j2k')

Standalone JPEG encoding

Lossless encoding of RGB with multiple-component transformation:

import numpy as np from openjpeg import encode_array

arr = np.random.randint(low=0, high=65536, size=(100, 100, 3), dtype="uint8") encode_array(arr, photometric_interpretation=1) # 1: sRGB

Lossy encoding of a monochrome image using compression ratios:

import numpy as np from openjpeg import encode_array

arr = np.random.randint(low=-215, high=215, size=(100, 100), dtype="int8")

You must determine your own values for compression_ratios

as these are for illustration purposes only

encode_array(arr, compression_ratios=[5, 2])

Lossy encoding of a monochrome image using peak signal-to-noise ratios:

import numpy as np from openjpeg import encode_array

arr = np.random.randint(low=-215, high=215, size=(100, 100), dtype="int8")

You must determine your own values for signal_noise_ratios

as these are for illustration purposes only

encode_array(arr, signal_noise_ratios=[50, 80, 100])

See the docstring for the encode_array() function for full details.