New methods for selecting Transfer Syntax in .NET version 5.6 Onwards

Note - the information here only applies to the .NET version of DicomObjects, and only version 5.6 onwards

Background

All previous versions of DicomObjects, both .NET & COM have shared the same basic mechanism for selecting transfer syntaxes:

  • When initiating, they can be created specifically using Contexts.Add etc.
  • When accepting, they can be selected specifically using Context.AcceptedTS or Reject
  • If neither of the above is used (as most people don't) then a default mechansim is used, based on the TransferSyntax registry hive, which allows:
    • Setting of specific values for different SOP classes using TransferSyntax/SOP_class_UID
    • A more generic setting for all other SOP classes in the TransferSyntax/ default value

This system has worked well for many years, but has 3 main drawbacks:

  • It is complicated to set up a different value for each SOP class, and many developers do not know the characteristics of each (especially maximum bit depth)
  • Most developers therefore use a generic list of Transfer syntaxes, which are not always appropriate for all SOP classes (e.g. using JPEG lossy baseline for images with > 8 bits such as CT or MR)
  • It leads to "compressed" synatxes being offered for services such as C-FIND etc., which (though 100% legal in DICOM) is rather pointless and looks a little unprofessional.

The New System - overview

So......Whilst the old mechanism has been retained for backward compatibility in 5.6, an improved version has been added as an alternative. This provides the following benefits:

  • The defaults are more sensible
  • It is easier to change the chosen transfer syntaxes for a list of SOP classes in one operation
  • Separate lists are maintained for offered and accepted transfer syntaxes

The New System - details

  • SOP classes are automatically arranged into different groups, which share common characteristics. The groups are:
Services
DICOM Services such as verification and C-GET etc. Default values are:
"1.2.840.10008.1.1"
"1.2.840.10008.1.9"
"1.2.840.10008.1.20.1"
"1.2.840.10008.1.20.2"
"1.2.840.10008.3.1.2.1.1"
"1.2.840.10008.3.1.2.2.1"
"1.2.840.10008.3.1.2.3.1"
"1.2.840.10008.3.1.2.3.2"
"1.2.840.10008.3.1.2.3.3"
"1.2.840.10008.3.1.2.3.4"
"1.2.840.10008.3.1.2.3.5"
"1.2.840.10008.3.1.2.5.1"
"1.2.840.10008.3.1.2.6.1"
"1.2.840.10008.5.1.1.1"
"1.2.840.10008.5.1.1.2"
"1.2.840.10008.5.1.1.4"
"1.2.840.10008.5.1.1.4.1"
"1.2.840.10008.5.1.1.4.2"
"1.2.840.10008.5.1.1.14"
"1.2.840.10008.5.1.1.15"
"1.2.840.10008.5.1.1.16"
"1.2.840.10008.5.1.1.16.376"
"1.2.840.10008.5.1.1.24.1"
"1.2.840.10008.5.1.1.22"
"1.2.840.10008.5.1.1.31"
"1.2.840.10008.5.1.4.1.2.1.1"
"1.2.840.10008.5.1.4.1.2.1.2"
"1.2.840.10008.5.1.4.1.2.1.3"
"1.2.840.10008.5.1.4.1.2.2.1"
"1.2.840.10008.5.1.4.1.2.2.2"
"1.2.840.10008.5.1.4.1.2.2.3"
"1.2.840.10008.5.1.4.1.2.3.1"
"1.2.840.10008.5.1.4.1.2.3.2"
"1.2.840.10008.5.1.4.1.2.3.3"
"1.2.840.10008.5.1.4.31"
Images8Bit
DICOM Images expected to contain only 8 bit pixel data. Default values are:
"1.2.840.10008.5.1.4.1.1.3"
"1.2.840.10008.5.1.4.1.1.3.1"
"1.2.840.10008.5.1.4.1.1.6"
"1.2.840.10008.5.1.4.1.1.6.1"
"1.2.840.10008.5.1.4.1.1.7"
"1.2.840.10008.5.1.4.1.1.77.1.1"
"1.2.840.10008.5.1.4.1.1.77.1.1.1"
"1.2.840.10008.5.1.4.1.1.77.1.2"
"1.2.840.10008.5.1.4.1.1.77.1.2.1"
"1.2.840.10008.5.1.4.1.1.77.1.3"
"1.2.840.10008.5.1.4.1.1.77.1.4"
"1.2.840.10008.5.1.4.1.1.77.1.4.1"
"1.2.840.10008.5.1.4.1.1.77.1.5.1"
"1.2.840.10008.5.1.4.1.1.7.1"
"1.2.840.10008.5.1.4.1.1.7.2"
"1.2.840.10008.5.1.4.1.1.7.4"
Images16Bit
DICOM Images expected to contain up to 16 bit pixel data. Default values are:
"1.2.840.10008.5.1.4.1.1.1"
"1.2.840.10008.5.1.4.1.1.1.1"
"1.2.840.10008.5.1.4.1.1.1.1.1"
"1.2.840.10008.5.1.4.1.1.1.2"
"1.2.840.10008.5.1.4.1.1.1.2.1"
"1.2.840.10008.5.1.4.1.1.1.3"
"1.2.840.10008.5.1.4.1.1.1.3.1"
"1.2.840.10008.5.1.4.1.1.2"
"1.2.840.10008.5.1.4.1.1.2.1"
"1.2.840.10008.5.1.4.1.1.4"
"1.2.840.10008.5.1.4.1.1.4.1"
"1.2.840.10008.5.1.4.1.1.4.2"
"1.2.840.10008.5.1.4.1.1.5"
"1.2.840.10008.5.1.4.1.1.12.1"
"1.2.840.10008.5.1.4.1.1.12.2"
"1.2.840.10008.5.1.4.1.1.12.3"
"1.2.840.10008.5.1.4.1.1.20"
"1.2.840.10008.5.1.4.1.1.77.1.5.2"
"1.2.840.10008.5.1.4.1.1.7.3"
"1.2.840.10008.5.1.4.1.1.128"
Images32Bit
DICOM Images expected to contain up to 32 bit pixel data. Default values are:
"1.2.840.10008.5.1.4.1.1.481.2"
NonImageObjects
Persistent DICOM objects without pixel data. Default values are:
"1.2.840.10008.1.3.10"
"1.2.840.10008.5.1.1.23"
"1.2.840.10008.5.1.1.24"
"1.2.840.10008.5.1.1.26"
"1.2.840.10008.5.1.1.27"
"1.2.840.10008.5.1.1.29"
"1.2.840.10008.5.1.1.30"
"1.2.840.10008.5.1.4.1.1.8"
"1.2.840.10008.5.1.4.1.1.9"
"1.2.840.10008.5.1.4.1.1.9.1.1"
"1.2.840.10008.5.1.4.1.1.9.1.2"
"1.2.840.10008.5.1.4.1.1.9.1.3"
"1.2.840.10008.5.1.4.1.1.9.2.1"
"1.2.840.10008.5.1.4.1.1.9.3.1"
"1.2.840.10008.5.1.4.1.1.9.4.1"
"1.2.840.10008.5.1.4.1.1.10"
"1.2.840.10008.5.1.4.1.1.11"
"1.2.840.10008.5.1.4.1.1.11.1"
"1.2.840.10008.5.1.4.1.1.66"
"1.2.840.10008.5.1.4.1.1.66.1"
"1.2.840.10008.5.1.4.1.1.66.2"
"1.2.840.10008.5.1.4.1.1.77.1.5.3"
"1.2.840.10008.5.1.4.1.1.88.11"
"1.2.840.10008.5.1.4.1.1.88.22"
"1.2.840.10008.5.1.4.1.1.88.33"
"1.2.840.10008.5.1.4.1.1.88.40"
"1.2.840.10008.5.1.4.1.1.88.50"
"1.2.840.10008.5.1.4.1.1.88.59"
"1.2.840.10008.5.1.4.1.1.88.65"
"1.2.840.10008.5.1.4.1.1.104.1"
"1.2.840.10008.5.1.4.1.1.129"
"1.2.840.10008.5.1.4.1.1.481.1"
"1.2.840.10008.5.1.4.1.1.481.3"
"1.2.840.10008.5.1.4.1.1.481.4"
"1.2.840.10008.5.1.4.1.1.481.5"
"1.2.840.10008.5.1.4.1.1.481.6"
"1.2.840.10008.5.1.4.1.1.481.7"
User1, User2 & User3
Spares for unusual user-defined groupings
  • Associated with each group are 3 lists:
    • A list of SOP classes to which it currently applies
    • A list of Transfer Syntaxes to be offered when initiating an association
    • A separate list of Transfer Syntaxes to be chosen (in preference order) when accepting an association
  • The default lists of transfer syntaxes are as follows:
Group Offered Transfer Syntaxes Accepted Transfer Syntaxes
Services

ExplicitVRLittleEndian
ImplicitVRLittleEndian

ExplicitVRLittleEndian
ImplicitVRLittleEndian

NonImageObjects

ExplicitVRLittleEndian
ImplicitVRLittleEndian

ExplicitVRLittleEndian
ImplicitVRLittleEndian

Images8Bit

ExplicitVRLittleEndian
ImplicitVRLittleEndian
JPEGLossless
JPEGLosslessFirstOrder
RLELossless

ExplicitVRLittleEndian
ImplicitVRLittleEndian
JPEGLossless
JPEGLosslessFirstOrder
RLELossless
JPEGExtended
JPEGBaseline
JPEG2000Lossless
JPEG2000Lossy

Images16Bit

ExplicitVRLittleEndian
ImplicitVRLittleEndian
JPEGLossless
JPEGLosslessFirstOrder
RLELossless

ExplicitVRLittleEndian
ImplicitVRLittleEndian
JPEGLossless
JPEGLosslessFirstOrder
RLELossless
JPEGExtended
JPEGBaseline
JPEG2000Lossless
JPEG2000Lossy

Images32Bit

ExplicitVRLittleEndian
ImplicitVRLittleEndian
RLELossless

ExplicitVRLittleEndian
ImplicitVRLittleEndian
RLELossless

Relevance: