Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/WebStart.php on line 134

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/LocalSettings.php on line 137

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/LocalSettings.php on line 139

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/LocalSettings.php on line 144

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/LocalSettings.php on line 145

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/LocalSettings.php on line 153

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/WebStart.php on line 150

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/WebStart.php on line 157

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/mediawiki/includes/WebStart.php:134) in /usr/local/www/mediawiki/includes/WebResponse.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/mediawiki/includes/WebStart.php:134) in /usr/local/www/mediawiki/includes/WebResponse.php on line 38

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/Skin.php on line 155

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: include(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/resourceloader/ResourceLoader.php on line 201

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007
DICOM - Just Solve the File Format Problem

DICOM

From Just Solve the File Format Problem
Jump to: navigation, search
File Format
Name DICOM
Ontology
Extension(s) .dcm, .dic, (none), others
MIME Type(s) application/dicom, image/dicom-rle
PRONOM fmt/574
Kaitai Struct Spec dicom.ksy
Released 1985

DICOM (Digital Imaging and Communications in Medicine) is far and away the most widely-used (and probably the oldest) electronic file format in medical imaging. Nearly every device that acquires medical images – ultrasound, CT, PET, and MRI – acquires DICOM images in normal operation. There's a 20-part specification detailing the file format and its ecosystem. The IANA has assigned TCP and UDP port 104 to DICOM-related traffic.

It's kind of a big deal.

However, as with any sufficiently-adopted standard, there are splinter factions. The most common format is 2-dimensional images or "slices" that can be formed into a 3-dimensional image; however, some manufacturers have extended the standard to save 3 or even 4-dimensional images in a "mosaic" format.

The earliest versions of the standard were known as ACR/NEMA, after the American College of Radiology and National Electrical Manufacturers Association.

Contents

Format

While there are many complications involved in decoding a DICOM file, fundamentally it is simply a sequence of data blocks called attributes or elements. Each attribute contains a 16-bit group number and a 16-bit element number, conventionally written in hexadecimal and separated with a comma, e.g. "(0028,0011)".

Standard attributes

If an attribute's group number is even, then it is a standard attribute defined in the DICOM specification, and the group and element number together uniquely identify the meaning of the attribute.

Private attributes

If the group number is odd, then it is a private attribute, and it will have been preceded by a special attribute supplying a "private creator" identification string. A private attribute is uniquely identified by the combination of its creator identifier, group number, and the low byte of its element number.

Some examples of creator identifiers are GEMS_IMAG_01 and Philips Imaging DD 001. An identifier is usually specific to a manufacturer of medical equipment, not to a particular medical device. Unfortunately, instead of having one specification per manufacturer, private attributes are usually only documented in device-specific "DICOM Conformance Statements", which list only the attributes used by that one device.

Examples of DICOM Conformance Statements (search the documents for "private creator"):

Compilations:

Types of DICOM files

Little-endian vs. big-endian

A DICOM file may use either little-endian or big-endian byte order for certain representations of numbers. Little-endian is more common.

Explicit VR vs. Implicit VR

A DICOM file may use either Explicit VR or Implicit VR format. VR stands for Value Representation.

Explicit VR means that each attribute has its data type stored in the file.

Implicit VR means that the attribute types are not stored in the file. The decoder will have to use a data dictionary of its own to figure them out.

With header vs. Without header

When stored on disk, DICOM files are supposed to begin with a header, though not all of them do. Files with a header are sometimes called Part 10 files.

When a header is present, the file begins with a 128-byte preamble that is usually set to all zero bytes, but which may be used for application-specific purposes. The next 4 bytes are the ASCII signature "DICM". Following the signature is a set of "Group 2" attributes, in little-endian, explicit-VR format. After the Group 2 attributes is the main part of the file, using the format given by the Transfer Syntax UID (0002,0010) attribute. ("Transfer Syntax" is the DICOM term for "file format".)

Files without a header usually use Implicit VR, little-endian format.

Modality

One of the most important attributes in a DICOM file is Modality (0008,0060). It indicates the type of data stored in the file, and often corresponds to the type of machine that created the file. For example, a modality of "MR" means MRI, and "US" means ultrasound. Different modalities have different required attributes, and may have different conventions for how to display images contained in the file, etc.

Identifiers

The most common filename extension is .dcm. Not all DICOM files have a filename extension.

Identification

DICOM files with a header have the ASCII signature "DICM" at byte offset 128.

Files without a header cannot be readily identified, though many begin with bytes 08 00 ?? 00.

Image formats

If a DICOM file contains image data, it contains either a single image, or a video clip (usually composed of multiple still images all having the same size and color format). There is an extension called Papyrus that can store multiple different images in a single file.

The image format is determined by attribute (0002,0010): Transfer Syntax UID. If there is no such attribute, the image is uncompressed. Defined formats include:

Specifications

Software

Software that reads DICOM files is pretty much everywhere. Most neuroimaging analysis packages have some way of importing DICOMs and turning them in to a higher-dimensional file; open-source stand-alone libraries abound, as well.

Sample files

Links

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox

Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/mediawiki/includes/WebStart.php:134) in /usr/local/www/mediawiki/includes/WebResponse.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/mediawiki/includes/WebStart.php:134) in /usr/local/www/mediawiki/includes/WebResponse.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/mediawiki/includes/WebStart.php:134) in /usr/local/www/mediawiki/includes/WebResponse.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/mediawiki/includes/WebStart.php:134) in /usr/local/www/mediawiki/includes/WebResponse.php on line 38

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007