SimpleITK
|
This filter performs a pixelwise combination of an arbitrary number of input images, where each of them represents a segmentation of the same scene (i.e., image). More...
#include <sitkMultiLabelSTAPLEImageFilter.h>
This filter performs a pixelwise combination of an arbitrary number of input images, where each of them represents a segmentation of the same scene (i.e., image).
The labelings in the images are weighted relative to each other based on their "performance" as estimated by an expectation-maximization algorithm. In the process, a ground truth segmentation is estimated, and the estimated performances of the individual segmentations are relative to this estimated ground truth.
The algorithm is based on the binary STAPLE algorithm by Warfield et al. as published originally in
S. Warfield, K. Zou, W. Wells, "Validation of image segmentation and expert quality with an expectation-maximization algorithm" in MICCAI 2002: Fifth International Conference on Medical Image Computing and Computer-Assisted Intervention, Springer-Verlag, Heidelberg, Germany, 2002, pp. 298-306
The multi-label algorithm implemented here is described in detail in
T. Rohlfing, D. B. Russakoff, and C. R. Maurer, Jr., "Performance-based classifier combination in atlas-based image segmentation using expectation-maximization parameter estimation," IEEE Transactions on Medical Imaging, vol. 23, pp. 983-994, Aug. 2004.
Input volumes must all contain the same size RequestedRegions. Not all input images must contain all possible labels, but all label values must have the same meaning in all images.
The filter can optionally be provided with estimates for the a priori class probabilities through the SetPriorProbabilities function. If no estimate is provided, one is automatically generated by analyzing the relative frequencies of the labels in the input images.
By default, the label used for undecided pixels is the maximum label value used in the input images plus one. Since it is possible for an image with 8 bit pixel values to use all 256 possible label values, it is permissible to combine 8 bit (i.e., byte) images into a 16 bit (i.e., short) output image.
In addition to the combined image, the estimated confusion matrices for each of the input segmentations can be obtained through the GetConfusionMatrix member function.
A termination threshold for the EM iteration can be defined by calling SetTerminationUpdateThreshold. The iteration terminates once no single parameter of any confusion matrix changes by less than this threshold. Alternatively, a maximum number of iterations can be specified by calling SetMaximumNumberOfIterations. The algorithm may still terminate after a smaller number of iterations if the termination threshold criterion is satisfied.
Definition at line 81 of file sitkMultiLabelSTAPLEImageFilter.h.
Public Types | |
using | PixelIDTypeList = UnsignedIntegerPixelIDTypeList |
using | Self = MultiLabelSTAPLEImageFilter |
![]() | |
using | Self = ImageFilter |
![]() | |
using | Self = ProcessObject |
Public Member Functions | |
Image | Execute (const Image &image1) |
Image | Execute (const Image &image1, const Image &image2) |
Image | Execute (const Image &image1, const Image &image2, const Image &image3) |
Image | Execute (const Image &image1, const Image &image2, const Image &image3, const Image &image4) |
Image | Execute (const Image &image1, const Image &image2, const Image &image3, const Image &image4, const Image &image5) |
Image | Execute (const std::vector< Image > &images) |
std::vector< float > | GetConfusionMatrix (unsigned int input) const |
uint64_t | GetLabelForUndecidedPixels () const |
unsigned int | GetMaximumNumberOfIterations () const |
std::string | GetName () const |
std::vector< float > | GetPriorProbabilities () const |
float | GetTerminationUpdateThreshold () const |
MultiLabelSTAPLEImageFilter () | |
Self & | SetLabelForUndecidedPixels (uint64_t LabelForUndecidedPixels) |
Self & | SetMaximumNumberOfIterations (unsigned int MaximumNumberOfIterations) |
Self & | SetPriorProbabilities (std::vector< float > PriorProbabilities) |
Self & | SetTerminationUpdateThreshold (float TerminationUpdateThreshold) |
std::string | ToString () const |
virtual | ~MultiLabelSTAPLEImageFilter () |
![]() | |
ImageFilter () | |
virtual | ~ImageFilter ()=0 |
![]() | |
virtual void | Abort () |
virtual int | AddCommand (itk::simple::EventEnum event, const std::function< void()> &func) |
Directly add a callback to observe an event. | |
virtual int | AddCommand (itk::simple::EventEnum event, itk::simple::Command &cmd) |
Add a Command Object to observer the event. | |
virtual float | GetProgress () const |
An Active Measurement of the progress of execution. | |
virtual bool | HasCommand (itk::simple::EventEnum event) const |
Query of this object has any registered commands for event. | |
ProcessObject () | |
virtual void | RemoveAllCommands () |
Remove all registered commands. | |
virtual | ~ProcessObject () |
virtual void | DebugOn () |
virtual void | DebugOff () |
virtual bool | GetDebug () const |
virtual void | SetDebug (bool debugFlag) |
virtual void | SetNumberOfThreads (unsigned int n) |
virtual unsigned int | GetNumberOfThreads () const |
virtual void | SetNumberOfWorkUnits (unsigned int n) |
virtual unsigned int | GetNumberOfWorkUnits () const |
Private Types | |
using | MemberFunctionType = Image (Self::*)( const std::vector<Image> & ) |
Private Member Functions | |
template<class TImageType> | |
Image | ExecuteInternal (const std::vector< Image > &images) |
Private Attributes | |
itk::ProcessObject * | m_Filter {nullptr} |
uint64_t | m_LabelForUndecidedPixels {std::numeric_limits<uint64_t>::max()} |
unsigned int | m_MaximumNumberOfIterations {std::numeric_limits<unsigned int>::max()} |
std::unique_ptr< detail::MemberFunctionFactory< MemberFunctionType > > | m_MemberFactory |
std::function< std::vector< float >(unsigned int)> | m_pfGetConfusionMatrix |
std::vector< float > | m_PriorProbabilities {std::vector<float>()} |
float | m_TerminationUpdateThreshold {1e-5f} |
Friends | |
struct | detail::MemberFunctionAddressor< MemberFunctionType > |
Additional Inherited Members | |
![]() | |
static bool | GetGlobalDefaultDebug () |
static void | GlobalDefaultDebugOff () |
static void | GlobalDefaultDebugOn () |
static void | SetGlobalDefaultDebug (bool debugFlag) |
static void | GlobalWarningDisplayOn () |
static void | GlobalWarningDisplayOff () |
static void | SetGlobalWarningDisplay (bool flag) |
static bool | GetGlobalWarningDisplay () |
static double | GetGlobalDefaultCoordinateTolerance () |
Access the global tolerance to determine congruent spaces. | |
static void | SetGlobalDefaultCoordinateTolerance (double) |
Access the global tolerance to determine congruent spaces. | |
static double | GetGlobalDefaultDirectionTolerance () |
Access the global tolerance to determine congruent spaces. | |
static void | SetGlobalDefaultDirectionTolerance (double) |
Access the global tolerance to determine congruent spaces. | |
static bool | SetGlobalDefaultThreader (const std::string &threader) |
Set/Get the default threader used for process objects. | |
static std::string | GetGlobalDefaultThreader () |
Set/Get the default threader used for process objects. | |
static void | SetGlobalDefaultNumberOfThreads (unsigned int n) |
static unsigned int | GetGlobalDefaultNumberOfThreads () |
Set/Get the default threader used for process objects. | |
![]() | |
void | CheckImageMatchingDimension (const Image &image1, const Image &image2, const std::string &image2Name) |
void | CheckImageMatchingPixelType (const Image &image1, const Image &image2, const std::string &image2Name) |
void | CheckImageMatchingSize (const Image &image1, const Image &image2, const std::string &image2Name) |
![]() | |
virtual unsigned long | AddITKObserver (const itk::EventObject &, itk::Command *) |
virtual itk::ProcessObject * | GetActiveProcess () |
virtual void | OnActiveProcessDelete () |
virtual void | onCommandDelete (const itk::simple::Command *cmd) noexcept |
virtual void | PreUpdate (itk::ProcessObject *p) |
virtual void | RemoveITKObserver (EventCommand &e) |
![]() | |
NonCopyable ()=default | |
NonCopyable (const NonCopyable &)=delete | |
NonCopyable & | operator= (const NonCopyable &)=delete |
![]() | |
template<class TImageType> | |
static void | FixNonZeroIndex (TImageType *img) |
![]() | |
template<class TImageType> | |
static TImageType::ConstPointer | CastImageToITK (const Image &img) |
template<class TPixelType, unsigned int VImageDimension, unsigned int VLength, template< typename, unsigned int > class TVector> | |
static Image | CastITKToImage (itk::Image< TVector< TPixelType, VLength >, VImageDimension > *img) |
template<unsigned int VImageDimension, unsigned int VLength, template< unsigned int > class TVector> | |
static Image | CastITKToImage (itk::Image< TVector< VLength >, VImageDimension > *img) |
template<class TImageType> | |
static Image | CastITKToImage (TImageType *img) |
static const itk::EventObject & | GetITKEventObject (EventEnum e) |
template<typename T> | |
static std::ostream & | ToStringHelper (std::ostream &os, const T &v) |
static std::ostream & | ToStringHelper (std::ostream &os, const char &v) |
static std::ostream & | ToStringHelper (std::ostream &os, const signed char &v) |
static std::ostream & | ToStringHelper (std::ostream &os, const unsigned char &v) |
|
private |
Setup for member function dispatching
Definition at line 177 of file sitkMultiLabelSTAPLEImageFilter.h.
Define the pixels types supported by this filter
Definition at line 96 of file sitkMultiLabelSTAPLEImageFilter.h.
Definition at line 85 of file sitkMultiLabelSTAPLEImageFilter.h.
|
virtual |
Destructor
itk::simple::MultiLabelSTAPLEImageFilter::MultiLabelSTAPLEImageFilter | ( | ) |
Default Constructor that takes no arguments and initializes default parameters
Image itk::simple::MultiLabelSTAPLEImageFilter::Execute | ( | const Image & | image1, |
const Image & | image2 ) |
Image itk::simple::MultiLabelSTAPLEImageFilter::Execute | ( | const Image & | image1, |
const Image & | image2, | ||
const Image & | image3 ) |
Image itk::simple::MultiLabelSTAPLEImageFilter::Execute | ( | const Image & | image1, |
const Image & | image2, | ||
const Image & | image3, | ||
const Image & | image4 ) |
Image itk::simple::MultiLabelSTAPLEImageFilter::Execute | ( | const Image & | image1, |
const Image & | image2, | ||
const Image & | image3, | ||
const Image & | image4, | ||
const Image & | image5 ) |
Execute the filter on the input images
References itk::images.
|
private |
Referenced by detail::MemberFunctionAddressor< MemberFunctionType >.
|
inline |
Get confusion matrix for the i-th input segmentation.
This is an active measurement. It may be accessed while the filter is being executing in command call-backs and can be accessed after execution.
Definition at line 153 of file sitkMultiLabelSTAPLEImageFilter.h.
References m_pfGetConfusionMatrix.
|
inline |
Get label value used for undecided pixels.
After updating the filter, this function returns the actual label value used for undecided pixels in the current output. Note that this value is overwritten when SetLabelForUndecidedPixels is called and the new value only becomes effective upon the next filter update.
Definition at line 111 of file sitkMultiLabelSTAPLEImageFilter.h.
References m_LabelForUndecidedPixels.
|
inline |
Set maximum number of iterations.
Definition at line 131 of file sitkMultiLabelSTAPLEImageFilter.h.
References m_MaximumNumberOfIterations.
|
inlinevirtual |
Name of this class
Implements itk::simple::ProcessObject.
Definition at line 157 of file sitkMultiLabelSTAPLEImageFilter.h.
|
inline |
Get prior class probabilities.
After updating the filter, this function returns the actual prior class probabilities. If these were not previously set by a call to SetPriorProbabilities, then they are estimated from the input segmentations and the result is available through this function.
Definition at line 145 of file sitkMultiLabelSTAPLEImageFilter.h.
References m_PriorProbabilities.
|
inline |
Set termination threshold based on confusion matrix parameter updates.
Definition at line 121 of file sitkMultiLabelSTAPLEImageFilter.h.
References m_TerminationUpdateThreshold.
|
inline |
Set label value for undecided pixels.
Definition at line 104 of file sitkMultiLabelSTAPLEImageFilter.h.
References m_LabelForUndecidedPixels.
|
inline |
Set maximum number of iterations.
Definition at line 126 of file sitkMultiLabelSTAPLEImageFilter.h.
References m_MaximumNumberOfIterations.
|
inline |
Set manual estimates for the a priori class probabilities. The size of the array must be greater than the value of the
largest label. The index into the array corresponds to the label value in the segmented image for the class.
Definition at line 138 of file sitkMultiLabelSTAPLEImageFilter.h.
References m_PriorProbabilities.
|
inline |
Set termination threshold based on confusion matrix parameter updates.
Definition at line 116 of file sitkMultiLabelSTAPLEImageFilter.h.
References m_TerminationUpdateThreshold.
|
virtual |
Print ourselves out
Reimplemented from itk::simple::ProcessObject.
|
friend |
Definition at line 178 of file sitkMultiLabelSTAPLEImageFilter.h.
References ExecuteInternal(), and itk::images.
|
private |
Definition at line 199 of file sitkMultiLabelSTAPLEImageFilter.h.
|
private |
Definition at line 187 of file sitkMultiLabelSTAPLEImageFilter.h.
Referenced by GetLabelForUndecidedPixels(), and SetLabelForUndecidedPixels().
|
private |
Definition at line 191 of file sitkMultiLabelSTAPLEImageFilter.h.
Referenced by GetMaximumNumberOfIterations(), and SetMaximumNumberOfIterations().
|
private |
Definition at line 184 of file sitkMultiLabelSTAPLEImageFilter.h.
|
private |
Definition at line 196 of file sitkMultiLabelSTAPLEImageFilter.h.
Referenced by GetConfusionMatrix().
|
private |
Definition at line 193 of file sitkMultiLabelSTAPLEImageFilter.h.
Referenced by GetPriorProbabilities(), and SetPriorProbabilities().
|
private |
Definition at line 189 of file sitkMultiLabelSTAPLEImageFilter.h.
Referenced by GetTerminationUpdateThreshold(), and SetTerminationUpdateThreshold().