Computing Resources

DICOM Utilities

Johns Hopkins, MR Research and 

Kennedy Krieger Institute, F.M. Kirby Research Center

Table of Contents

Local tools

dicom3tools - toolkit from David Clunie

dcmtk - toolkit from OFFIS

CTN - software package from RSNA/Mallinckrodt Institute

Local tools

dcm_move, dcm_movegui Rename and move DICOM files
send_dicom Send DICOM images to DICOM server
dcmls List DICOM files with selected header info
dcminfo Show selected DICOM header inof for one or more files
dcm2par Convert Enhanced-MR DICOM to Philips PAR/REC
dicomeread.m MATLAB script to read enhanced MR format DICOM files
† supports Enhanced MR DICOM files

dcm_move or dcm_movegui - Rename and move DICOM image files

Usage: dcm_move [-s <source-dir>] [-R] [-m modality] [-a] [-d] [-l] [-f|-r|-c] [-n] [-i] [<destdir>]

dcm_move [-s <source-dir>] [-R] [-m modality] -u [<destdir>]


dcm_move will read DICOM imagesthen rename and move them based on the stored study number, acquisition number, slice number and possibly dynamic, echo or phase number. There are command line switches to control the source and destination of the image files, and the format of renaming. dcm_movegui has the same features as dcm_move but they are accessed through the graphic user interface shown to the right. There is a direct correspondence between the fields of the GUI and the command-line switches.


Command-line switches:

Input Switches  
-s <source­dir> dicom source directory, default: present working directory
-R recurse into all sub-directories of source-dir, default: source dir only
-a process all source files found, default: prompt for each study
-m <modality> check only the named DICOM modality sub-dir, default is all (MR CT US USMF CR NM SC)
Output Switches  
-c copy files leaving originals, default: move to another dir
-r rename in place (implies flat names -f), default: move to another dir
<destdir> is the writable & searchable destination directory, default is present working directory
-i no info file created
-l ignore location in header, default: move to location in header if found
-f  flat names mode, default: hierarchical
-u unmove - use SOP Instance UID for names
-d add .dcm to output filenames, useful for some Windows apps
-n no echo/phase/dynamic breakdown

Images are renamed according to the study, series and slice number found in the dicom header.  If images are Philips dynamic images, they are renamed according to the study, series, slice and dynamic number.  If images are GE cardiac multiphase images, they are renamed according to study, series, slice and phase number.  If a file has an invalid dicom header it is moved to a directory named "bad". The program dcm_dump_file from the CTN package is used to read Dicom header information.

Hierarchical or Flat: switch -f

Without the flat switch images are stored in a hierarchy of directories and files, named from top, using a directory with the study number, then directory with series number, then a file with the slice number. If the study has multiple dynamics (echoes or phases) the slice number and dynamic (echo or phase) number will be used in the file name.

No Dynamic: switch -n

When -n is specified, series with multiple dynamics or phases (time points) are treated like anatomic series. The images are numbered using the image number provided in the Dicom header. It increments through time points for each slice (i.e. first all time points for slice 1, then all time points for slice 2, etc.). The highest image number is number of slices * number of time points.

hierarchical (no -f ) for an anatomic series (i.e. no dynamics/multiphase):

