Giter VIP home page Giter VIP logo

pylibjpeg-rle's Introduction

unit-tests type-hints doc-build test-coverage Python version PyPI version DOI

pydicom

pydicom is a pure Python package for working with DICOM files. It lets you read, modify and write DICOM data in an easy "pythonic" way. As a pure Python package, pydicom can run anywhere Python runs without any other requirements, although if you're working with Pixel Data then we recommend you also install NumPy.

Note that pydicom is a general-purpose DICOM framework concerned with reading and writing DICOM datasets. In order to keep the project manageable, it does not handle the specifics of individual SOP classes or other aspects of DICOM. Other libraries both inside and outside the pydicom organization are based on pydicom and provide support for other aspects of DICOM, and for more specific applications.

Examples are pynetdicom, which is a Python library for DICOM networking, and deid, which supports the anonymization of DICOM files.

Installation

Using pip:

pip install pydicom

Using conda:

conda install -c conda-forge pydicom

For more information, including installation instructions for the development version, see the installation guide.

Documentation

The pydicom user guide, tutorials, examples and API reference documentation is available for both the current release and the development version on GitHub Pages.

Pixel Data

Compressed and uncompressed Pixel Data is always available to be read, changed and written as 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'

If NumPy is installed, Pixel Data can be converted to an ndarray using the Dataset.pixel_array property:

>>> 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)

Decompressing Pixel Data

JPEG, JPEG-LS and JPEG 2000

Converting JPEG, JPEG-LS or JPEG 2000 compressed Pixel Data to an ndarray requires installing one or more additional Python libraries. For information on which libraries are required, see the pixel data handler documentation.

RLE

Decompressing RLE Pixel Data only requires NumPy, however it can be quite slow. You may want to consider installing one or more additional Python libraries to speed up the process.

Compressing Pixel Data

Information on compressing Pixel Data using one of the below formats can be found in the corresponding encoding guides. These guides cover the specific requirements for each encoding method and we recommend you be familiar with them when performing image compression.

JPEG-LS, JPEG 2000

Compressing image data from an ndarray or bytes object to JPEG-LS or JPEG 2000 requires installing the following:

RLE

Compressing using RLE requires no additional packages but can be quite slow. It can be sped up by installing pylibjpeg with the pylibjpeg-rle plugin, or gdcm.

Examples

More examples are available in the documentation.

Change a patient's 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")

Display the Pixel Data

With NumPy and matplotlib

import matplotlib.pyplot as plt
from pydicom import dcmread
from pydicom.data import get_testdata_file

# The path to a pydicom test dataset
path = get_testdata_file("CT_small.dcm")
ds = dcmread(path)
# `arr` is a numpy.ndarray
arr = ds.pixel_array

plt.imshow(arr, cmap="gray")
plt.show()

Contributing

We are all volunteers working on pydicom in our free time. As our resources are limited, we very much value your contributions, be it bug fixes, new core features, or documentation improvements. For more information, please read our contribution guide.

If you have examples or extensions of pydicom that don't belong with the core software, but that you deem useful to others, you can add them to our contribution repository: contrib-pydicom.

pylibjpeg-rle's People

Contributors

dependabot[bot] avatar erikogabrielsson avatar scaramallion avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

pylibjpeg-rle's Issues

Pip install fails on 3.11 due to no wheel?

Hi,
I tried to install pylibjpeg-rle with pip install pylibjpeg-rle on windows python 3.11.2 without success.

