DICOM for VTK

The vtk-dicom project started in 2012 in response to the need for DICOM readers and writers for VTK that:

  • Provide easy access to all of the per-slice DICOM meta data
  • Generate VTK data sets with complete geometric fidelity

This was achieved through the creation of three core C++ classes: a vtkDICOMReader, a vtkDICOMWriter, and a vtkDICOMMetaData class that provides full access to the meta data. The meta data and the DICOM dictionaries (standard and private) are stored in hash tables for efficient access.

Feature Table

DICOM Feature Read Write
Secondary Capture Yes Yes
Enhanced Secondary Capture Yes Soon
Parametric Maps (float, double) Yes Soon
MR Yes Yes
Enhanced MR Yes Soon
CT Yes Yes
Enhanced CT Yes Soon
PET Yes No
Enhanced PET Yes No
Ultrasound Yes No
Radiography Yes No
Nuclear Medicine Yes No
Radiotherapy Partial No
Multi-Frame Yes Yes
CINE Yes Yes
Cardiac Yes Yes
Orientation/Position Yes Yes
Lookup Tables Yes Soon
Overlays Yes Yes
--- --- ---
DICOM 2017c Dictionary Yes Yes
Private Dictionaries Yes Yes
--- --- ---
DICOMDIR Yes No
RLE Compression Yes Yes
JPEG Compression Via GDCM/DCMTK No
JPEG-LS Compression Via GDCM/DCMTK No
JPEG 2000 Via GDCM No
ISO-8859 Character Sets (1,2,3,4,5,6,7,8,9,11) Yes Yes
JIS X 0201 (Japanese) Yes Yes
JIS X 0208 (Japanese) Yes Yes
JIS X 0212 (Japanese) Yes Yes
KS X 1001 (Korean) Yes Yes
GB2312 (Chinese) Yes Yes
GBK (Chinese) Yes Yes
GB18030 (Chinese) Yes Yes
UTF-8 (Unicode) Yes Yes
--- --- ---
UUID Generation N/A Yes
UID From Prefix N/A Yes
Anonymization N/A No

Q and A Summary

What modalities are supported?

All modalities can be read. Writing is currently limitied to CT, MR, and secondary capture.

Why is writing limited to MR, CT, and Secondary Capture?

The DICOM standard has very strict rules for both the structure and the content of DICOM files, and many of the rules are modality-specific. We therefore decided to focus our initial efforts CT and MR. Support for additional modalities will be added in the future.

Are compressed files supported?

Yes, but only for reading, not for writing.

Is floating-poing data supported?

Yes, FloatPixelData and DoubleFloatPixelData can be read. But not written (yet).

What is per-slice meta-data?

DICOM data is usually stored as one file per slice, and each file has specific information relating to position, time, etc. The vtkDICOMMetaData class makes it easy to access the meta data for each individual slice.

What is per-frame meta-data?

The DICOM 2004 standard introduced enhanced multi-frame data sets, which allow multiple slices CT or MR to be stored in a single file.

Are enhanced multi-frame files supported?

They can be read, but cannot yet be written.

Is internationalization supported?

Yes. All text encodings listed in the DICOM standard are handled, and are converted to utf-8 on demand.

Are DICOMDIR files supported?

They can be read via the vtkDICOMDirectory class. They cannot yet be written.

What wrapper languages are supported?

Python is supported, Java wrapping is no longer supported. Only the reader and writer are fully wrapped in Java, so access to meta-data is limited. Python wrapping is complete.

What DICOM libraries are used?

The vtk-dicom library has its own native code for parsing DICOM files. For compressed files, GDCM and DCMTK are used to perform the decompression.