Skip to content

Commit

Permalink
Merge pull request #22 from notZaki/Switch2Dict
Browse files Browse the repository at this point in the history
Get dcm_write() to work. Switch to using Dict for handling data.
  • Loading branch information
notZaki committed Mar 3, 2018
2 parents ac75f69 + 0d1470c commit 1ed787c
Show file tree
Hide file tree
Showing 7 changed files with 499 additions and 181 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Ignore test data
test/testdata/*
3 changes: 3 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,8 @@ os:
- osx
julia:
- 0.6
- nightly
notifications:
email: false
after_success:
- julia -e 'cd(Pkg.dir("DICOM")); Pkg.add("Coverage"); using Coverage; Codecov.submit(Codecov.process_folder())'
2 changes: 1 addition & 1 deletion LICENSE.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Copyright (c) 2012-2013: Jeff Bezanson and contributors.
Copyright (c) 2012-2018: Jeff Bezanson and contributors.

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
Expand Down
74 changes: 73 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,73 @@
DICOM interface for the Julia language.
# DICOM.jl

Julia interface for parsing/writing DICOM files

## Usage

**Installation**

To install the package:
```
julia> Pkg.add("DICOM")
```

Load the package by
```
julia> using DICOM
```

**Reading Data**

Read a DICOM file by
```
julia> dcmData = dcm_parse("path/to/dicom/file")
```
The data in `dcmData` is structured as a dictionary, and individual DICOM elements can be accessed by their hex tag.
For example, the hex tag of "Pixel Data" is `7FE0,0010`, and it can be accessed in Julia by `dcmData[(0x7FE0,0x0010)]`.

**Writing Data**

Data can be written to a DICOM file by
```
julia> dcm_write("path/to/output/file", dcmData)
```

**Additional Notes**

DICOM files use either explicit or implicit value representation (VR). For implicit files, `DICOM.jl` will use a lookup table to guess the VR from the DICOM element's hex tag. For explicit files, `DICOM.jl` will read the VRs from the file.

- A user-defined dictionary can be supplied to override the default lookup table
For example, the "Instance Number" - tag `(0x0020,0x0013)` - is an integer (default VR = "IS"). We can read this as a float by setting the VR to "DS" by:
```
myVR = Dict( (0x0020,0x0013) => "DS" )
dcmData = dcm_parse("path/to/dicom/file", dVR = myVR)
```
Now `dcmData[(0x0020,0x0013)]` will return a float instead of an integer.

- It is possible to skip an element by setting its VR to `""`.
For example, we can skip reading the Instance Number by
```
myVR = Dict( (0x0020,0x0013) => "" )
dcmData = dcm_parse("path/to/dicom/file", dVR = myVR)
```
and now `dcmData[(0x0020,0x0013)]` will return an error because the key `(0x0020,0x0013)` doesn't exist - it was skipped during reading.

- The user-supplied VR can contain a master VR with the tag `(0x0000,0x0000)` which will be used whenever `DICOM.jl` is unable to guess the VR on its own. This is convenient for reading older dicom files and skipping retired elements - i.e. where the VR lookup fails - by:
```
myVR = Dict( (0x0000,0x0000) => "" )
dcmData = dcm_parse("path/to/dicom/file", dVR = myVR)
```

- A user-supplied VR can also be supplied during writing, e.g.:
```
# Note that dcm_write doesn't use a named input, unlike dcm_parse with "dVR ="
julia> dcm_write("path/to/output/file", dcmData, dcmVR)
```
where `dcmVR` is a dictionary which maps the hex tag to the VR.

- A dictionary of VRs can be obtained by passing `true` as a 2nd argument to `dcm_parse()`, e.g.:
```
julia> (dcmData, dcmVR) = dcm_parse("path/to/dicom/file", true)
```
and `dcmVR` will contain a dictionary of VRs for all of the elements in `dcmData`

Loading

0 comments on commit 1ed787c

Please sign in to comment.