Coder Social home page Coder Social logo

pydicom / pylibjpeg-libjpeg Goto Github PK

View Code? Open in Web Editor NEW
15.0 5.0 6.0 283 KB

A JPEG, JPEG-LS and JPEG XT plugin for pylibjpeg

License: Other

Python 69.91% C++ 27.19% Cython 2.90%
jpeg libjpeg python pylibjpeg jpeg-ls decoding pydicom dicom jpeg-xt

pylibjpeg-libjpeg'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.

pylibjpeg-libjpeg's People

Contributors

dependabot[bot] avatar mrbean-bremen avatar scaramallion avatar simonbiggs avatar yarikoptic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

pylibjpeg-libjpeg's Issues

64-bit ARM Linux wheels

Would it be possible to provide binary wheels for 64-bit ARM (a.k.a. "aarch64") Linux?

I see that such wheels are already provided for 64-bit ARM macOS and x86-64 Linux, so hopefully not too difficult to do...

'pylibjpeg-libjpeg' plugin is not installed

I am using Python 3.10 along with VS2019 . Script works fine but when I use pyinstaller I get the error Unable to convert the Pixel Data as the 'pylibjpeg-libjpeg' plugin is not installed. I created the exe with the following command line pyinstaller --hiddenimport=pydicom.encoders.gdcm --collect-all pydicom --onefile trypy.py. The versions of pylibjpeg pylibjpeg-openjpeg pylibjpeg-libjpeg have updated to the latest versions. Thank you in advance for your help.

Add wheel builds

It may be annoying, but at least try and get it working on windows...

Will need to provide wheels for 32 and 64-bit windows for Python 3.6, 3.7 and 3.8, which will be interesting. How do other projects do this?

Appveyor has a large range of WIndows VMs...

https://github.com/joerick/cibuildwheel and https://github.com/pypa/manylinux

OK I think I love cibuildwheel ๐Ÿ˜


Hah, I can't get an API token from pypi without a project and I can't upload a whl file to pypi to create a project because I don't have an API token.

Getting Greeninsh Images from DICOM file

@PankajSujyot please don't post images which have patient identifying information in them

I am getting this kind of result
but actual result is like this
image
my code is as follows

ds = pydicom.dcmread(os.path.join(source_folder,file))
plt.imsave(os.path.join(output_folder,file)+'.png', ds.pixel_array)

TransferSyntax is 1.2.840.10008.1.2.4.70

Use JPEG XT

Hello and sorry for the bothering. I have checked the readme but still can't understand how can I use the Decoding JPEG XT on a HDR image. Can you help me with that, or give me a hint?

Thanks, Rodrigo Saraiva

error while importing libjpeg

Hi,
I am importing the library via from libjpeg import decode, and I faced the following traceback:
File "/home/alireza/anaconda3/lib/python3.8/site-packages/libjpeg/__init__.py", line 4, in <module> from .utils import decode, decode_pixel_data, get_parameters File "/home/alireza/anaconda3/lib/python3.8/site-packages/libjpeg/utils.py", line 8, in <module> import _libjpeg File "libjpeg/_libjpeg.pyx", line 1, in init _libjpeg ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject

v1.0.0 Release

  • Wait for v1.0 release of pylibjpeg
    • Add any changed required to plugin interface
  • Change version to release
  • Update README and setup.py
  • Github release
  • Build wheels
  • Test PyPi and PyPi releases
  • Add wheels to Github release

v2.02 is typo of v2.0.2?

vercmp 2.02 2.1.0 outputs 1, which means vercmp recognizes 2.02 > 2.1.0. vercmp is a tool for compare package version numbers using pacman's version comparison logic. pacman is the package manager for ArchLinux. I create package for ArchLinux, but now it says pylibjpeg-libjpeg 2.1.0 is newer than pylibjpeg-libjpeg 2.0.2.

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.