Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

pylibjpeg-rle

Package Overview
Dependencies
Maintainers
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pylibjpeg-rle

"Python bindings for a fast RLE decoder/encoder, with a focus on ""use as a plugin for pylibjpeg"

  • 2.0.0
  • PyPI
  • Socket score

Maintainers
3

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

pylibjpeg-rle

A fast DICOM (PackBits) RLE plugin for pylibjpeg, written in Rust with a Python 3.7+ wrapper.

Linux, MacOS and Windows are all supported.

Installation

Installing the current release
pip install pylibjpeg-rle
Installing the development version

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

git clone https://github.com/pydicom/pylibjpeg-rle
cd pylibjpeg-rle
python -m pip install .

Supported Transfer Syntaxes

UIDDescriptionDecodingEncoding
1.2.840.10008.1.2.5RLE LosslessYesYes

Usage

Decoding
With pylibjpeg
from pydicom import dcmread
from pydicom.data import get_testdata_file

ds = dcmread(get_testdata_file("OBXXXX1A_rle.dcm"))
arr = ds.pixel_array
Standalone with pydicom

Alternatively you can use the included functions to decode a given dataset:

from rle import pixel_array, generate_frames

# Return the entire Pixel Data as an ndarray
arr = pixel_array(ds)

# Generator function that only processes 1 frame at a time,
# may help reduce memory usage when dealing with large Pixel Data
for arr in generate_frames(ds):
    print(arr.shape)
Encoding
Standalone with pydicom

Convert uncompressed pixel data to RLE encoding and save:

from pydicom import dcmread
from pydicom.data import get_testdata_file
from pydicom.uid import RLELossless

from rle import pixel_data

# Get the uncompressed pixel data
ds = dcmread(get_testdata_file("OBXXXX1A.dcm"))
arr = ds.pixel_array

# RLE encode and encapsulate `arr`
ds.PixelData = pixel_data(arr, ds)
# Set the correct *Transfer Syntax UID*
ds.file_meta.TransferSyntaxUID = RLELossless
ds.save_as('as_rle.dcm')

Benchmarks

Decoding

Time per 1000 decodes, pydicom's default RLE handler vs. pylibjpeg-rle

DatasetPixelsBytespydicompylibjpeg-rle
OBXXXX1A_rle.dcm480,000480,0004.89 s0.79 s
OBXXXX1A_rle_2frame.dcm960,000960,0009.89 s1.65 s
SC_rgb_rle.dcm10,00030,0000.20 s0.15 s
SC_rgb_rle_2frame.dcm20,00060,0000.32 s0.18 s
MR_small_RLE.dcm4,0968,1920.35 s0.13 s
emri_small_RLE.dcm40,96081,9201.13 s0.28 s
SC_rgb_rle_16bit.dcm10,00060,0000.33 s0.17 s
SC_rgb_rle_16bit_2frame.dcm20,000120,0000.56 s0.21 s
rtdose_rle_1frame.dcm1004000.12 s0.13 s
rtdose_rle.dcm1,5006,0000.53 s0.26 s
SC_rgb_rle_32bit.dcm10,000120,0000.56 s0.19 s
SC_rgb_rle_32bit_2frame.dcm20,000240,0001.03 s0.28 s
Encoding

Time per 1000 encodes, pydicom's default RLE handler vs. pylibjpeg-rle

DatasetPixelsBytespydicompylibjpeg-rle
OBXXXX1A.dcm480,000480,00030.7 s1.36 s
SC_rgb.dcm10,00030,0001.80 s0.09 s
MR_small.dcm4,0968,1922.29 s0.04 s
SC_rgb_16bit.dcm10,00060,0003.57 s0.17 s
rtdose_1frame.dcm1004000.19 s0.003 s
SC_rgb_32bit.dcm10,000120,0007.20 s0.33 s

Keywords

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc