Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Get dcm_write() to work. Switch to using Dict for handling data. #22

Merged
merged 17 commits into from
Mar 3, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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