dcmqi-guide
  • Introduction
  • Quick Start
  • Frequently Asked Questions (FAQ)
  • Tutorials
  • Use cases
    • Multi-structure segmentation of the brain
    • Segmentations and measurements from prostate MRI
  • User guide
    • Installation
      • Binary packages
      • Docker images
      • Build from source
      • 3D Slicer extension
    • General principles
    • Coding schemes
      • DICOM-defined coding schemes
      • Searching for codes outside DICOM
      • "Private" coding schemes
    • Command line tools usage
      • Segmentations
        • itkimage2segimage
        • segimage2itkimage
      • Measurements
        • tid1500writer
        • tid1500reader
      • Parametric maps
        • itkimage2paramap
        • paramap2itkimage
  • Developer guide
    • Update Appveyor build dependencies
    • Github release generation
    • Add new attribute to the schema
  • Troubleshooting
  • Limitations
  • Open source credits
Powered by GitBook
On this page
  • Usage
  • Usage details
  • Examples
  • Encoding measurements over segmentation of liver in CT
Export as PDF
  1. User guide
  2. Command line tools usage
  3. Measurements

tid1500writer

PreviousMeasurementsNexttid1500reader

Last updated 6 years ago

This tool can be used to save measurements calculated from the image over a volume defined by image segmentation into a DICOM Structured Report that follows .

Usage

   --inputImageLibraryDirectory <std::string>
     Location of input DICOM Data to be used for populating image library.
     See documentation.

   --inputCompositeContextDirectory <std::string>
     Location of input DICOM Data to be used for populating composite
     context. See documentation.

   --outputDICOM <std::string>
     File name of the DICOM SR object that will store the result of the
     conversion.

   --inputMetadata <std::string>
     JSON file that contains the list of mesurements and other meta data
     items that can be specified by the user. See documentation for
     details.

Usage details

In the following, we will guide you through the contents of this file - line by line.

{
  "@schema": "https://raw.githubusercontent.com/qiicr/dcmqi/master/doc/schemas/sr-tid1500-schema.json#",

This opening line references the schema this parameter file should conform to. Make sure you include this line without changes!

  "SeriesDescription": "Measurements",
  "SeriesNumber": "1001",
  "InstanceNumber": "1",

These lines define top-level attributes of the resulting DICOM object. You can change these to adjust to your needs, subject to some constraints that are not covered here for now.

  "compositeContext": [
    "liver.dcm"
  ],

  "imageLibrary": [
    "01.dcm",
    "02.dcm",
    "03.dcm"
  ],

These two items contain lists of file names that should exist in the directories specified by the --compositeContextDataDir and --imageLibraryDataDir, correspondingly. You should include the file with the DICOM Segmentation object defining the segmented region in the compositeContext attribute!

  "observerContext": {
    "ObserverType": "PERSON",
    "PersonObserverName": "Reader1"
  },

These are the attributes of either the person that performed the measurements. If you want to list the device instead of a person, it is also possible, but should be done differently. Please ask about details.

  "VerificationFlag": "VERIFIED",
  "CompletionFlag": "COMPLETE",

Values for VerificationFlag can be one of VERIFIED or UNVERIFIED. CompletionFlag values are either PARTIAL or COMPLETE.

  "activitySession": "1",
  "timePoint": "1",

activitySession attribute can be used to encode session number, when, for example, the same structure was segmented multiple times. timePoint can be used in the situation of longitudinal tracking of the measurements.

  "Measurements": [
    {
      "MeasurementGroup": {
        "TrackingIdentifier": "Measurements group 1",
        "ReferencedSegment": 1,
        "SourceSeriesForImageSegmentation": "1.2.392.200103.20080913.113635.2.2009.6.22.21.43.10.23431.1",
        "segmentationSOPInstanceUID": "1.2.276.0.7230010.3.1.4.0.42154.1458337731.665796",
        "Finding": {
          "codeValue": "T-D0060",
          "codingSchemeDesignator": "SRT",
          "codeMeaning": "Organ"
        },

This is the beginning of the structure where the actual measurements are stored. The measurements are stored hierarchically, and can include 1 or more measurement groups, where each measurement group encodes one or more measurement items.

For each measurement group, you will need to define certain common attributes shared by all measurement items within that group:

  • TrackingIdentifier is a human-readable string naming the group

  • ReferencedSegment is the ID of the segment within the DICOM segmentation object that defines the region used to calculate the measurement.

  • SourceSeriesForImageSegmentation is the SeriesInstanceUID of the original image series on which the segmentation was created.

  • segmentationSOPInstanceUID is the SOPInstanceUID of the DICOM Segmentation object.

        "measurementItems": [
          {
            "value": "37.3289",
            "quantity": {
              "codeValue": "122713",
              "codingSchemeDesignator": "DCM",
              "codeMeaning": "Attenuation Coefficient"
            },
            "units": {
              "codeValue": "[hnsf'U]",
              "codingSchemeDesignator": "UCUM",
              "codeMeaning": "Hounsfield unit"
            },
            "derivationModifier": {
              "codeValue": "R-00317",
              "codingSchemeDesignator": "SRT",
              "codeMeaning": "Mean"
            }
          },

Finally, measurementItems contains the list of individual measurement. Each measurement is encoded by specifying the following properties:

  • value: the number, the actual measurement

  • quantity: code triplet encoding the quantity.

  • units: code triplet defining the units corresponding of the value. DICOM is using the Unified Code for Units of Measure (UCUM) system for encoding units.

  • derivationModifier: code triplet encoding the quantity modifier.

bash DicomSRValidator.sh <sr_object>

Examples

Encoding measurements over segmentation of liver in CT

*

Most of the effort will be required to populate the content of the meta-information JSON file. Its structure is defined by JSON-Schema file. Interpretation of JSON-Schema may require some effort, especially considering that this particular file uses externally defined items. It may be easier to start with an example JSON file that "instantiates" this schema, such as .

Finding is a triplet of (code, codingSchemeDesignator, codeMeaning) defining the finding over which the measurement is being performed. You can read more about how these triples are defined .

The most challenging part of encoding measurements is arguably the process of identifying the codes corresponding to the quantity and derivation modifier (if necessary). You may want to read the discussion on this topic on p.19 of . For practical purposes, you can study the measurements encoded in this example and follow the pattern: . In the future, we will add more details, more examples, and more user-level tools to simplify the process of selecting such codes.

Once you generated the output DICOM object using tid1500writer tool, it is always a very good idea to validate the resulting object. For this purpose we recommend DicomSRValidator tool from the :

You can also examine the content of the resulting document with various tools such as from the suite

image

or (more colorful!) from

image

You can also use in the to conveniently view the content without having to use the terminal.

template TID1500
this
this one
here
this paper
https://github.com/QIICR/dcmqi/blob/master/doc/sr-tid1500-ct-liver-example.json
Pixelmed toolkit
dcsrdump
dicom3tools
dsrdump
DCMTK
dicom-dump plugin
Atom editor