pip install pylibjpeg-rle
Collecting pylibjpeg-rle
  Using cached pylibjpeg-rle-1.3.0.tar.gz (26 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: numpy>=1.20 in c:\users\er-gac\.pyenv\pyenv-win\versions\3.11.2\lib\site-packages (from pylibjpeg-rle) (1.24.2)
Building wheels for collected packages: pylibjpeg-rle
  Building wheel for pylibjpeg-rle (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for pylibjpeg-rle (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [42 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build\lib.win-amd64-cpython-311
      creating build\lib.win-amd64-cpython-311\rle
      copying rle\utils.py -> build\lib.win-amd64-cpython-311\rle
      copying rle\_version.py -> build\lib.win-amd64-cpython-311\rle
      copying rle\__init__.py -> build\lib.win-amd64-cpython-311\rle
      creating build\lib.win-amd64-cpython-311\rle\benchmarks
      copying rle\benchmarks\bench_decode.py -> build\lib.win-amd64-cpython-311\rle\benchmarks
      copying rle\benchmarks\bench_encode.py -> build\lib.win-amd64-cpython-311\rle\benchmarks
      copying rle\benchmarks\__init__.py -> build\lib.win-amd64-cpython-311\rle\benchmarks
      creating build\lib.win-amd64-cpython-311\rle\tests
      copying rle\tests\test_decode.py -> build\lib.win-amd64-cpython-311\rle\tests
      copying rle\tests\test_encode.py -> build\lib.win-amd64-cpython-311\rle\tests
      copying rle\tests\test_handler.py -> build\lib.win-amd64-cpython-311\rle\tests
      copying rle\tests\test_utils.py -> build\lib.win-amd64-cpython-311\rle\tests
      copying rle\tests\__init__.py -> build\lib.win-amd64-cpython-311\rle\tests
      running egg_info
      writing pylibjpeg_rle.egg-info\PKG-INFO
      writing dependency_links to pylibjpeg_rle.egg-info\dependency_links.txt
      writing entry points to pylibjpeg_rle.egg-info\entry_points.txt
      writing requirements to pylibjpeg_rle.egg-info\requires.txt
      writing top-level names to pylibjpeg_rle.egg-info\top_level.txt
      reading manifest file 'pylibjpeg_rle.egg-info\SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      adding license file 'LICENSE'
      writing manifest file 'pylibjpeg_rle.egg-info\SOURCES.txt'
      running build_ext
      running build_rust
      error: can't find Rust compiler
     
      If you are using an outdated pip version, it is possible a prebuilt wheel is available for this package but pip is not able to install from it. Installing from the wheel would avoid the need for a Rust compiler.  
     
      To update pip, run:
     
          pip install --upgrade pip
     
      and then retry package installation.
     
      If you did intend to build this package from source, try installing a Rust compiler from your system package manager and ensure it is on the PATH during installation. Alternatively, rustup (available at https://rustup.rs) is the recommended way to download and update the Rust compiler toolchain.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for pylibjpeg-rle
Failed to build pylibjpeg-rle
ERROR: Could not build wheels for pylibjpeg-rle, which is required to install pyproject.toml-based projects

The dylib installed with the wheel is missing the ARM architecture on Apple Silicon

Dear maintainer, thank you for pylibjpeg-rle, your work is much appreciated.

I am reporting an issue regarding the binary: When you pip install python-rle on macOS it succeeds but installs a x86 binary that fails on import when python attempts to dlopen the compiled part.

I guess I should try with anaconda/miniconda or compile from source but I have not yet done that.

Error decoding segment with excess padding

See pydicom/pydicom#1438

Traceback (most recent call last):
  File ".../rle/utils.py", line 45, in decode_pixel_data
    decode_frame(src, ds.Rows * ds.Columns, ds.BitsAllocated, byteorder),
ValueError: The end of the frame was reached before the segment was completely decoded

Faster frame decoding using concurrency?

Can the decoding be sped up where multiple segments are available (i.e. samples/px > 1 or bytes/px > 1) using concurrency?

There may also be gains to be made by offering up a multi-frame decoder in addition to the single frame decoder currently available. Have to watch the memory use, though. And add support to pylibjpeg/pydicom.

Installing this dependency in a docker container always fails

I have a project wich has this library as dependency and I want to dockerize it but the pip install step always crashes.

I'm always getting this error when trying to build my container. I'm installing all the packages in the container which I think could be necessary but i think there must be still something missing.

This is my Dockerfile:

FROM python:3.8

WORKDIR /usr/src/app

RUN apt-get update && \
    apt-get install -y gcc g++ git cmake curl make apt-transport-https ca-certificates build-essential libc-dev python3-dev libsasl2-dev libldap2-dev libssl-dev libsnmp-dev libjpeg-dev zlib1g-dev libatlas-base-dev libffi-dev && \
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD "uwsgi -s /tmp/flaskr.sock --manage-script-name --mount /=flaskr:app"

Python, git and Rust are installed I'd like to to know what else I'm missing.

Thank you!

Support for Apple Silicon

Hi,

I run into this

ImportError: dlopen(/Users/tom/.asdf/installs/python/3.8.10/lib/python3.8/site-packages/rle/_rle.cpython-38-darwin.so, 0x0002): tried: '/Users/tom/.asdf/installs/python/3.8.10/lib/python3.8/site-packages/rle/_rle.cpython-38-darwin.so' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e'))

When using pydicom on an M1 macbook. Any suggestions for how to fix it would be appreciated!

Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.