---
title: Exploring DICOM
date: 2024-07-17T19:57:49Z
modified: 2026-07-28T11:28:10Z
permalink: "https://www.micheledpierri.com/2024/07/17/exploring-dicom/"
type: post
status: publish
excerpt: ""
wpid: 120
categories:
  - Health Informatics
  - Programming
tags:
  - Health Informatics
  - Programming
  - Dicom
  - Medical Imaging
  - Python
featured_image: "https://www.micheledpierri.com/wp-content/uploads/2024/07/exploring_dicom_.png"
featured_image_alt: Early 20th-century physician using an optical device to examine an illuminated human skeleton in a vintage medical laboratory.
timestamp: 2026-07-28T11:28:10Z
---

DICOM stands for _Digital and Communications in Medicine_ and is used for managing medical data. One of the most common uses of this format is the storage, transfer, and display of diagnostic images like X-rays, CT scans, and MRIs.

While there are variations depending on the type of image and the manufacturer of the equipment that generated it, a DICOM file contains some common elements:

- HEADER: The initial part of the file contains metadata describing its content (patient identification, image acquisition modality, parameters for acquiring the images, equipment manufacturer, etc.).
- ATTRIBUTE GROUPS: The metadata in the header is organized into attribute groups containing a series of DICOM tags that provide specific information. For example, tag 0010,0010 specifies the patient’s name.
- TRANSFER SYNTAX: Specifies how the data is encoded and stored.
- IMAGE: Contains the pixels or voxels that make up the image, which may be compressed or uncompressed.
- TRAILER: Indicates the end of the DICOM file and may be absent.

The main attributes of a DICOM file include:

- PatientName: Patient’s name.
- PatientAge: Patient’s age.
- StudyDate: Date of the study.
- StudyDescription: Study description.
- Modality: Imaging modality used (e.g., CT, MR, X-ray, etc.).
- Manufacturer: Imaging equipment manufacturer.
- Rows: Number of rows in the image.
- Columns: Number of columns in the image.
- PixelData: Image pixel data.
- ImageOrientationPatient: Image orientation relative to the patient.
- ImagePositionPatient: Spatial position of the image relative to the patient.
- SliceThickness: Slice thickness in an imaging volume.
- PixelSpacing: Pixel spacing in the image.

When examining a DICOM file related to angiographic images, the modality will be XA. The study type attribute will specify whether it is coronary, cerebral, or another type of angiography. The sequence type attribute indicates the direction of the subsequent images (anteroposterior, lateral, oblique). The number of images in the sequence is usually indicated by the “NumberOfFrames” tag.

---

A very useful library for working with DICOM files in Python is pydicom. It is the one we will use for all work on DICOM files.

Before accessing it, you need to install it by running the following command in the terminal:

pip install pydicom
```
<span class="line"><span style="color: #88C0D0">pip</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">install</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">pydicom</span></span>
<span class="line"></span>
```

The following program reads the attributes of the DICOM (.dcm) file specified in the “dicom\_file\_path” variable.

import pydicom

def print_dicom_attributes(dicom_file):
    # Load the DICOM file
    ds = pydicom.dcmread(dicom_file)

    # Iterate over all data elements in the DICOM dataset
    for element in ds:
        # Extract the tag, name, and value of the DICOM attribute
        tag = element.tag
        name = element.name
                
        # Print the attribute information
        print(f"Tag: {tag}, Name: {name}")

if __name__ == "__main__":
    # Specify the path to the DICOM file
    dicom_file_path = "path/to/your/dicom/file.dcm"

    # Call the function to print DICOM attributes
    print_dicom_attributes(dicom_file_path)
```
<span class="line"><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> pydicom</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">def</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">print_dicom_attributes</span><span style="color: #F8F8F2">(</span><span style="color: #FFB86C; font-style: italic">dicom_file</span><span style="color: #F8F8F2">):</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># Load the DICOM file</span></span>
<span class="line"><span style="color: #F8F8F2">    ds </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> pydicom.dcmread(dicom_file)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># Iterate over all data elements in the DICOM dataset</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">for</span><span style="color: #F8F8F2"> element </span><span style="color: #FF79C6">in</span><span style="color: #F8F8F2"> ds:</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #6272A4"># Extract the tag, name, and value of the DICOM attribute</span></span>
<span class="line"><span style="color: #F8F8F2">        tag </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> element.tag</span></span>
<span class="line"><span style="color: #F8F8F2">        name </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> element.name</span></span>
<span class="line"><span style="color: #F8F8F2">                </span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #6272A4"># Print the attribute information</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #FF79C6">f</span><span style="color: #F1FA8C">"Tag: </span><span style="color: #BD93F9">{</span><span style="color: #F8F8F2">tag</span><span style="color: #BD93F9">}</span><span style="color: #F1FA8C">, Name: </span><span style="color: #BD93F9">{</span><span style="color: #F8F8F2">name</span><span style="color: #BD93F9">}</span><span style="color: #F1FA8C">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">if</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">__name__</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">==</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">__main__</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># Specify the path to the DICOM file</span></span>
<span class="line"><span style="color: #F8F8F2">    dicom_file_path </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">path/to/your/dicom/file.dcm</span><span style="color: #E9F284">"</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># Call the function to print DICOM attributes</span></span>
<span class="line"><span style="color: #F8F8F2">    print_dicom_attributes(dicom_file_path)</span></span>
<span class="line"></span>
```

