18#ifndef itkAdvancedImageMomentsCalculator_h 
   19#define itkAdvancedImageMomentsCalculator_h 
   21#include "itkInPlaceImageFilter.h" 
   22#include "itkBinaryThresholdImageFilter.h" 
   23#include "itkAffineTransform.h" 
   25#include "itkImageMaskSpatialObject.h" 
   29#include <vnl/vnl_vector_fixed.h> 
   30#include <vnl/vnl_matrix_fixed.h> 
   31#include <vnl/vnl_diag_matrix.h> 
   33#include "itkMultiThreaderBase.h" 
   67template <
typename TImage>
 
   90  using VectorType = Vector<ScalarType, Self::ImageDimension>;
 
  100  using MatrixType = Matrix<ScalarType, Self::ImageDimension, Self::ImageDimension>;
 
  117    if (m_Image != image)
 
 
  129    if (m_SpatialObjectMask != so)
 
  131      m_SpatialObjectMask = so;
 
 
  227    this->m_Threader->SetNumberOfWorkUnits(numberOfThreads);
 
 
  249  itkSetMacro(NumberOfSamplesForCenteredTransformInitialization, SizeValueType);
 
  251  itkSetMacro(CenterOfGravityUsesLowerThreshold, 
bool);
 
  257  PrintSelf(std::ostream & os, Indent indent) 
const override;
 
  267  static ITK_THREAD_RETURN_FUNCTION_CALL_CONVENTION
 
  295  itkAlignedTypedef(ITK_CACHE_LINE_ALIGNMENT, PaddedComputePerThreadStruct, AlignedComputePerThreadStruct);
 
  310  MultiThreaderBase::Pointer m_Threader{};
 
  314  mutable std::vector<AlignedComputePerThreadStruct> m_ComputePerThreadVariables{};
 
  315  bool                                               m_UseMultiThread{};
 
  316  SizeValueType                                      m_NumberOfPixelsCounted{};
 
  318  SizeValueType               m_NumberOfSamplesForCenteredTransformInitialization{};
 
  320  bool                        m_CenterOfGravityUsesLowerThreshold{};
 
 
  338#ifndef ITK_MANUAL_INSTANTIATION 
  339#  include "itkAdvancedImageMomentsCalculator.hxx" 
Compute moments of an n-dimensional image.
 
typename ImageType::RegionType ThreadRegionType
 
typename ImageGridSamplerType ::ImageSampleContainerType ImageSampleContainerType
 
virtual void SetImage(const ImageType *image)
 
itkAlignedTypedef(ITK_CACHE_LINE_ALIGNMENT, PaddedComputePerThreadStruct, AlignedComputePerThreadStruct)
 
AffineTransformPointer GetPrincipalAxesToPhysicalAxesTransform() const
 
ScalarType GetTotalMass() const
 
~AdvancedImageMomentsCalculator() override=default
 
itk::BinaryThresholdImageFilter< TImage, TImage > BinaryThresholdImageFilterType
 
itkPadStruct(ITK_CACHE_LINE_ALIGNMENT, ComputePerThreadStruct, PaddedComputePerThreadStruct)
 
itkStaticConstMacro(ImageDimension, unsigned int, TImage::ImageDimension)
 
VectorType GetCenterOfGravity() const
 
void SetNumberOfWorkUnits(ThreadIdType numberOfThreads)
 
virtual void SetSpatialObjectMask(const ImageMaskSpatialObject< Self::ImageDimension > *so)
 
void PrintSelf(std::ostream &os, Indent indent) const override
 
typename ImageType::ConstPointer ImageConstPointer
 
AffineTransformPointer GetPhysicalAxesToPrincipalAxesTransform() const
 
MultiThreaderBase::WorkUnitInfo ThreadInfoType
 
typename ImageSampleContainerType::Pointer ImageSampleContainerPointer
 
AdvancedImageMomentsCalculator(const Self &)
 
void operator=(const Self &)
 
MatrixType GetPrincipalAxes() const
 
virtual void AfterThreadedCompute()
 
static ITK_THREAD_RETURN_FUNCTION_CALL_CONVENTION ComputeThreaderCallback(void *arg)
 
Vector< ScalarType, Self::ImageDimension > VectorType
 
Matrix< ScalarType, Self::ImageDimension, Self::ImageDimension > MatrixType
 
VectorType GetPrincipalMoments() const
 
typename SpatialObjectType::Pointer SpatialObjectPointer
 
typename ImageGridSamplerType::Pointer ImageGridSamplerPointer
 
MatrixType GetSecondMoments() const
 
typename AffineTransformType::Pointer AffineTransformPointer
 
ImageMaskSpatialObject< Self::ImageDimension > SpatialObjectType
 
virtual void BeforeThreadedCompute()
 
virtual void SampleImage(ImageSampleContainerPointer &sampleContainer)
 
void LaunchComputeThreaderCallback() const
 
virtual void ThreadedCompute(ThreadIdType threadID)
 
typename SpatialObjectType::ConstPointer SpatialObjectConstPointer
 
VectorType GetFirstMoments() const
 
SmartPointer< const Self > ConstPointer
 
AdvancedImageMomentsCalculator()
 
typename ImageType::Pointer ImagePointer
 
AffineTransform< double, Self::ImageDimension > AffineTransformType
 
void ComputeSingleThreaded()
 
typename TImage::PixelType InputPixelType
 
AdvancedImageMomentsCalculator< TImage > Self
 
virtual void InitializeThreadingParameters()
 
MatrixType GetCentralMoments() const
 
Samples image voxels on a regular grid.
 
SizeValueType st_NumberOfPixelsCounted