hierarchical (no -f ) for a dynamic/multiphase series and -n is not specified:
  • images are stored in the destination directory
  • in a directory named using the exam number
  • in a directory named using the 3 digit series number
  • in a file using <3 digit slice>.<4 digit dynamic number>
  • example: /g1/smith/subj1/17543/002/001.0124
  • flat (-f) for anatomic series: flat (-f) for dynamic/multiphase series and -n is not specified:

    Patient History Field: switch -l

    If the Patient History field in the header contains #-#<directory> and <directory> exists and is writable and searchable the images will be moved to that <directory> rather than the one named on the command line (or the default). Use -l on the command line to ignore this stored tag.

    Info File: switch -i

    Without -i, a file named "info" is created in each series directory containing some identifying information about the study, patient and series. Use the -i command line switch to suppress creation of this file. PHI/HIPAA Warning: the info file may contain the patient's name or other private information.


    Do not run dcm_move while images are being transferred. Wait until dicom transfer from the scanner is complete. dcm_move will probably move an incompletely transferred image and cause the simple_storage or other DICOM server to crash.


    Zip Archive

    send_dicom - Send images to a DICOM server

    Usage: send_dicom [-d <max-delay>] [-a <local AET>] [-c destination] [-p port] [-r <remote AE Title>] <dicom file>...

    -d Max delay, default is 0.5 second.
    -a Local host's AE title, default is godzilla2.
    -c Remote host name or IP address of destination, default MR1.
    -p Remote dicom port, default 3010.
    -r Remote host's dicom AE title, default MR1.
    <dicom file> One or more DICOM images to send

    This script will send the specified DICOM images to a DICOM server. The local AE Title is usedin the DICOM association. The remote system's AE Title, port and host name or IP address must be specified.

    If multiple images are beiing sent a delay is used between each send to try to prevent transfer errors.. The delay starts at 0 and increases by 0.1 sec each time an error occurs up to the max-delay. Failed transfers will be retired 3 times. At the end of all transfers the script will list how many images were successful and failed.

    Links to this script with the names of our local scanners allow transfer to these systems without supplying the AE Titles, destination port and name or address.

    The script will use either CTN send_image for standard DICOM files or DCMtk storescu for enhanced DICOM images. Do not mix standard and enhanced files in one command since this detection is done only once.

    Zip File


    Usage: dcmls <file path>

    dcmls acts much like the Unix "ls -lR" command, listing files recursively in long format with permissions, owner, group, size, access date and name. If the file is DICOM format, it also lists a selection of DICOM header fields: SeriesDate, SeriesTime, StudyDescription, SeriesDescription, PatientName, PatientID, ProtocolName, SeriesNumber and PerformedProceduresStepDescription.

    Perl Script


    Usage: dcminfo [-r] [-t tag] [-w <width>] [-f] dicom-file [dicom-file...]

    dcminfo -l [-k] dicom-file

    dcminfo -a dicom-file

    First form will list selected dicom tags for one or more dicom files. If multiple files are specified, the tags with the same value for all files are listed first, then tags which are different in one or more files are listed in a table.

    Additional tags can be added to the pre-defined list (see below). The selected files can optionally be renamed using their series number.


    rename scanned dicom files using series number

    -t additional tags to display - use colon separated names from dcminfo -l
    -w maximum width of displayed data table - default 200
    full dicom read - without this switch only the first 20k bytes of the dicom file is read. Most parameters of interest are in this part and the time to read is greatly decreased.

    Second form lists all dicom fields names for one file sorted by the numeric tag. Adding -k will sort by the key name. Either the key name or numeric tag can be used with -t in first form. For numeric tags specify tow four digit number separated by comma (e.g. 0008,0031).

    -l list all dicom tags in the dicom-file
    -k sort by key name rather than by numeric tag

    Third form will list all fields from one file in a cleaner format than provided by dcmdump. Field name is first, indented 2 spaces for each sequence or item key. Private field name are preceeded by dot . to make it clear they are vendor private fields. The field nasme is followed by 2 colons to make parsing easy, followed by the value in the original format used by dcmdump. Strings are surrounded by square barckets [], sequence and item delimiters are surrounded by braces (), integer and floats are bare, array elements are separated by backslash \. For long items like Pixel Data, the first few elements are shown with ... at then end to indicate the value is truncated.


    list all dicom elements for one file

    Pre-defined tags for the first form are:

    You can create a ~/.dcminforc file with a set of preferred tags that will override the default pre-defined tags listed above. You can also override the default table width. File format:

    Tags <tag1> <tag2> <tag3> ...
    MaxWidth <number>
    Perl Script


    Usage: dcm2par <dicom-file> [<dicom-file>...]

    dcm2par is a Perl script that will convert one or more Enhanced-MR DICOM files to Philips proprietary PAR/REC format. This should be used when legacy software requires PAR/REC input files but data is only available in DICOM format. If used on godzilla, delete the converted PAR/REC after processing is finished - do not keep duplicate data online.

    The Perl script can be used on Windows, Mac or Linux systems. It requires the Math::Trig and Math::Matrix Perl packages. It also requires the dcmdump program from the DCMTK toolkit. The toolkit is available as pre-compiled binaries from Offis e.V..

    The script has been tested using a variety of acquisitions, mostly brain scans, including various anatomical protocols, diffusion, ASL, BOLD fMRI, B0 mapping, B1 mapping, Dixon scans and a few angio protocols. In most cases the converted PAR file is identical to a PAR file generated on the scanner. There are several minor differences in some cases including:

    Perl Script


      dicomeread  Read enhanced-MR DICOM file with correct order & dimensions
       [imag, info] = dicomeread(file_in)
       [imag, info] = dicomeread(file_in, 'Noscale')
       [imag, info] = dicomeread(file_in, 'Order', [1 2 3 4])
       [imag, info] = dicomeread(file_in, 'Combine', [0 0 0 1])
       imag is a n-dimensional image
       info is the structure returned by dicominfo containing DICOM metadata
       Uses the Frame Content Sequence, Dimension Index Values to read in 
       Enhanced-MR DICOM images with correct dimensions.
       - Adds field MatlabNames to the returned DICOM header containing the
         labels of the image dimensions. First 2 dimensions are labelled
         'Column' and 'Row'; other labels come from the DICOM Dimension 
         Description Label field.
       - Adds field MatlabIndexes to the returned DICOM header containing
         the labels of the indexes of each dimension. First 2 dimensions are
         excluded. Other indexes come from the DICOM field pointed to by the 
         FunctionalGroupPointer and DimensionIndexPointer. For diffusion scans
         the indexes are the b-value and directions, for ASL the
         labeled/unlabelled tag. 
       - Adds field MatlabItems to the returned DICOM header containing the
         PerFrameFunctionalGroup item index for each image. For example to
         access info for slice 9, echo 2, dynamic 7 of a multi-slice, multi-echo,
         multi-volume scan:
          items = fieldnames(info.PerFrameFunctionalGroupsSequence);
          h = info.PerFrameFunctionalGroupsSequence.(item(info.MatlabItems(9,2,7)))
       - Handles diffusion and other scans with incomplete matricies by
         combining dimensions E.g. b-value and gradient orientation in case of
         diffusion, scanning sequence and image type in case of B1 maps.
       - Order property: reorder image dimensions. Arg can be cell string of
         DICOM dimension names, a row of dimension numbers or 'Prompt' to set
       - Combine property: combine dimensions to reduce dimensionality. Arg is
         a row with 0's and 1's, a dimension with 1 is combined with dimension
         to the left. Combine is done after re-order.
       - Noscale Property: don't apply scale slope and intercept to data.
    Zip file with script and dictionary


    ancpCopy ACR-NEMA file
    ancreateCreate dicom file
    andumpDescribe ACR-NEMA file content
    antodcConvert ACR-NEMA to DICOM
    dcacqmapCreate visual map of acquisition pattern
    dcarithArithmetic on DICOM pixels
    dcbriggsCreate DICOM Briggs pattern
    dccpCopy DICOM file
    dcdictExtract dictionary elements
    dcdirdmpDescribe DICOMDIR content
    dcdirmkCreate DICOMDIR
    dcdispDisplay file on X window
    dcdtchgChange UIDs consistently
    dcdumpDescribe DICOM file content
    dcencapEncapsulate compressed stream in a DICOM file
    dcfileDescribe DICOM file content
    dchistDICOM image statistics
    dcintroIntroduction and options
    dciodvfyDescribe DICOM objects
    dckeyExtract attribute values
    dclutdmpdump LUT contents
    dcmergeMerge DICOM files
    dcmkpresCreate DICOM presentation state
    dcmultiMake multiframe image from single frames
    dcpatmplApply patient and study template
    dcposnDICOM locate position
    dcrmmetaRemove meta information header
    dcsmpteCreate DICOM SMPTE pattern
    dcsortMake sorted list of images
    dcsqextrExtract Papyrus images
    dcstatsDICOM image statistics
    dctableMake tables of attribute values
    dctopdfExtract DICOM encapsulated PDF
    dctopgxDICOM image to PGX file
    dctopnmDICOM image to PNM file
    dctorawDICOM image to raw file
    dcuidchgChange UIDs consistently
    dcuncatSplit multiframe image into concatenation
    dcunmetaRemove DICOM Metaheader
    gawdumpGE Advantage Windows to DICOM
    gawtodcGE Advantage Windows to DICOM
    ge98idGE 9800 dump identifiers
    ge98topgmGE 9800 image to PGM file
    gendumpGenesis dump contents
    gentodcGenesis to DICOM
    gentopgmGenesis ximg file to PGM file
    himrdumphimr dump contents
    himrtodchimr to DICOM
    imtndumpImatron dump contents
    imtntodcImatron to DICOM
    pacedumpGE PACE dump contents
    pacetodcGE PACE to DICOM
    pacetopgmGE Pace image to PGM file
    paceunidpaceunid (1) - PACE remove identification
    pbmtoovlCreate DICOM Overlay from PBM file
    pdftodcEncapsulate PDF in DICOM
    pgxtodcCreate DICOM from PGX file
    pnmtodcCreate DICOM from PNM file
    pqdumppq dump contents
    pqtodcpq to DICOM
    rawftodcCreate DICOM from raw float file
    rawnjl2JPEG-LS compress/decompress from raw file
    rawtodcCreate DICOM from raw file
    sgndumpSigna dump contents
    sgntodcSigna to DICOM
    shimdumpImatron dump contents
    shimtodcImatron to DICOM
    sompdumpsomp dump contents
    somptodcsomp to DICOM
    syttopgmGE Sytec image to PGM file
    toshtodcConvert separate Toshiba ACR-NEMA header and raw pixel data files to DICOM
    vsntopgmVision image to PGM file


    dcm2pnmConvert DICOM images to PPM/PGM, PNG, TIFF or BMP
    dcm2xmlConvert DICOM file and data set to XML
    dcmcjpegEncode DICOM file to JPEG transfer syntax
    dcmconvConvert DICOM file encoding
    dcmcrleEncode DICOM file to RLE transfer syntax
    dcmdjpegDecode JPEG-compressed DICOM file
    dcmdrleDecode RLE-compressed DICOM file
    dcmdspfnExport standard display curves to a text file
    dcmdumpDump DICOM file and data set
    private.dic Private DICOM dictionary locally with added Philips fields
    dcmftestTest if file uses DICOM part 10 format
    dcmgpdirCreate a general purpose DICOMDIR
    dcmj2pnmConvert DICOM images to PGM, PPM, BMP, TIFF or JPEG
    dcmmkcrvAdd 2D curve data to image
    dcmmkdirCreate a DICOMDIR file
    dcmmklutCreate DICOM look-up tables
    dcmodifyModify DICOM files
    dcmp2pgmRead DICOM image and presentation state and render bitmap
    dcmprscpDICOM basic grayscale print management SCP
    dcmprscuPrint spooler for presentation state viewer
    dcmpschkChecking tool for presentation states
    dcmpsmkCreate DICOM grayscale softcopy presentation state
    dcmpsprtRead DICOM images and presentation states and render print job
    dcmpsrcvNetwork receive for presentation state viewer
    dcmpssndNetwork send for presentation state viewer
    dcmqridxRegister a DICOM image file in an image database index file
    dcmqrscpDICOM image archive (central test node)
    dcmqrtiThe Terminal Initiator Telnet Client Program
    dcmquantConvert DICOM color images to palette color
    dcmscaleScale DICOM images
    dcmsignSign and Verify DICOM Files
    dcod2lumConvert hardcopy characteristic curve file to softcopy format
    dconvlumConvert VeriLUM files to DCMTK display files
    dsr2htmlRender DICOM SR file and data set to HTML
    dsr2xmlConvert DICOM SR file and data set to XML
    dsrdumpDump DICOM SR file and data set
    dump2dcmConvert ASCII dump to DICOM file
    echoscuDICOM verification (C-ECHO) SCU
    findscuDICOM query (C-FIND) SCU
    movescuDICOM retrieve (C-MOVE) SCU
    pdf2dcmConvert PDF file to DICOM
    storescpDICOM storage (C-STORE) SCP
    storescuDICOM storage (C-STORE) SCU
    termscuDICOM termination SCU
    wlmscpfsDICOM Basic Worklist Management SCP (based on data files)
    xml2dcmConvert XML document to DICOM file or data set
    xml2dsrConvert DICOM SR file and data set to XML


    CTN Utility Programs

    dcm_dump_file Display contents of DICOM image header
    dcm_dump_element Display a DICOM image header element
    dcm_x_disp/dcm_w_disp Quick display of DICOM image
    dcm_move Rename and move DICOM image files
    dcm_count Count number of images in DICOM directory by series
    dcm_combine Combine multi NEX series into single series
    dcm_study Show study number of DICOM image
    send_image Send an image to a DICOM server
    simple_storage DICOM server daemon
    runDicom Daemon to keep simple_storage running
    Full Downloads All programs in gzipped tar file or zip file

    dcm_dump_file - Display contents of DICOM image header

    This program is part of the RSNA/Mallinckrodt Institute Central Test Node Software package.

    Usage: dcm_dump_file [-b] [-g] [-l] [-t] [-v] [-z] file [file ...]

    -b Input files are stored in big-endian byte order
    -e Exit on file open error.  Do not process other files
    -g Remove group length elements
    -l  Use (retired) length-to-end attribute for object length
    -t  Part 10 file
    -v Place DCM facility in verbose mode
    -z Perform format conversion (verification) on data in files


    One or more information objects to be dumped

    dcm_dump_element - Display a DICOM image header element

    This program is part of the RSNA/Mallinckrodt Institute Central Test Node Software package.

    Usage: dcm_dump_element [-b] [-t] [-v] group element filein fileout

    -b Read file assuming big endian transfer syntax
    -t Read file assuming DICOM Part 10 format
    -v Place DCM facility in verbose mode

    group element

    The tag of the element to be dumped
    filein fileout Input and output files

    dcm_x_disp / dcm_w_disp - Quick display of DICOM image

    This program is part of the RSNA/Mallinckrodt Institute Central Test Node Software package.

    Usage: dcm_x_disp [-b] [-t] [-w display_width -h display_height] [-W width] [-C center] <dicom image file>

    -b Read file assuming big endian transfer syntax
    -t Read file assuming DICOM Part 10 format

    simple_storage - DICOM server daemon

    This program is part of the RSNA/Mallinckrodt Institute Central Test Node Software package. It has been modified locally to have several additional features.

    Usage: simple_storage [-a] [-c title]  [-d FAC] [-i] [-j] [-k] [-l log-file][-m maxPDU] [-n naming] [-p] [-s] [-t trips] [-u uid] [-v] [-w] [-x dir] [-z sec] port

    -a Abort Association after receiving one image (debugging tool)
    -c Set the AE title of this server
    -d Place one facility (DCM, DUL, SRV) in verbose mode
    -f Fork a new process for each connection
    -i Ignore some incorrect parameters in Association request
    -j Use thread model.  Spawn a new thread for each connection
    -k Kill (delete) files immediately after they are received
    -l Log stdout and stderr to named log file (JHU addition)
    -m Set the maximum received PDU in the Association RP to maxPDU
    -n <naming> contains naming convention for files stored
    -p Dump the Association RQ parameters
    -s Silent mode.  Don't dump attributes of received images
    -t Execute the main loop trips times (debugging tool)
    -u Run as this alternate uid when not running as root (JHU addition)
    -v Place DUL and SRV facilities in verbose mode
    -w Wait flag.  Wait for 1 second in callback routines (debugging)
    -x Set base directory for image creation.  Default is current directory
    -z Wait for sec seconds before releasing association
    port The TCP/IP port number to use

    Image Storage Redirection (JHU addition)

    All images are stored in the directory named on the command line using the -x option or in the current working directory where simple_storage is started, if -x is not given. You can redirect images from this default directory using information given in certain DICOM header fields. Binaries: JHU Solaris2    unmodified Solaris2  NT

    runDicom - Daemon to keep simple_storage running

    Usage: runDicom [-help|-kill|-restart] [any simple_storage switches...]

    This program runs in the background. It starts a simple_storage daemon and waits for it to exit (or crash). It then starts another one, so simple_storage is always kept running.

    If command line switches are provided, they are used when starting simple_storage, unless the first switch is one of the following:
    -help  prints this message
    -kill kills runDicom and simple_storage
    -restart kills runDicom and simple_storage, then restarts both
    The kill and restart switches will work for any user if runDicom is owned by root and set uid user bit is set. Otherwise the currently running runDicom process must be owned by the user performing the kill or restart.

    If no command line switches for simple_storage are given on the command line, runDicom looks for the file /usr/local/sbin/runDicom.<hostname>, where <hostname> is the name returned by the gethostname system call.  That file must contain valid switches and switch parameters for simple_storage, one switch or parameter to a line. For example:

    If that file does not exist, the following switches are used for starting simple_storage:
    -l /tmp/simple_storage.log -s -f -c DICOM_STORAGE -u 0 3010
    runDicom logs starts and shutdowns of simple_storage in the file /tmp/simple_storage.log. This same file can be used for simple_storage
    log info using the switch "-l /tmp/simple_storage.log".

    Source & Binary: Solaris2

    Full Downloads

    All files described above for each platform in a single compressed file

    Solaris 2.x binaries and shell scripts in a gzipped tar file

    Windows NT binaries in a zip file CTN dynamic library

    Supported by NIH Grant P41 EB015909
    © 2017 Kennedy Krieger Institute. Baltimore, Maryland.
    All rights reserved.
    Contact by email