A cornerstone Image Loader for DICOM P10 instances over HTTP. This can be used to integrate cornerstone with WADO-URI servers or any other HTTP based server that returns DICOM P10 instances (e.g. Orthanc or custom servers)
Having problems viewing your images with cornerstonWADOImageLoader? Check out the troubleshooting guide.
Click here for a live example of this library in use!
You can also see it in action with the cornerstoneDemo application.
Get a packaged source file:
or from bower:
bower install cornerstoneWADOImageLoader
The cornerstoneWADOImageLoader depends on the following external libraries:
For JPEG 2000 support, you must load one of the following codecs (see below for more information):
For JPEG-LS support, you must load the following codec:
All of these libraries should be loaded before the cornerstoneWADOImageLoader.js. See the source code for the examples for how these codecs are loaded.
The image loader prefix is 'wadouri' (note that the prefix dicomweb is also supported but is deprecated and will eventually be removed). Here are some example imageId's:
absolute url:
wadouri:http://cornerstonetech.org/images/ClearCanvas/USEcho/IM00001
relative url:
wadouri:/images/ClearCanvas/USEcho/IM00001
WADO-URI url:
wadouri:http://localhost:3333/wado?requestType=WADO&studyUID=1.3.6.1.4.1.25403.166563008443.5076.20120418075541.1&seriesUID=1.3.6.1.4.1.25403.166563008443.5076.20120418075541.2&objectUID=1.3.6.1.4.1.25403.166563008443.5076.20120418075557.1&contentType=application%2Fdicom&transferSyntax=1.2.840.10008.1.2.1
Orthanc file endpoint URL:
wadouri:http://localhost:8042/instances/8cce70aa-576ad738-b76cb63f-caedb3c7-2b213aae/file
Note that the web server must support Cross origin resource sharing or the image will fail to load. If you are unable to get CORS enabled on the web server that you are loading DICOM P10 instances from, you can use a reverse proxy. Here is a simple Node.js based http-proxy that adds CORS headers that you might find useful.
CornerstoneWADOImageLoader supports JPEG2000 via one of two codecs each of which have different levels of performance and support for JPEG2000:
This is the recommended codec as it is based on the OpenJPEG project which is fairly complete and actively maintained. If you have problems decoding a JPEG2000 file, you should seek out support from the OpenJPEG community. Special thanks to @jpambrun for creating the EMSCRIPTEN build.
This codec is based on the pdf.js project with fixes/enhancements made by @jpambrun specific to medical imaging. It generally runs faster than the OpenJPEG codec, but there are several known issues that may never be fixed.
Images from ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/compsamples_j2k.tar
iMac Retina 5k Late 2014 4GHz Intel Core i7 Chrome 50.0.2661.102 (64 bit)
Image | OpenJPEG | PDF.js |
---|---|---|
NM1_J2KR | 233 ms | 103 ms |
CT1_J2KR | 424 ms | 147 ms |
RG1_J2KR | 6058 ms | 2311 ms |
MG1_J2KR | 19312 ms | 7380 ms |
iMac Retina 5k Late 2014 4GHz Intel Core i7 FireFox 46.0.1
Image | OpenJPEG | PDF.js |
---|---|---|
NM1_J2KR | 240 ms | 102 ms |
CT1_J2KR | 185 ms | 91 ms |
RG1_J2KR | 3445 ms | 1594 ms |
MG1_J2KR | 10295 ms | 14207 ms |
iMac Retina 5k Late 2014 4GHz Intel Core i7 Safari 9.1.1
Image | OpenJPEG | PDF.js |
---|---|---|
NM1_J2KR | 64 ms | 56 ms |
CT1_J2KR | 115 ms | 94 ms |
RG1_J2KR | 2367 ms | 1567 ms |
MG1_J2KR | 6496 ms | 18547 ms |
- Implements a cornerstone ImageLoader for DICOM P10 Instances via a HTTP get request.
- Can be used with a WADO server
- Can be used with Orthanc's file endpoint
- Can be used with any server that returns DICOM P10 instances via HTTP GET
- Supports many popular transfer syntaxes and photometric interpretations see full list
This project uses grunt to build the software.
NodeJs - click to visit web site for installation instructions.
grunt-cli
npm install -g grunt-cli
bower
npm install -g bower
Update dependencies (after each pull):
npm install
bower install
Running the build:
grunt
Automatically running the build and unit tests after each source change:
grunt watch
- Support images with Pixel Padding?
- Mask out burned in overlays?
- rii-mango for the JPEGLossless decoder
- gSquared for the JPEG lossy decoder, RLE and PALETTE_COLOR support
- jpambrun and pdf.js for the JPEG 2000 decoder
- jpambrun and OpenJPEG for another JPEG 2000 decoder
- CharLS for JPEG-LS
Why is this a separate library from cornerstone?
Mainly to avoid adding a dependency to cornerstone for the DICOM parsing library. While cornerstone is intended to be used to display medical images that are stored in DICOM, cornerstone aims to simplify the use of medical imaging and therefore tries to hide some of the complexity that exists within DICOM. It is also desirable to support display of non DICOM images so a DICOM independent image model makes sense.
Copyright 2016 Chris Hafey chafey@gmail.com