DICOMTree
A little Julia package for visualizing DICOM file metadata in the form of a tree. The main function is the Tree function, which is simply a dispatch of the eponymous function in the Term.jl package to the DICOMData type in the DICOM.jl package. The package have been tested with CT Scanner, RTDose and RTStruct files.
Documentation & installation
Install with:
julia> ] # enters the pkg interface
pkg> add DICOMTree
How to use DICOMTree.jl ?
using DICOM
using DICOMTree
dcm_file = dcm_parse(dcm_path)
Tree(dcm_file, with_keys::Bool=false, maxdepth = 2)
Output (with colours in the REPL) :
PatientID
├─ StructureSetName ⇒ ART: Unapproved
├─ StudyDate ⇒ 20180802
├─ StructureSetROISequence ⇒ Vector of DICOMData
│ └─ Length ⇒ 46
│
├─ SeriesInstanceUID ⇒ 1.2.276
├─ MediaStorageSOPClassUID ⇒ 1.2.840
├─ SoftwareVersions ⇒ v1.0
├─ ImplementationVersionName ⇒ OFFIS_DCMTK_364
├─ Modality ⇒ RTSTRUCT
├─ PatientName ⇒ xxx
├─ OperatorsName ⇒ xxx
├─ ApprovalStatus ⇒ UNAPPROVED
├─ InstitutionName ⇒ Any[]
│
├─ ReferencedFrameOfReferenceSequence ⇒ Vector of DICOMData
│ └─ Length ⇒ 1
│
├─ SOPInstanceUID ⇒ 1.2.276
├─ SpecificCharacterSet ⇒ ISO_IR 100
├─ PatientID ⇒ xxx
├─ ImplementationClassUID ⇒ 1.2.276
├─ StudyTime ⇒ xxx
├─ StructureSetTime ⇒ 123456
├─ StudyDescription ⇒ Brain
├─ ROIContourSequence ⇒ Vector of DICOMData
│ └─ Length ⇒ 46
│
├─ ReviewTime ⇒ Any[]
│
├─ StudyID ⇒ 123456
├─ SeriesNumber ⇒ 1
├─ SOPClassUID ⇒ 1.2.840
├─ StudyInstanceUID ⇒ 1.2.826
├─ TransferSyntaxUID ⇒ 1.2.840
├─ AccessionNumber ⇒ Any[]
│
├─ StructureSetDate ⇒ 12345678
├─ ManufacturerModelName ⇒ xxx
├─ PatientSex ⇒ Any[]
│
├─ InstanceNumber ⇒ 1
├─ FileMetaInformationGroupLength ⇒ 202
├─ ReferringPhysicianName ⇒ Unspecified
├─ Manufacturer ⇒ TheraPanacea
├─ ReviewDate ⇒ Any[]
│
├─ InstanceCreationTime ⇒ 123456
├─ FileMetaInformationVersion ⇒ UInt8[0x00, 0x01]
│
├─ RTROIObservationsSequence ⇒ Vector of DICOMData
│ └─ Length ⇒ 46
│
├─ MediaStorageSOPInstanceUID ⇒ 1.2.276
├─ StructureSetLabel ⇒ ART: Unapproved
├─ SeriesDescription ⇒ xxx
├─ PatientBirthDate ⇒ 12345678
└─ InstanceCreationDate ⇒ 12345678
-
with_keys = true
will replace the name with the associated tag (e.g. : (0x0010, 0x0020) if true and PatientID if false). Default is false. -
maxdepth
defines the depth at which the DICOM tree is explored. Default is 2. Note that a high scan depth may take a few seconds to be displayed.
Then, we can focus on a specifi tag :
Tree(rs.ROIContourSequence, maxdepth = 3)
Output (with colours in the REPL) :
└─ 1 ⇒
├─ ContourSequence ⇒
│ ├─ 1 ⇒
│ │ ├─ ContourGeometricType ⇒ CLOSED_PLANAR
│ │ ├─ ContourData ⇒ Vector
│ │ │ ├─ Length ⇒ 3948
│ │ │ ├─ ElementsType ⇒ Float64
│ │ │ └─ Overview ⇒ [5.12, -245.33, -124.0, ..., -124.0, 4.4, -245.2]
│ │ │
│ │ ├─ ContourNumber ⇒ 0
│ │ ├─ NumberOfContourPoints ⇒ 1316
│ │ └─ ContourImageSequence ⇒ Vector of DICOMData
│ │ └─ Length ⇒ 1
│ │
│ │
│ ├─ 2 ⇒
│ │ ├─ ContourGeometricType ⇒ CLOSED_PLANAR
│ │ ├─ ContourData ⇒ Vector
│ │ │ ├─ Length ⇒ 3936
│ │ │ ├─ ElementsType ⇒ Float64
│ │ │ └─ Overview ⇒ [12.78, -245.33, -122.0, ..., -122.0, 12.06, -245.2]
│ │ │
│ │ ├─ ContourNumber ⇒ 1
│ │ ├─ NumberOfContourPoints ⇒ 1312
│ │ └─ ContourImageSequence ⇒ Vector of DICOMData
│ │ └─ Length ⇒ 1
...