Medical Imaging Interaction Toolkit  2018.4.99-3e3f1a6e
Medical Imaging Interaction Toolkit
mitk::LevelWindow Class Reference

The LevelWindow class Class to store level/window values. More...

#include <mitkLevelWindow.h>

Public Member Functions

 LevelWindow (ScalarType level=127.5, ScalarType window=255.0)
 
 LevelWindow (const mitk::LevelWindow &levWin)
 
virtual ~LevelWindow ()
 
ScalarType GetLevel () const
 method that returns the level value, i.e. the center of the current grey value interval More...
 
ScalarType GetWindow () const
 returns the current window size, i.e the range size of the current grey value interval More...
 
ScalarType GetDefaultLevel () const
 method returns the default level value for the image More...
 
ScalarType GetDefaultWindow () const
 returns the default window size for the image More...
 
void ResetDefaultLevelWindow ()
 Resets the level and the window value to the default values. More...
 
ScalarType GetLowerWindowBound () const
 
ScalarType GetUpperWindowBound () const
 
void SetLevelWindow (ScalarType level, ScalarType window, bool expandRangesIfNecessary=true)
 
void SetWindowBounds (ScalarType lowerBound, ScalarType upperBound, bool expandRangesIfNecessary=true)
 
void SetToMaxWindowSize ()
 
void SetRangeMinMax (ScalarType min, ScalarType max)
 
ScalarType GetRangeMin () const
 
ScalarType GetRangeMax () const
 
ScalarType GetDefaultLowerBound () const
 
ScalarType GetDefaultUpperBound () const
 
void ResetDefaultRangeMinMax ()
 the default min and max range for image will be reset More...
 
ScalarType GetRange () const
 returns the size of the grey value range More...
 
void SetDefaultLevelWindow (ScalarType level, ScalarType window)
 
void SetDefaultBoundaries (ScalarType low, ScalarType up)
 
void SetAuto (const Image *image, bool tryPicTags=true, bool guessByCentralSlice=true, unsigned selectedComponent=0)
 sets level/window to optimize the contrast of the given Image More...
 
void SetToImageRange (const Image *image)
 sets level/window to the min/max greyvalues of the given Image More...
 
void SetFixed (bool fixed)
 
bool GetFixed () const
 
bool IsFixed () const
 
virtual bool operator== (const LevelWindow &levWin) const
 equality operator implementation that allows to compare two level windows More...
 
virtual bool operator!= (const LevelWindow &levWin) const
 non equality operator implementation that allows to compare two level windows More...
 
virtual LevelWindowoperator= (const LevelWindow &levWin)
 implementation necessary because operator made private in itk::Object More...
 
bool IsFloatingValues () const
 Shows if floating values are accepted. More...
 
void SetFloatingValues (bool value)
 Sets the floating image value. More...
 

Protected Member Functions

void EnsureConsistency ()
 

Protected Attributes

ScalarType m_LowerWindowBound
 
ScalarType m_UpperWindowBound
 
ScalarType m_RangeMin
 
ScalarType m_RangeMax
 
ScalarType m_DefaultLowerBound
 
ScalarType m_DefaultUpperBound
 
bool m_IsFloatingImage
 
bool m_Fixed
 

Detailed Description

The LevelWindow class Class to store level/window values.

Current min and max value are stored in m_LowerWindowBound and m_UpperWindowBound. m_DefaultLevel amd m_DefaultWindow store the initial Level/Window values for the image. m_DefaultRangeMin and m_DefaultRangeMax store the initial minrange and maxrange for the image.

The finite maximum and minimum of valid value range is stored in m_RangeMin and m_RangeMax. If deduced from an image by default the minimum or maximum of it statistics is used. If one of these values are infinite the 2nd extrimum (which is guaranteed to be finite), will be used.

See documentation of SetAuto for information on how the level window is initialized from an image.

Note
If you want to apply the mitk::LevelWindow to an mitk::Image, make sure to use the mitk::LevelWindowProperty and set the mitk::RenderingModeProperty to a mode which supports level window (e.g. LEVELWINDOW_COLOR). Make sure to check the documentation of the mitk::RenderingModeProperty. For a code example how to use the mitk::LevelWindowProperty check the mitkImageVtkMapper2DLevelWindowTest.cpp in Core.

Definition at line 44 of file mitkLevelWindow.h.

Constructor & Destructor Documentation

◆ LevelWindow() [1/2]

mitk::LevelWindow::LevelWindow ( mitk::ScalarType  level = 127.5,
mitk::ScalarType  window = 255.0 
)

