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.
Useful Links
- Source code repository (Github)
- Command-line DICOM tools
- API documentation (Doxygen)
- PDF documentation (LaTeX)
- Testing dashboard (CDash)
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.