High Performance Golang DICOM Medical Image Parser
This is a (hard-ish) fork of work I did at gradienthealth which built on top of go-dicom--a golang DICOM image parsing library and command line tool. We have been working on this package with the goal of building a full-featured and high-performance dicom parser in Golang with new features and improvements. I will continue to add some (potentially API breaking) improvements on my repository fork here.
So far, improvements that have made on top of go-dicom include:
- parsing and extracting multi-frame DICOM imagery (both encapsulated and native pixel data)
- exposing a
Parser
golang interface to make mock-based testing easier for clients - Channel-based streaming of
Frame
s to a client as they are parsed out of the dicom - Parsing performance improvements
- General refactors to the go-dicom code (though there's more work to be done here) for maintainability an readability.
To use this in your golang project, import github.com/suyashkumar/dicom
and then you can use dicom.Parser
for your parsing needs:
p, err := dicom.NewParserFromFile("myfile.dcm", nil)
opts := dicom.ParseOptions{DropPixelData: true}
element := p.ParseNext(opts) // parse and return the next dicom element
// or
dataset, err := p.Parse(opts) // parse whole dicom
More details about the package can be found in the godoc
A CLI tool that uses this package to parse imagery and metadata out of DICOMs is provided in the dicomutil
package. All dicom tags present are printed to STDOUT by default.
You can download the prebuilt binaries from the releases tab, or use the following to download the binary at the command line using my getbin tool:
wget -qO- "https://getbin.io/suyashkumar/dicom" | tar xvz
(This attempts to infer your OS and 301 redirects wget
to the latest github release asset for your system. Downloads come from GitHub releases).
dicomutil --extract-images-stream myfile.dcm
Note: for some dicoms (with native pixel data) no automatic intensity scaling is applied yet (this is coming). You can apply this in your image viewer if needed (in Preview on mac, go to Tools->Adjust Color).
To build the tool for all platforms (Mac, Windows, Linux) from source using docker, execute the following in the cloned repo:
docker build . -t godicom
docker run -it -v $PWD/build:/go/src/github.com/suyashkumar/dicom/build godicom make release
You can then use the binaries that will show up in the build
folder in your current working directory
To build manually, ensure you have make
, golang, and dep installed on your machine. Clone (or go get
) this repo into your gopath then:
make
- Original go-dicom
- Grailbio go-dicom -- commits from their fork were applied to ours
- GradientHealth for supporting work I did on this while there gradienthealth/dicom
- Innolitics DICOM browser
- DICOM Specification