Definition at line 55 of file mitkLevelWindow.cpp.

References SetDefaultLevelWindow(), and SetLevelWindow().

◆ LevelWindow() [2/2]

mitk::LevelWindow::LevelWindow ( const mitk::LevelWindow levWin)

Definition at line 69 of file mitkLevelWindow.cpp.

◆ ~LevelWindow()

mitk::LevelWindow::~LevelWindow ( )
virtual

Definition at line 81 of file mitkLevelWindow.cpp.

Member Function Documentation

◆ EnsureConsistency()

void mitk::LevelWindow::EnsureConsistency ( )
inlineprotected

confidence tests

if m_LowerWindowBound > m_UpperWindowBound, then the values for m_LowerWindowBound and m_UpperWindowBound will be exchanged

if m_LowerWindowBound < m_RangeMin, m_LowerWindowBound will be set to m_RangeMin. m_UpperWindowBound will be decreased the same as m_LowerWindowBound will be increased, but minimum value for m_UpperWindowBound is also m_RangeMin.

if m_UpperWindowBound > m_RangeMax, m_UpperWindowBound will be set to m_RangeMax. m_LowerWindowBound will be increased the same as m_UpperWindowBound will be decreased, but maximum value for m_LowerWindowBound is also m_RangeMax.

Definition at line 20 of file mitkLevelWindow.cpp.

References m_LowerWindowBound, m_RangeMax, m_RangeMin, m_UpperWindowBound, max(), min(), and swap().

Referenced by SetDefaultBoundaries(), SetRangeMinMax(), and SetWindowBounds().

◆ GetDefaultLevel()

mitk::ScalarType mitk::LevelWindow::GetDefaultLevel ( ) const

method returns the default level value for the image

Definition at line 95 of file mitkLevelWindow.cpp.

References m_DefaultLowerBound, and m_DefaultUpperBound.

Referenced by ResetDefaultLevelWindow().

◆ GetDefaultLowerBound()

mitk::ScalarType mitk::LevelWindow::GetDefaultLowerBound ( ) const

Get the default range minimum value

Definition at line 210 of file mitkLevelWindow.cpp.

References m_DefaultLowerBound.

Referenced by operator=().

◆ GetDefaultUpperBound()

mitk::ScalarType mitk::LevelWindow::GetDefaultUpperBound ( ) const

Get the default range maximum value

Definition at line 205 of file mitkLevelWindow.cpp.

References m_DefaultUpperBound.

Referenced by operator=().

◆ GetDefaultWindow()

mitk::ScalarType mitk::LevelWindow::GetDefaultWindow ( ) const

returns the default window size for the image

Definition at line 100 of file mitkLevelWindow.cpp.

References m_DefaultLowerBound, and m_DefaultUpperBound.

Referenced by ResetDefaultLevelWindow().

◆ GetFixed()

bool mitk::LevelWindow::GetFixed ( ) const

Returns whether the level window settings are fixed (

See also
SetFixed(bool)) or not

Definition at line 453 of file mitkLevelWindow.cpp.

References m_Fixed.

Referenced by QmitkLevelWindowWidgetContextMenu::OnSetFixed(), and operator=().

◆ GetLevel()

◆ GetLowerWindowBound()

◆ GetRange()

mitk::ScalarType mitk::LevelWindow::GetRange ( ) const

◆ GetRangeMax()

◆ GetRangeMin()

◆ GetUpperWindowBound()

◆ GetWindow()

◆ IsFixed()

◆ IsFloatingValues()

bool mitk::LevelWindow::IsFloatingValues ( ) const

Shows if floating values are accepted.

Definition at line 463 of file mitkLevelWindow.cpp.

References m_IsFloatingImage.

Referenced by operator=(), operator==(), and QmitkLineEditLevelWindowWidget::~QmitkLineEditLevelWindowWidget().

◆ operator!=()

bool mitk::LevelWindow::operator!= ( const LevelWindow levWin) const
virtual

non equality operator implementation that allows to compare two level windows

Definition at line 484 of file mitkLevelWindow.cpp.

◆ operator=()

mitk::LevelWindow & mitk::LevelWindow::operator= ( const LevelWindow levWin)
virtual

◆ operator==()

bool mitk::LevelWindow::operator== ( const LevelWindow levWin) const
virtual

equality operator implementation that allows to compare two level windows

Definition at line 473 of file mitkLevelWindow.cpp.

References mitk::Equal(), IsFixed(), IsFloatingValues(), m_DefaultLowerBound, m_DefaultUpperBound, m_Fixed, m_IsFloatingImage, m_LowerWindowBound, m_RangeMax, m_RangeMin, m_UpperWindowBound, and mitk::sqrteps.

