pydicom


Namepydicom JSON
Version 2.4.4 PyPI version JSON
download
home_page
SummaryA pure Python package for reading and writing DICOM data
upload_time2023-12-14 21:44:29
maintainer
docs_urlNone
author
requires_python>=3.7
license
keywords dicom python medical imaging
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            [![unit-tests](https://github.com/pydicom/pydicom/workflows/unit-tests/badge.svg)](https://github.com/pydicom/pydicom/actions?query=workflow%3Aunit-tests)
[![type-hints](https://github.com/pydicom/pydicom/workflows/type-hints/badge.svg)](https://github.com/pydicom/pydicom/actions?query=workflow%3Atype-hints)
[![doc-build](https://circleci.com/gh/pydicom/pydicom/tree/master.svg?style=shield)](https://circleci.com/gh/pydicom/pydicom/tree/master)
[![test-coverage](https://codecov.io/gh/pydicom/pydicom/branch/master/graph/badge.svg)](https://codecov.io/gh/pydicom/pydicom)
[![Python version](https://img.shields.io/pypi/pyversions/pydicom.svg)](https://img.shields.io/pypi/pyversions/pydicom.svg)
[![PyPI version](https://badge.fury.io/py/pydicom.svg)](https://badge.fury.io/py/pydicom)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.6394735.svg)](https://doi.org/10.5281/zenodo.6394735)

# *pydicom*

*pydicom* is a pure Python package for working with [DICOM](https://www.dicomstandard.org/) 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](http://www.numpy.org).

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](https://github.com/pydicom) are based on *pydicom* 
and provide support for other aspects of DICOM, and for more 
specific applications.

Examples are [pynetdicom](https://github.com/pydicom/pynetdicom), which 
is a Python library for DICOM networking, and [deid](https://github.com/pydicom/deid),
which supports the anonymization of DICOM files.


## Installation

Using [pip](https://pip.pypa.io/en/stable/):
```
pip install pydicom
```
Using [conda](https://docs.conda.io/en/latest/):
```
conda install -c conda-forge pydicom
```

For more information, including installation instructions for the development version, see the [installation guide](https://pydicom.github.io/pydicom/stable/tutorials/installation.html).


## Documentation

The *pydicom* [user guide](https://pydicom.github.io/pydicom/stable/old/pydicom_user_guide.html), [tutorials](https://pydicom.github.io/pydicom/stable/tutorials/index.html), [examples](https://pydicom.github.io/pydicom/stable/auto_examples/index.html) and [API reference](https://pydicom.github.io/pydicom/stable/reference/index.html) documentation is available for both the [current release](https://pydicom.github.io/pydicom/stable) and the [development version](https://pydicom.github.io/pydicom/dev) on GitHub Pages.

## *Pixel Data*

Compressed and uncompressed *Pixel Data* is always available to
be read, changed and written as [bytes](https://docs.python.org/3/library/stdtypes.html#bytes-objects):
```python
>>> 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](http://www.numpy.org) is installed, *Pixel Data* can be converted to an [ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html) using the [Dataset.pixel_array](https://pydicom.github.io/pydicom/stable/reference/generated/pydicom.dataset.Dataset.html#pydicom.dataset.Dataset.pixel_array) property:

```python
>>> 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)
```
### Compressed *Pixel Data*
#### JPEG, JPEG-LS and JPEG 2000
Converting JPEG 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](https://pydicom.github.io/pydicom/stable/old/image_data_handlers.html#guide-compressed).

Compressing data into one of the JPEG formats is not currently supported.

#### RLE
Encoding and decoding RLE *Pixel Data* only requires NumPy, however it can
be quite slow. You may want to consider [installing one or more additional
Python libraries](https://pydicom.github.io/pydicom/stable/old/image_data_compression.html) to speed up the process.

## Examples
More [examples](https://pydicom.github.io/pydicom/stable/auto_examples/index.html) are available in the documentation.

**Change a patient's ID**
```python
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](http://www.numpy.org) and [matplotlib](https://matplotlib.org/)
```python
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](https://github.com/pydicom/pydicom/blob/master/CONTRIBUTING.md).

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](https://www.github.com/pydicom/contrib-pydicom).


            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "pydicom",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "",
    "keywords": "dicom, python, medical, imaging",
    "author": "",
    "author_email": "Darcy Mason and contributors <darcymason@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/25/98/0b530df4b0129f5651a006534168769a507e50c92657a22fb3e26bd2b0cf/pydicom-2.4.4.tar.gz",
    "platform": null,
    "description": "[![unit-tests](https://github.com/pydicom/pydicom/workflows/unit-tests/badge.svg)](https://github.com/pydicom/pydicom/actions?query=workflow%3Aunit-tests)\n[![type-hints](https://github.com/pydicom/pydicom/workflows/type-hints/badge.svg)](https://github.com/pydicom/pydicom/actions?query=workflow%3Atype-hints)\n[![doc-build](https://circleci.com/gh/pydicom/pydicom/tree/master.svg?style=shield)](https://circleci.com/gh/pydicom/pydicom/tree/master)\n[![test-coverage](https://codecov.io/gh/pydicom/pydicom/branch/master/graph/badge.svg)](https://codecov.io/gh/pydicom/pydicom)\n[![Python version](https://img.shields.io/pypi/pyversions/pydicom.svg)](https://img.shields.io/pypi/pyversions/pydicom.svg)\n[![PyPI version](https://badge.fury.io/py/pydicom.svg)](https://badge.fury.io/py/pydicom)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.6394735.svg)](https://doi.org/10.5281/zenodo.6394735)\n\n# *pydicom*\n\n*pydicom* is a pure Python package for working with [DICOM](https://www.dicomstandard.org/) files.\nIt lets you read, modify and write DICOM data in an easy \"pythonic\" way. As a pure Python package,\n*pydicom* can run anywhere Python runs without any other requirements, although if you're working \nwith *Pixel Data* then we recommend you also install [NumPy](http://www.numpy.org).\n\nNote that *pydicom* is a general-purpose DICOM framework concerned with \nreading and writing DICOM datasets. In order to keep the \nproject manageable, it does not handle the specifics of individual SOP classes\nor other aspects of DICOM. Other libraries both inside and outside the\n[pydicom organization](https://github.com/pydicom) are based on *pydicom* \nand provide support for other aspects of DICOM, and for more \nspecific applications.\n\nExamples are [pynetdicom](https://github.com/pydicom/pynetdicom), which \nis a Python library for DICOM networking, and [deid](https://github.com/pydicom/deid),\nwhich supports the anonymization of DICOM files.\n\n\n## Installation\n\nUsing [pip](https://pip.pypa.io/en/stable/):\n```\npip install pydicom\n```\nUsing [conda](https://docs.conda.io/en/latest/):\n```\nconda install -c conda-forge pydicom\n```\n\nFor more information, including installation instructions for the development version, see the [installation guide](https://pydicom.github.io/pydicom/stable/tutorials/installation.html).\n\n\n## Documentation\n\nThe *pydicom* [user guide](https://pydicom.github.io/pydicom/stable/old/pydicom_user_guide.html), [tutorials](https://pydicom.github.io/pydicom/stable/tutorials/index.html), [examples](https://pydicom.github.io/pydicom/stable/auto_examples/index.html) and [API reference](https://pydicom.github.io/pydicom/stable/reference/index.html) documentation is available for both the [current release](https://pydicom.github.io/pydicom/stable) and the [development version](https://pydicom.github.io/pydicom/dev) on GitHub Pages.\n\n## *Pixel Data*\n\nCompressed and uncompressed *Pixel Data* is always available to\nbe read, changed and written as [bytes](https://docs.python.org/3/library/stdtypes.html#bytes-objects):\n```python\n>>> from pydicom import dcmread\n>>> from pydicom.data import get_testdata_file\n>>> path = get_testdata_file(\"CT_small.dcm\")\n>>> ds = dcmread(path)\n>>> type(ds.PixelData)\n<class 'bytes'>\n>>> len(ds.PixelData)\n32768\n>>> ds.PixelData[:2]\nb'\\xaf\\x00'\n\n```\n\nIf [NumPy](http://www.numpy.org) is installed, *Pixel Data* can be converted to an [ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html) using the [Dataset.pixel_array](https://pydicom.github.io/pydicom/stable/reference/generated/pydicom.dataset.Dataset.html#pydicom.dataset.Dataset.pixel_array) property:\n\n```python\n>>> arr = ds.pixel_array\n>>> arr.shape\n(128, 128)\n>>> arr\narray([[175, 180, 166, ..., 203, 207, 216],\n       [186, 183, 157, ..., 181, 190, 239],\n       [184, 180, 171, ..., 152, 164, 235],\n       ...,\n       [906, 910, 923, ..., 922, 929, 927],\n       [914, 954, 938, ..., 942, 925, 905],\n       [959, 955, 916, ..., 911, 904, 909]], dtype=int16)\n```\n### Compressed *Pixel Data*\n#### JPEG, JPEG-LS and JPEG 2000\nConverting JPEG 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](https://pydicom.github.io/pydicom/stable/old/image_data_handlers.html#guide-compressed).\n\nCompressing data into one of the JPEG formats is not currently supported.\n\n#### RLE\nEncoding and decoding RLE *Pixel Data* only requires NumPy, however it can\nbe quite slow. You may want to consider [installing one or more additional\nPython libraries](https://pydicom.github.io/pydicom/stable/old/image_data_compression.html) to speed up the process.\n\n## Examples\nMore [examples](https://pydicom.github.io/pydicom/stable/auto_examples/index.html) are available in the documentation.\n\n**Change a patient's ID**\n```python\nfrom pydicom import dcmread\n\nds = dcmread(\"/path/to/file.dcm\")\n# Edit the (0010,0020) 'Patient ID' element\nds.PatientID = \"12345678\"\nds.save_as(\"/path/to/file_updated.dcm\")\n```\n\n**Display the Pixel Data**\n\nWith [NumPy](http://www.numpy.org) and [matplotlib](https://matplotlib.org/)\n```python\nimport matplotlib.pyplot as plt\nfrom pydicom import dcmread\nfrom pydicom.data import get_testdata_file\n\n# The path to a pydicom test dataset\npath = get_testdata_file(\"CT_small.dcm\")\nds = dcmread(path)\n# `arr` is a numpy.ndarray\narr = ds.pixel_array\n\nplt.imshow(arr, cmap=\"gray\")\nplt.show()\n```\n\n## Contributing\n\nWe are all volunteers working on *pydicom* in our free time. As our \nresources are limited, we very much value your contributions, be it bug fixes, new \ncore features, or documentation improvements. For more information, please\nread our [contribution guide](https://github.com/pydicom/pydicom/blob/master/CONTRIBUTING.md).\n\nIf you have examples or extensions of *pydicom* that don't belong with the \ncore software, but that you deem useful to others, you can add them to our \ncontribution repository:\n[contrib-pydicom](https://www.github.com/pydicom/contrib-pydicom).\n\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "A pure Python package for reading and writing DICOM data",
    "version": "2.4.4",
    "project_urls": {
        "documentation": "https://pydicom.github.io/pydicom",
        "download": "https://github.com/pydicom/pydicom/archive/master.zip",
        "homepage": "https://github.com/pydicom/pydicom",
        "repository": "https://github.com/pydicom/pydicom"
    },
    "split_keywords": [
        "dicom",
        " python",
        " medical",
        " imaging"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "352a8c0f6fe243e6b6793868c6834203a44cc8f3f25abad780e1c7b21e15594d",
                "md5": "8ce0851e9e0e5132b56d9d4a0d896210",
                "sha256": "f9f8e19b78525be57aa6384484298833e4d06ac1d6226c79459131ddb0bd7c42"
            },
            "downloads": -1,
            "filename": "pydicom-2.4.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "8ce0851e9e0e5132b56d9d4a0d896210",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 1771279,
            "upload_time": "2023-12-14T21:44:27",
            "upload_time_iso_8601": "2023-12-14T21:44:27.232496Z",
            "url": "https://files.pythonhosted.org/packages/35/2a/8c0f6fe243e6b6793868c6834203a44cc8f3f25abad780e1c7b21e15594d/pydicom-2.4.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "25980b530df4b0129f5651a006534168769a507e50c92657a22fb3e26bd2b0cf",
                "md5": "580e71eda1658433c3675a7a5699b9d1",
                "sha256": "90b4801d851ce65be3df520e16bbfa3d6c767cf2a3a3b1c18f6780e6b670b87a"
            },
            "downloads": -1,
            "filename": "pydicom-2.4.4.tar.gz",
            "has_sig": false,
            "md5_digest": "580e71eda1658433c3675a7a5699b9d1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 2016625,
            "upload_time": "2023-12-14T21:44:29",
            "upload_time_iso_8601": "2023-12-14T21:44:29.896281Z",
            "url": "https://files.pythonhosted.org/packages/25/98/0b530df4b0129f5651a006534168769a507e50c92657a22fb3e26bd2b0cf/pydicom-2.4.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-12-14 21:44:29",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "pydicom",
    "github_project": "pydicom",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "circle": true,
    "lcname": "pydicom"
}
        
Elapsed time: 0.15513s