{"id":13477168,"url":"https://github.com/pydicom/pydicom","last_synced_at":"2025-05-11T05:45:03.871Z","repository":{"id":37432461,"uuid":"14006067","full_name":"pydicom/pydicom","owner":"pydicom","description":"Read, modify and write DICOM files with python code","archived":false,"fork":false,"pushed_at":"2025-05-05T17:52:41.000Z","size":124799,"stargazers_count":2002,"open_issues_count":18,"forks_count":500,"subscribers_count":64,"default_branch":"main","last_synced_at":"2025-05-11T05:44:56.112Z","etag":null,"topics":["dicom","pydicom","python"],"latest_commit_sha":null,"homepage":"https://pydicom.github.io/pydicom/dev","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pydicom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"darcymason"}},"created_at":"2013-10-31T02:58:52.000Z","updated_at":"2025-05-08T09:04:38.000Z","dependencies_parsed_at":"2024-01-16T01:02:53.258Z","dependency_job_id":"db0ab73e-7f0e-4f4e-900e-c0607ce15a59","html_url":"https://github.com/pydicom/pydicom","commit_stats":{"total_commits":1567,"total_committers":98,"mean_commits":"15.989795918367347","dds":0.7377153797064455,"last_synced_commit":"0f6efd63fbce278dccfae1744675782a57898caa"},"previous_names":["darcymason/pydicom"],"tags_count":47,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydicom%2Fpydicom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydicom%2Fpydicom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydicom%2Fpydicom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydicom%2Fpydicom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pydicom","download_url":"https://codeload.github.com/pydicom/pydicom/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253523717,"owners_count":21921818,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dicom","pydicom","python"],"created_at":"2024-07-31T16:01:38.986Z","updated_at":"2025-05-11T05:45:03.853Z","avatar_url":"https://github.com/pydicom.png","language":"Python","funding_links":["https://github.com/sponsors/darcymason"],"categories":["Python","DICOM","Libraries","Tools and Software","Data Standards \u0026 Interoperability"],"sub_categories":["Tools","Open Source","DICOM \u0026 Medical Imaging","Python"],"readme":"[![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/main.svg?style=shield)](https://circleci.com/gh/pydicom/pydicom/tree/main)\n[![test-coverage](https://codecov.io/gh/pydicom/pydicom/branch/main/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.8034250.svg)](https://doi.org/10.5281/zenodo.8034250)\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](https://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/guides/user/index.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\u003e\u003e\u003e from pydicom import dcmread\n\u003e\u003e\u003e from pydicom.data import get_testdata_file\n\u003e\u003e\u003e path = get_testdata_file(\"CT_small.dcm\")\n\u003e\u003e\u003e ds = dcmread(path)\n\u003e\u003e\u003e type(ds.PixelData)\n\u003cclass 'bytes'\u003e\n\u003e\u003e\u003e len(ds.PixelData)\n32768\n\u003e\u003e\u003e ds.PixelData[:2]\nb'\\xaf\\x00'\n\n```\n\nIf [NumPy](https://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\u003e\u003e\u003e arr = ds.pixel_array\n\u003e\u003e\u003e arr.shape\n(128, 128)\n\u003e\u003e\u003e 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### Decompressing *Pixel Data*\n#### JPEG, JPEG-LS and JPEG 2000\nConverting 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](https://pydicom.github.io/pydicom/stable/guides/user/image_data_handlers.html#guide-compressed).\n\n#### RLE\nDecompressing 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/guides/user/image_data_compression.html) to speed up the process.\n\n### Compressing *Pixel Data*\nInformation on compressing *Pixel Data* using one of the below formats can be found in the corresponding [encoding guides](https://pydicom.github.io/pydicom/stable/guides/encoding/index.html). These guides cover the specific requirements for each encoding method and we recommend you be familiar with them when performing image compression.\n\n#### JPEG-LS, JPEG 2000\nCompressing image data from an ``ndarray`` or ``bytes`` object to JPEG-LS or JPEG 2000 requires installing the following:\n\n* JPEG-LS requires [pyjpegls](https://github.com/pydicom/pyjpegls)\n* JPEG 2000 requires [pylibjpeg](https://github.com/pydicom/pylibjpeg) and the [pylibjpeg-openjpeg](https://github.com/pydicom/pylibjpeg-openjpeg) plugin\n\n#### RLE\nCompressing using RLE requires no additional packages but can be quite slow. It can be sped up by installing [pylibjpeg](https://github.com/pydicom/pylibjpeg) with the [pylibjpeg-rle](https://github.com/pydicom/pylibjpeg-rle) plugin, or [gdcm](https://github.com/tfmoraes/python-gdcm).\n\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](https://numpy.org) and [matplotlib](https://matplotlib.org/)\n```python\nimport matplotlib.pyplot as plt\nfrom pydicom import dcmread, examples\n\n# The path to the example \"ct\" dataset included with pydicom\npath: \"pathlib.Path\" = examples.get_path(\"ct\")\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/main/CONTRIBUTING.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpydicom%2Fpydicom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpydicom%2Fpydicom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpydicom%2Fpydicom/lists"}