cornerstoneTools
cornerstoneTools is a library built on top of cornerstone that provides
a set of common tools needed in medical imaging to work with images and stacks of images.
View the live examples to see this
library in action!
View the simple image viewer built on cornerstone.
Have questions? Try posting on our google groups forum.
Status
**Project Status: Alpha (Stable) **
NOTE: Project is currently under active development - functionality is not complete, bugs exist,
APIs will change and documentation is missing or not correct. The implemented functionality is considered
relatively stable.
Make sure to visit the wiki for more information.
Install
Get a packaged source file:
Or install via Bower:
bower install cornerstoneTools
Usage
See the live examples and wiki for documentation on how to use this library
New: Specify the cornerstone, jQuery, and Hammer.js instances you want to use the library with.
cornerstoneTools.external.cornerstone = cornerstone;
cornerstoneTools.external.$ = $;
cornerstoneTools.external.Hammer = Hammer;
TODO
Features Targeted for V1.0
- Tools that work with a single image
- WW/WL
- Zoom
- Pan
- Length
- Rectangle ROI
- Elliptical ROI
- Pixel Probe
- Angle
- Tools that work with a stack of images
- Scroll
- Cine / Playing Clips
- Cross reference lines
- Tools that work with timeseries (4D)
- Measurement Manager
- Synchronization tools
- Stack by image index
- Stack by image position
- Image by zoom and pan
- Sync ww/wc/invert
- Support for binding each tool to different mouse inputs:
- Left mouse button
- Middle mouse button
- Right mouse button
- Mouse Wheel
- Support for touch based gestures
- Tool framework that can be used to simplify development of new tools that work in a consistent manner with the included
tools
- Provides API to access measurement data for serialization purposes (e.g. save measurements to database)
Build System
This project uses webpack to build the software.
Pre-requisites:
NodeJs - click to visit web site for installation instructions.
Common Tasks
Update dependencies (after each pull):
npm install
Running the build:
npm start
Automatically running the build and unit tests after each source change:
npm run watch
Backlog
- Updating related handles while resizing (e.g. resize top left handle of a rect and update the bottom left and top right as it changes)
- measurement calibration tool
- Config object that allows tool appearance to be customized (e.g. line color, text color, handle size, shape, etc)
- automatically disabling tools when the enabled element is disabled
- reconsider the state management api, it is a bit clunky
- add support for pointer events as an input source
- Reference line renderer for first/last/active
- Annotations (e.g. text, arrows, circles)
- Move all API documentation from wiki into markdown in a doc folder
- key press input source - so user can interact with tools via keyboard (e.g. scroll stack image using arrow keys)
Copyright
Copyright 2015 Chris Hafey chafey@gmail.com
Version 1.0.2
- The biggest behaviour change in this release comes from bug fixes to the fusion renderer.
When using the fusion renderer, this is how it works now:
-
Stacks in Cornerstone Tools correspond to layers in Cornerstone Core. If you have ten stacks in your toolData and you are using the fusion renderer, you have ten layers.
-
If no image is being displayed in the stack at any given time, the layer has image = undefined.
-
The active layer cannot be changed to a layer with an undefined image. setActiveLayer will switch to the base layer in this case.
-
When image is changed and current active layer has image=undefined, the active layer is set to the base layer.
-
Update cornerstone-core dependency since stack fusion renderer now requires APIs added in Cornerstone Core 1.1.0 (cornerstone.setLayerImage)
-
Added stackPrefetch configuration option for maximum amount of images to fetch (thanks @maistho)
This option was added to allow developers using very large stack (i.e. > 1000 images) to limit the prefetching behaviour. The default value is Infinity, so no changes are necessary for normal use.
- Bug fix for stackPrefetch: the first element on stackPrefetch.indicesToRequest wasn't being prefetched (thanks @lscoder). Closes #211