◆ ResetDefaultLevelWindow()

void mitk::LevelWindow::ResetDefaultLevelWindow ( )

Resets the level and the window value to the default values.

Definition at line 105 of file mitkLevelWindow.cpp.

References GetDefaultLevel(), GetDefaultWindow(), and SetLevelWindow().

Referenced by QmitkLevelWindowWidgetContextMenu::OnSetDefaultLevelWindow().

◆ ResetDefaultRangeMinMax()

void mitk::LevelWindow::ResetDefaultRangeMinMax ( )

the default min and max range for image will be reset

Definition at line 215 of file mitkLevelWindow.cpp.

References m_DefaultLowerBound, m_DefaultUpperBound, and SetRangeMinMax().

Referenced by QmitkLevelWindowWidgetContextMenu::OnSetDefaultScaleRange().

◆ SetAuto()

void mitk::LevelWindow::SetAuto ( const Image image,
bool  tryPicTags = true,
bool  guessByCentralSlice = true,
unsigned  selectedComponent = 0 
)

sets level/window to optimize the contrast of the given Image

!

This method initializes a mitk::LevelWindow from an mitk::Image. The algorithm is as follows:

Default to taking the central image slice for quick analysis.

Compute the smallest (minValue), second smallest (min2ndValue), second largest (max2ndValue), and largest (maxValue) data value by traversing the pixel values only once. In the same scan it also computes the count of minValue values and maxValue values. After that a basic histogram with specific information about the extrems is complete.

If minValue == maxValue, the center slice is uniform and the above scan is repeated for the complete image, not just one slice

Next, special cases of images with only 1, 2 or 3 distinct data values have hand assigned level window ranges.

Next the level window is set relative to the inner range IR = lengthOf([min2ndValue, max2ndValue])

For count(minValue) > 20% the smallest values are frequent and should be distinct from the min2ndValue and larger values (minValue may be std:min, may signify something special) hence the lower end of the level window is set to min2ndValue - 0.5 * IR

For count(minValue) <= 20% the smallest values are not so important and can blend with the next ones => min(level window) = min2ndValue

And analog for max(level window): count(max2ndValue) > 20%: max(level window) = max2ndValue + 0.5 * IR count(max2ndValue) < 20%: max(level window) = max2ndValue

In both 20%+ cases the level window bounds are clamped to the [minValue, maxValue] range

In consequence the level window maximizes contrast with minimal amount of computation and does do useful things if the data contains std::min or std:max values or has only 1 or 2 or 3 data values.

Definition at line 256 of file mitkLevelWindow.cpp.

References mitk::PixelType::GetBpe(), mitk::PixelType::GetComponentType(), mitk::ImageStatisticsHolder::GetCountOfMaxValuedVoxelsNoRecompute(), mitk::ImageStatisticsHolder::GetCountOfMinValuedVoxelsNoRecompute(), mitk::Image::GetDimension(), mitk::Image::GetDimensions(), mitk::PixelType::GetPixelType(), mitk::Image::GetPixelType(), mitk::ImageStatisticsHolder::GetScalarValue2ndMaxNoRecompute(), mitk::ImageStatisticsHolder::GetScalarValue2ndMinNoRecompute(), mitk::ImageStatisticsHolder::GetScalarValueMaxNoRecompute(), mitk::ImageStatisticsHolder::GetScalarValueMin(), mitk::Image::GetStatistics(), image, IsFixed(), mitk::BaseData::IsInitialized(), k(), m_IsFloatingImage, max(), min(), mitk::ImageSliceSelector::New(), SetDefaultBoundaries(), SetDefaultLevelWindow(), SetRangeMinMax(), SetWindowBounds(), and Update().

Referenced by mitkLevelWindowTest(), mitkVtkPropRendererTest(), QmitkLevelWindowWidgetContextMenu::OnUseOptimizedLevelWindow(), mitk::LevelWindowManager::RecalculateLevelWindowForSelectedComponent(), mitk::GPUVolumeMapper3D::SetDefaultProperties(), and mitk::ImageVtkMapper2D::SetDefaultProperties().

◆ SetDefaultBoundaries()

void mitk::LevelWindow::SetDefaultBoundaries ( mitk::ScalarType  low,
mitk::ScalarType  up 
)

set the default Bounderies

Definition at line 168 of file mitkLevelWindow.cpp.

References EnsureConsistency(), IsFixed(), m_DefaultLowerBound, m_DefaultUpperBound, and swap().

