feat(ColorMaps): Add grayscale sigmoid colormap based on DICOM standard #3365
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Context
Add a non-linear sigmoid grayscale colormap as an alternative to linear grayscale. This mapping is described in the DICOM standard in section C.11.2.1.3.1 SIGMOID Function and equation C.11-1. We use a normalized window_width of [-1, 1] and window_center = 0. The colormap is generated using a 16-point sampling of this function.
See: https://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_c.11.2.html
There are two ways to access the sigmoid function:
ScalarMappingModeproperty onvtkColorTransferFunctionto adapt any color map to sigmoid mapping. thevtkColorTransferFunctionprovides twoScalarMappingModes.LINEARcontinues to be the default value and behavior, andSIGMOIDallows to switch the scalar to color mapping to the sigmoid function. Additionally, you can control the growth rate factor usingsetSigmoidGrowthRate()which is usually a negative number and equal to-4according to the DICOM standard.Results
A comparison of linear vs sigmoid grayscale using the ImageViewer example.
The sampled 16-point sigmoid function plotted through matplotlib:

Changes
PR and Code Checklist
npm run reformatto have correctly formatted codeTesting