From Slicer Wiki
Jump to: navigation, search
Home < Documentation < 4.3 < Modules < DICOM

For the latest Slicer documentation, visit the read-the-docs.

Introduction and Acknowledgements

Author(s)/Contributor(s): Steve Pieper (Isomics Inc.), Michael Onken (Offis), Marco Nolden (DFKZ), Julien Finet (Kitware), Stephen Aylward (Kitware), Nicholas Herlambang (AZE)
Acknowledgements: This work is part of the National Alliance for Medical Image Computing (NA-MIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.
Contact: Steve Pieper, <email></email>
Isomics, Inc.  
National Alliance for Medical Image Computing (NA-MIC)  
Neuroimage Analysis Center (NAC)  
The Common Toolkit  

Module Description

  • A new DICOM infrastructure was put in place beginning with Slicer 4.0.
  • DICOM data is stored in a local data base, which is based on SQLite.
  • DICOM data can be imported from disk into this data base
  • DICOM data can be retrieved from a PACS system after proper configuration of Slicer.
  • DICOM data can be loaded into Slicer from the local database. A graphical user interface with display of thumbnails is available for data selection.
  • Plans for the near future, include support for storing data from slicer into the data base and uploading data from the data base into a PACS system.

Use Cases

DICOM module in use
DICOM Query dialog
DICOM Export dialog available from the context menu at the Study level of the DICOM tree (beta feature).

DICOM Concepts

DICOM is a widely used and sophisticated set of standards for digital radiology (see the References section for more information). Slicer provides support for a subset of DICOM functionality, with the particular features driven by the needs of clinical research.

DICOM Organization

To organize the data and avoid redundant calculations, Slicer keeps a DICOM Database of information about the DICOM data. You can have multiple databases on your computer at a time, and switch between them if, for example, they include data from different research projects. Each database is simply a directory on your local disk that has a few SQLite files and subdirectories to store image data. Don't manually modify the contents of these directories. DICOM data can enter the database either through manual import or via a DICOM network transfer. Modules may also populate the DICOM database with the results of computation.

By right clicking on a Patient, Study, or Series, you can delete the entry from the DICOM database. Note that to avoid accidental data loss, slicer does not delete the corresponding image data files.

By selecting a Study and right clicking to get a context menu, you can choose to Export data from Slicer into DICOM. The metadata from the select study will be automatically filled in to the Export dialog and you can select a Slicer volume to export. Note that you should exercise extreme caution when working with these files in clinical situations, since non-standard or incorrect DICOM files can interfere with clinical operations. You can also choose to encapsulate the current MRML scene (via an MRB file) inside a DICOM dataset, which will be treated as a DICOM Secondary Capture document (note that the export feature has not been widely tested and should be considered experimental).

DICOM Data on the File System

The basic steps are as follows:

  • Click the Import button in the DICOM Browser
  • Select the folder which contains the data
    • Optionally select the Copy option so that the files are copied into the database directory. Otherwise they will only be referenced in their original locaion.

Note that the DICOM standard does not specify how files will be organized on disk, so if you have DICOM data from a CDROM or otherwise transferred from a scanner, you cannot in general tell anything about the contents from the file or directory names. However once the data is imported to the database, it will be organized according the the DICOM standard Patient/Study/Series hierarchy.

DICOM Networking

DICOM is also a network communication standard. Slicer supports a DICOM Listener, DICOM Query/Retrieve interface, and a DICOM Send option. Note that in order to use these features, you must coordinate with the operators of the other DICOM nodes with which you wish to communicate. For example, you must work out agreement on such topics as network ports and application entity titles (AE Titles). Be aware that not all equipment supports all networking options, so configuration may be challenging and is often difficult to troubleshoot.

Connection Ports

Port 104 is the standard DICOM port. All ports below 1024 require root access on unix-like systems (Linux and Mac). So you can run slicer with the sudo command to be able to open the port for the DICOM Listener. Or you can use a different port, like 11112. You need to configure that on both sides of the connection. You can only have one process at a time listening on a port so if you have a listener running the second one won't start up. Also if something adverse happens (a crash) the port may be kept open an you need to either kill the storescp helper process (or just reboot the computer) to free the port. Consult the Error Log for diagnostic information.

DICOM Loading and Plugins

A main function of the DICOM module is to map from acquisition data organization into volume representation. That is, DICOM files typically describe attributes of the image capture, like the sequence of locations of the table during CT acquisition, while Slicer operates on image volumes of regularly spaced pixels. If, for example, the speed of the table motion is not consistent during an acquisition (which can be the case for some contrast 'bolus chasing' scans, Slicer's DICOM module will warn the user that the acquisition geometry is not consistent and the user should use caution when interpreting analysis results such as measurements.

From a developer perspective, the DICOM module exposes a plug-in architecture that allows acquisition-specific and modality-specific interpretation of DICOM data. From a user perspective this means that often Slicer will be able to suggest multiple ways of interpreting the data (such as reading DICOM files as a Diffusion dataset or as a scalar volume. When it is computable by examining the files, the DICOM module will select the most likely interpretation option by default. As of this release, standard plugins include scalar volumes and diffusion volumes, while extensions are available for segmentation objects, RT data, and PET/CT data. More plugins are expected for future versions. It is a long-term objective to be able to represent most if not all Slicer's data in the corresponding DICOM data objects as the standard evolves to support them.




     * ': 
       ** ': 
        *** ': 

Similar modules

  • Loading Data Can read scalar volume DICOM data, bypassing the database.
  • Reporting Extension reads and write DICOM Segmentation Objects (label maps).
  • SlicerRT reads and write DICOM Radiation Therapy Objects and provides tools for processing them.
  • LongitudinalPETCT reads all PET/CT studies for a selected patient and provides tools for tracking metabolic activity detected by PET tracers.


See the CTK web site for more information on the internals of the DICOM implementation. This tool uses the DCMTK DICOM library.

Useful links

Information for Developers

DICOM module architecture.

The overall DICOM Implementation in 3D Slicer consists of two main bodies of code embedded within the application. CTK code is responsible for the implementation of the DICOM database and networking layer. The CTK code is implemented C++ and follows the Qt style. The DICOM Module exposes this functionality to slicer users, and provides hooks through which other module can register DICOM Plugins to handle the conversion of specific DICOM data objects into the corresponding MRML representation. Once the data is in slicer, it can be operated on via the standard slicer mechanisms.

Setting DICOM log level

The DICOM log level can be set from python doing as the following example:

>>> import ctk
>>> ctk.ctk.dicomLogLevel()
>>> ctk.ctk.dicomLogLevelAsString()
>>> ctk.ctkErrorLogLevel.logLevelAsString(ctk.ctk.dicomLogLevel())
>>> ctk.ctkErrorLogLevel.logLevelAsString(32)
>>> ctk.ctk.setDICOMLogLevel(64)
>>> ctk.ctk.dicomLogLevelAsString()