The list of attributes obtained is often very long and not very useful.

We can limit the number of attributes to those we are interested in and read their contents. In the following program, we created a dictionary containing some specific attributes and read them:

import pydicom

def print_important_dicom_attributes(dicom_file):
    # Load the DICOM file
    ds = pydicom.dcmread(dicom_file)
    
    # Define a list of important tags to print
    important_tags = {
        "PatientName": "Patient's Name",
        "PatientID": "Patient's ID",
        "PatientBirthDate": "Patient's Birth Date",
        "PatientSex": "Patient's Sex",
        "StudyID": "Study ID",
        "StudyDate": "Study Date",
        "StudyTime": "Study Time",
        "SeriesNumber": "Series Number",
        "Modality": "Modality",
        "Rows": "Number of Rows in Image",
        "Columns": "Number of Columns in Image",
        "NumberOfFrame": "Number of Frames in Sequence 
        }

    # Iterate over the important tags and print their values
    for tag, description in important_tags.items():
        if tag in ds:
            value = ds.data_element(tag).value
            print(f"{description} ({tag}): {value}")
        else:
            print(f"{description} ({tag}): Not Available")

if __name__ == "__main__":
    # Specify the path to the DICOM file
    dicom_file_path = "path/to/your/dicom/file.dcm"

    # Call the function to print important DICOM attributes
    print_important_dicom_attributes(dicom_file_path)
```
<span class="line"><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> pydicom</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">def</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">print_important_dicom_attributes</span><span style="color: #F8F8F2">(</span><span style="color: #FFB86C; font-style: italic">dicom_file</span><span style="color: #F8F8F2">):</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># Load the DICOM file</span></span>
<span class="line"><span style="color: #F8F8F2">    ds </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> pydicom.dcmread(dicom_file)</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># Define a list of important tags to print</span></span>
<span class="line"><span style="color: #F8F8F2">    important_tags </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> {</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">PatientName</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Patient's Name</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">PatientID</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Patient's ID</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">PatientBirthDate</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Patient's Birth Date</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">PatientSex</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Patient's Sex</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">StudyID</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Study ID</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">StudyDate</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Study Date</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">StudyTime</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Study Time</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">SeriesNumber</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Series Number</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Modality</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Modality</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Rows</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Number of Rows in Image</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Columns</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Number of Columns in Image</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">NumberOfFrame</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Number of Frames in Sequence </span></span>
<span class="line"><span style="color: #F8F8F2">        }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># Iterate over the important tags and print their values</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">for</span><span style="color: #F8F8F2"> tag, description </span><span style="color: #FF79C6">in</span><span style="color: #F8F8F2"> important_tags.items():</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #FF79C6">if</span><span style="color: #F8F8F2"> tag </span><span style="color: #FF79C6">in</span><span style="color: #F8F8F2"> ds:</span></span>
<span class="line"><span style="color: #F8F8F2">            value </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> ds.data_element(tag).value</span></span>
<span class="line"><span style="color: #F8F8F2">            </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #FF79C6">f</span><span style="color: #F1FA8C">"</span><span style="color: #BD93F9">{</span><span style="color: #F8F8F2">description</span><span style="color: #BD93F9">}</span><span style="color: #F1FA8C"> (</span><span style="color: #BD93F9">{</span><span style="color: #F8F8F2">tag</span><span style="color: #BD93F9">}</span><span style="color: #F1FA8C">): </span><span style="color: #BD93F9">{</span><span style="color: #F8F8F2">value</span><span style="color: #BD93F9">}</span><span style="color: #F1FA8C">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #FF79C6">else</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">            </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #FF79C6">f</span><span style="color: #F1FA8C">"</span><span style="color: #BD93F9">{</span><span style="color: #F8F8F2">description</span><span style="color: #BD93F9">}</span><span style="color: #F1FA8C"> (</span><span style="color: #BD93F9">{</span><span style="color: #F8F8F2">tag</span><span style="color: #BD93F9">}</span><span style="color: #F1FA8C">): Not Available"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">if</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">__name__</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">==</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">__main__</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># Specify the path to the DICOM file</span></span>
<span class="line"><span style="color: #F8F8F2">    dicom_file_path </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">path/to/your/dicom/file.dcm</span><span style="color: #E9F284">"</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># Call the function to print important DICOM attributes</span></span>
<span class="line"><span style="color: #F8F8F2">    print_important_dicom_attributes(dicom_file_path)</span></span>
<span class="line"></span>
```

The output is as follows:

- Patient’s Name (PatientName): XXXXXX^XXXXXX
- Patient’s ID (PatientID): 000000000000000000
- Patient’s Birth Date (PatientBirthDate): 19000402
- Patient’s Sex (PatientSex): M
- Study ID (StudyID): 2020000
- Study Date (StudyDate): 20200000
- Study Time (StudyTime): 084611.000
- Series Number (SeriesNumber): 1
- Modality (Modality): XA
- Number of Rows in Image (Rows): 512
- Number of Columns in Image (Columns): 512
- Number of Frames in Sequence (NumberOfFrames): 86
 


In an upcoming article, we will delve into the part of the file containing [the image pixels](https://www.micheledpierri.com/wp-content/uploads/wp-mfa-exports/post/inside-dicom.md) to view and manage them.