dicom-microscopy-viewer-changed
Version:
Interactive web-based viewer for DICOM Microscopy Images
162 lines (105 loc) • 7.09 kB
Markdown
<div align="center">
<h1>dcmjs</h1>
<p>JavaScript implementation of DICOM manipulation. This code is an outgrowth of several efforts to implement web applications for medical imaging.</p>
</div>
<hr />
[](https://github.com/dcmjs-org/dcmjs/actions?query=workflow:publish-package)
**Note: this code is a work-in-progress and should not be used for production or clinical purposes**
See [live examples here](https://dcmjs.netlify.com/)
# Goals
_Overall the code should:_
- Support reading and writing of correct DICOM objects in JavaScript for browser or node environments
- Provide a programmer-friendly JavaScript environment for using and manipulating DICOM objects
- Include a set of useful demos to encourage correct usage of dcmjs and modern DICOM objects
- Encourage correct referencing of instances and composite context when creating derived objects
- Current target is modern web browsers, but a set of node-based utilities also makes sense someday
_Architectural goals include:_
- Use modern JavaScript programming methods (currently ES6) but avoid heavy frameworks
- Leverage modern DICOM standards but avoid legacy parts
- Support straightforward integration with multiple JavaScript deployment targets (browser, node, etc) and frameworks.
_Parts of DICOM that dcmjs *will* focus on:_
- Enhanced Multiframe Images
- Segmentation Objects
- Parametric Maps
- Structured Reports
_Parts of DICOM that dcmjs *will not* focus on:_
- DIMSE (legacy networking like C-STORE, C-FIND, C-MOVE, etc). See the [dcmjs-dimse project](https://github.com/PantelisGeorgiadis/dcmjs-dimse) for that.
- Physical Media (optical disks). See [this FAQ](https://www.dclunie.com/medical-image-faq/html/index.html) if you need to work with those.
- Image processing. See [dcmjs-imaging](https://github.com/PantelisGeorgiadis/dcmjs-imaging) for this.
# Usage
## In Browser
```html
<script type="text/javascript" src="https://unpkg.com/dcmjs"></script>
```
## In Node
```None
// To install latest _stable_ release
npm install --save dcmjs
// To install latest code merged to master
npm install --save dcmjs@dev
```
## For Developers
```None
git clone https://github.com/dcmjs-org/dcmjs
cd dcmjs
npm install
npm run build
npm test
```
## For Maintainers and Contributors
Publish new version automatically from commit:
Use the following "Commit Message Format" when drafting commit messages. If you're merging a 3rd party's PR, you have the ability to override the supplied commit messages by doing a "Squash & Merge":
- [Commit Message Format](https://semantic-release.gitbook.io/semantic-release/#commit-message-format)
Note: Be wary of `BREAKING_CHANGE` in commit message descriptions, as this can force a major version bump.
Be sure to use lower case for the first letter of your semantic commit message, so use `fix` not `Fix` or `feat` not `Feat`.
Note: a new package version will be published only if the commit comes from a PR.
### Optional Tooling
It is advised to use the git-cz, i.e.:
- install git-cz
```
npm install -g git-cz
```
- how to commit
```
git-cz --non-interactive --type=fix --subject="commit message"
```
More info at [git-cz](https://www.npmjs.com/package/git-cz).
## Community Participation
Use this repository's issues page to report any bugs. Please follow [SSCCE](http://sscce.org/) guidelines when submitting issues.
Use github pull requests to make contributions.
## Unit Tests
Tests are written using the [Jest](https://jestjs.io) testing framework and live in the `test/` folder. Test file names must end with `.test.js`.
Pull requests should either update existing tests or add new tests in order to ensure good test coverage of the changes being made.
To run all tests use `npm run test`. To only run specific tests use Jest's [`.only`](https://www.testim.io/blog/unit-testing-best-practices/) feature. If you're using VS Code, an extension such as [`firsttris.vscode-jest-runner`](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner) can be used to step through specific tests in the debugger.
Read all about unit testing best practices [here](https://www.testim.io/blog/unit-testing-best-practices/).
# Status
Currently dcmjs is an early-stage development experiment, but already has valuable functionality.
## Implemented
- Bidirectional conversion to and from part 10 binary DICOM and DICOM standard JSON encoding (as in [DICOMweb](http://dicomweb.org))
- Bidirectional convertion to and from DICOM standard JSON and a programmer-friendly high-level version (high-level form is called the "naturalized" form in the code).
## In development
- Creation of (correct) enhanced multiframe DICOM objects from legacy image objects
- Creation of (correct) derived DICOM objects such as Segmentations and Structured Reports
## TODO
- Create a test suite of input and output DICOM objects
- Test interoperability with other DICOM implementations
- Add documentation
# History
- 2014
- [DCMTK](dcmtk.org) cross compiled to javascript at [CTK Hackfest](http://www.commontk.org/index.php/CTK-Hackfest-May-2014). While this was useful and powerful, it was heavyweight for typical web usage.
- 2016
- A [Medical Imaging Web Appliction meeting at Stanford](http://qiicr.org/web/outreach/Medical-Imaging-Web-Apps/) and [follow-on hackfest in Boston](http://qiicr.org/web/outreach/MIWS-hackfest/) helped elaborate the needs for manipulating DICOM in pure Javascript.
- Based on [DICOM Part 10 read/write code](https://github.com/OHIF/dicom-dimse) initiated by Weiwei Wu of [OHIF](http://ohif.org), Steve Pieper [developed further features](https://github.com/pieper/sites/tree/gh-pages/dcmio) and [examples of creating multiframe and segmentation objects](https://github.com/pieper/sites/tree/gh-pages/DICOMzero) discussed with the community at RSNA
- 2017
- At [NA-MIC Project Week 25](https://na-mic.org/wiki/Project_Week_25) Erik Ziegler and Steve Pieper [worked](https://na-mic.org/wiki/Project_Week_25/DICOM_Segmentation_Support_for_Cornerstone_and_OHIF_Viewer)
with the community to define some example use cases to mix the pure JavaScript DICOM code with Cornerstone and [CornerstoneTools](https://github.com/chafey/cornerstoneTools).
- 2018-2022
- Work continues to develop SR and SEG support to [OHIFViewer](http://ohif.org) allow interoperability with [DICOM4QI](https://legacy.gitbook.com/book/qiicr/dicom4qi/details)
# Support
The developers gratefully acknowledge their research support:
- Open Health Imaging Foundation ([OHIF](http://ohif.org))
- Quantitative Image Informatics for Cancer Research ([QIICR](http://qiicr.org))
- [Radiomics](http://radiomics.io)
- The [Neuroimage Analysis Center](http://nac.spl.harvard.edu)
- The [National Center for Image Guided Therapy](http://ncigt.org)
- The [NCI Imaging Data Commons](https://imagingdatacommons.github.io/) NCI Imaging Data Commons: contract number 19X037Q from Leidos Biomedical Research under Task Order HHSN26100071 from NCI