Referenced by SetAuto(), SetDefaultLevelWindow(), and SetToImageRange().

◆ SetDefaultLevelWindow()

void mitk::LevelWindow::SetDefaultLevelWindow ( mitk::ScalarType  level,
mitk::ScalarType  window 
)

set the default level and window value

Definition at line 120 of file mitkLevelWindow.cpp.

References SetDefaultBoundaries().

Referenced by LevelWindow(), SetAuto(), and SetToImageRange().

◆ SetFixed()

void mitk::LevelWindow::SetFixed ( bool  fixed)

If a level window is set to fixed, the set and get methods won't accept modifications to the level window settings anymore. This behaviour can be turned of by setting fixed to false;

Definition at line 448 of file mitkLevelWindow.cpp.

References m_Fixed.

Referenced by mitk::LabeledImageLookupTable::LabeledImageLookupTable(), and QmitkLevelWindowWidgetContextMenu::OnSetFixed().

◆ SetFloatingValues()

void mitk::LevelWindow::SetFloatingValues ( bool  value)

Sets the floating image value.

Definition at line 468 of file mitkLevelWindow.cpp.

References m_IsFloatingImage.

◆ SetLevelWindow()

◆ SetRangeMinMax()

◆ SetToImageRange()

◆ SetToMaxWindowSize()

void mitk::LevelWindow::SetToMaxWindowSize ( )

sets the window to its maximum Size in scaleRange

Definition at line 185 of file mitkLevelWindow.cpp.

References m_RangeMax, m_RangeMin, and SetWindowBounds().

Referenced by QmitkLevelWindowWidgetContextMenu::OnSetMaximumWindow().

◆ SetWindowBounds()

Member Data Documentation

◆ m_DefaultLowerBound

ScalarType mitk::LevelWindow::m_DefaultLowerBound
protected

default minimum gray value of the window

Definition at line 227 of file mitkLevelWindow.h.

Referenced by GetDefaultLevel(), GetDefaultLowerBound(), GetDefaultWindow(), operator=(), operator==(), ResetDefaultRangeMinMax(), and SetDefaultBoundaries().

◆ m_DefaultUpperBound

ScalarType mitk::LevelWindow::m_DefaultUpperBound
protected

default maximum gray value of the window

Definition at line 232 of file mitkLevelWindow.h.

Referenced by GetDefaultLevel(), GetDefaultUpperBound(), GetDefaultWindow(), operator=(), operator==(), ResetDefaultRangeMinMax(), and SetDefaultBoundaries().

◆ m_Fixed

bool mitk::LevelWindow::m_Fixed
protected

Defines whether the level window settings may be changed after initialization or not.

Definition at line 243 of file mitkLevelWindow.h.

Referenced by GetFixed(), IsFixed(), operator=(), operator==(), and SetFixed().

◆ m_IsFloatingImage

bool mitk::LevelWindow::m_IsFloatingImage
protected

Image with floating values

Definition at line 237 of file mitkLevelWindow.h.

Referenced by IsFloatingValues(), operator=(), operator==(), SetAuto(), and SetFloatingValues().

◆ m_LowerWindowBound

ScalarType mitk::LevelWindow::m_LowerWindowBound
protected

lower bound of current window

Definition at line 207 of file mitkLevelWindow.h.

Referenced by EnsureConsistency(), GetLevel(), GetLowerWindowBound(), GetWindow(), operator=(), operator==(), and SetWindowBounds().

◆ m_RangeMax

ScalarType mitk::LevelWindow::m_RangeMax
protected

maximum gray value of the window

Definition at line 222 of file mitkLevelWindow.h.

Referenced by EnsureConsistency(), GetRange(), GetRangeMax(), operator=(), operator==(), SetRangeMinMax(), SetToMaxWindowSize(), and SetWindowBounds().

◆ m_RangeMin

ScalarType mitk::LevelWindow::m_RangeMin
protected

minimum gray value of the window

Definition at line 217 of file mitkLevelWindow.h.

Referenced by EnsureConsistency(), GetRange(), GetRangeMin(), operator=(), operator==(), SetRangeMinMax(), SetToMaxWindowSize(), and SetWindowBounds().

◆ m_UpperWindowBound

ScalarType mitk::LevelWindow::m_UpperWindowBound
protected

upper bound of current window

Definition at line 212 of file mitkLevelWindow.h.

Referenced by EnsureConsistency(), GetLevel(), GetUpperWindowBound(), GetWindow(), operator=(), operator==(), and SetWindowBounds().


The documentation for this class was generated from the following files: