Skip to main content

A fast and light-weighted DICOM software development library

Project description

DICOMSDL

Build status

A fast and light-weighted DICOM software development library.

Introduction

Digital Imaging and Communications in Medicine (DICOM) is a standard for managing informations in medical imaging developed by American College of Radiology (ACR) and National Electrical Manufacturers Association (NEMA). It defines a file format and a communication protocol over network.

DICOM Software Development Library (DICOM SDL) is a software developed libraries for easy and quick development of an application managing DICOM formatted files. DICOM SDL allows to make programs that read DICOM formatted files without in depth knowledge of DICOM.

DICOM SDL is intended to process a huge bunch of DICOM formatted image in high speed. For example, processing 1M+ dicom files for deep learning, speed really matters. To achieve the processing speed, DICOM SDL use an extension written in C++. DICOM SDL works much faster than pure DICOM implementation(see tutorials/timeit_test.ipynb). If your job is simple such as image extraction or get study date, DICOM SDL may be what you want.

DICOM SDL can

  • read DICOM formatted files.
  • read medical images in DICOM file, if file encodes in raw/jpeg/jpeg2000/RLE/JPEG-LS format.
  • modify and save into DICOM formatted files.

DICOM SDL is especially optimized for reading lots of DICOM formatted files quickly, and would be very useful for scanning and processing huge numbers of DICOM files.

DICOM SDL cannot

  • send/receive DICOM over network.

Install

To install on python,

$ pip install -U dicomsdl

To get code and compile,

$ git clone --recursive https://github.com/tsangel/dicomsdl
$ python setup.py install

If you want to use AVX2, then set environment USE_AVX2.

$ set USER_AVX=ON
$ python setup.py install

DICOMSDL was successfully compiled and ran on following environments

  • Microsoft Windows 7/10/11 (x86, x64), Python 3.6-3.12
  • Linux x86/x64 (Ubuntu), Python 2.7, 3.5-3.12
  • MacOS 10.9+ (x86_64, arm64), Python 3.6-3.12 (No more support python 2.7-3.5 on Windows and MacOS since 0.108.5.)

If you have ImportError in Microsoft Windows, install Microsoft Visual C++ Redistributable.

Some examples

Please look ipynb files in tutorial folder for detailed explanations.

>>> import dicomsdl as dicom

>>> dset = dicom.open("somefile.dcm")

>>> print (dset.Rows, dset.Columns)
512 512 

>>> dset.getPixelDataInfo()
{'Rows': 512, 'Cols': 512, 'NumberOfFrames': 1, 'SamplesPerPixel': 1, 'PlanarConfiguration': None, 'BitsAllocated': 16, 'BytesAllocated': 2, 'BitsStored': 16, 'PixelRepresentation': True, 'dtype': 'h', 'PhotometricInterpretation': 'MONOCHROME2', 'WindowCenter': None, 'WindowWidth': None, 'RescaleIntercept': -1024.0, 'RescaleSlope': 1.0}

>>> dset.pixelData()
array([[-3024., -3024., -3024., ..., -3024., -3024., -3024.],
       [-3024., -3024., -3024., ..., -3024., -3024., -3024.],
       [-3024., -3024., -3024., ..., -3024., -3024., -3024.],
       ...,
       [-3024., -3024., -3024., ..., -3024., -3024., -3024.],
       [-3024., -3024., -3024., ..., -3024., -3024., -3024.],
       [-3024., -3024., -3024., ..., -3024., -3024., -3024.]],
      dtype=float32)

>>> dset.pixelData(storedvalue=True)
array([[-2000, -2000, -2000, ..., -2000, -2000, -2000],
       [-2000, -2000, -2000, ..., -2000, -2000, -2000],
       [-2000, -2000, -2000, ..., -2000, -2000, -2000],
       ...,
       [-2000, -2000, -2000, ..., -2000, -2000, -2000],
       [-2000, -2000, -2000, ..., -2000, -2000, -2000],
       [-2000, -2000, -2000, ..., -2000, -2000, -2000]], dtype=int16)

>>> dset.RescaleIntercept
-1024.0
>>> dset['RescaleIntercept']  # another way to get value
-1024.0
>>> dset[0x00281052]  # yet another way to get value
-1024.0
>>> dset.getDataElement('RescaleSlope')
<dicomsdl._dicomsdl.DataElement object at 0x10ff5d0f0>
>>> dset.getDataElement('RescaleIntercept').toDouble() # yet yet another
-1024.0
>>> dset.getDataElement('RescaleIntercept').value() # yet yet yet another
-1024.0

>>> print(dset['00540016.0.00180031'])  # from another example
FDG -- fluorodeoxyglucose

>>> print(dset.WindowCenter)  # return None if dicom file doesn't have value.
None

>>> dset.toPilImage().show()
 ... pop up image ...

>>> print(dset.dump())
TAG	VR	LEN	VM	OFFSET	KEYWORD
'00020000'	UL	4	1	0x8c	212	# FileMetaInformationGroupLength
'00020001'	OB	2	1	0x9c	'\x00\x01'	# FileMetaInformationVersion
'00020002'	UI	26	1	0xa6	'1.2.840.10008.5.1.4.1.1.2' = CT Image Storage	# MediaStorageSOPClassUID
...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

dicomsdl-0.109.3-cp312-cp312-win_amd64.whl (924.3 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

dicomsdl-0.109.3-cp312-cp312-win32.whl (831.4 kB view hashes)

Uploaded CPython 3.12 Windows x86

dicomsdl-0.109.3-cp312-cp312-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

dicomsdl-0.109.3-cp312-cp312-musllinux_1_1_i686.whl (2.0 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

dicomsdl-0.109.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

dicomsdl-0.109.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

dicomsdl-0.109.3-cp312-cp312-macosx_11_0_arm64.whl (1.1 MB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

dicomsdl-0.109.3-cp312-cp312-macosx_10_9_universal2.whl (2.3 MB view hashes)

Uploaded CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

dicomsdl-0.109.3-cp311-cp311-win_amd64.whl (926.3 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

dicomsdl-0.109.3-cp311-cp311-win32.whl (831.9 kB view hashes)

Uploaded CPython 3.11 Windows x86

dicomsdl-0.109.3-cp311-cp311-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

dicomsdl-0.109.3-cp311-cp311-musllinux_1_1_i686.whl (2.0 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

dicomsdl-0.109.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

dicomsdl-0.109.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

dicomsdl-0.109.3-cp311-cp311-macosx_11_0_arm64.whl (1.1 MB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

dicomsdl-0.109.3-cp311-cp311-macosx_10_9_universal2.whl (2.3 MB view hashes)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

dicomsdl-0.109.3-cp310-cp310-win_amd64.whl (923.8 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

dicomsdl-0.109.3-cp310-cp310-win32.whl (829.2 kB view hashes)

Uploaded CPython 3.10 Windows x86

dicomsdl-0.109.3-cp310-cp310-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

dicomsdl-0.109.3-cp310-cp310-musllinux_1_1_i686.whl (2.0 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

dicomsdl-0.109.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ x86-64

dicomsdl-0.109.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ i686

dicomsdl-0.109.3-cp310-cp310-macosx_10_9_universal2.whl (2.3 MB view hashes)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

dicomsdl-0.109.3-cp39-cp39-win_amd64.whl (924.2 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

dicomsdl-0.109.3-cp39-cp39-win32.whl (829.0 kB view hashes)

Uploaded CPython 3.9 Windows x86

dicomsdl-0.109.3-cp39-cp39-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

dicomsdl-0.109.3-cp39-cp39-musllinux_1_1_i686.whl (2.0 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

dicomsdl-0.109.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

dicomsdl-0.109.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

dicomsdl-0.109.3-cp39-cp39-macosx_10_9_universal2.whl (2.3 MB view hashes)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

dicomsdl-0.109.3-cp38-cp38-win_amd64.whl (923.9 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

dicomsdl-0.109.3-cp38-cp38-win32.whl (828.7 kB view hashes)

Uploaded CPython 3.8 Windows x86

dicomsdl-0.109.3-cp38-cp38-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

dicomsdl-0.109.3-cp38-cp38-musllinux_1_1_i686.whl (2.0 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

dicomsdl-0.109.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

dicomsdl-0.109.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

dicomsdl-0.109.3-cp38-cp38-macosx_10_9_universal2.whl (2.3 MB view hashes)

Uploaded CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

dicomsdl-0.109.3-cp37-cp37m-win_amd64.whl (927.1 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

dicomsdl-0.109.3-cp37-cp37m-win32.whl (832.9 kB view hashes)

Uploaded CPython 3.7m Windows x86

dicomsdl-0.109.3-cp37-cp37m-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

dicomsdl-0.109.3-cp37-cp37m-musllinux_1_1_i686.whl (1.9 MB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

dicomsdl-0.109.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

dicomsdl-0.109.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

dicomsdl-0.109.3-cp37-cp37m-macosx_10_9_x86_64.whl (1.2 MB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

dicomsdl-0.109.3-cp36-cp36m-win_amd64.whl (927.2 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

dicomsdl-0.109.3-cp36-cp36m-win32.whl (832.9 kB view hashes)

Uploaded CPython 3.6m Windows x86

dicomsdl-0.109.3-cp36-cp36m-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ x86-64

dicomsdl-0.109.3-cp36-cp36m-musllinux_1_1_i686.whl (1.9 MB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

dicomsdl-0.109.3-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64

dicomsdl-0.109.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.12+ i686

dicomsdl-0.109.3-cp36-cp36m-macosx_10_9_x86_64.whl (1.2 MB view hashes)

Uploaded CPython 3.6m macOS 10.9+ x86-64

dicomsdl-0.109.3-cp35-cp35m-manylinux2010_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.5m manylinux: glibc 2.12+ x86-64

dicomsdl-0.109.3-cp35-cp35m-manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.5m manylinux: glibc 2.12+ i686

dicomsdl-0.109.3-cp27-cp27mu-manylinux2010_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 2.7mu manylinux: glibc 2.12+ x86-64

dicomsdl-0.109.3-cp27-cp27mu-manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 2.7mu manylinux: glibc 2.12+ i686

dicomsdl-0.109.3-cp27-cp27m-manylinux2010_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 2.7m manylinux: glibc 2.12+ x86-64

dicomsdl-0.109.3-cp27-cp27m-manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 2.7m manylinux: glibc 2.12+ i686

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page