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
void ComputeSingleThreaded()
typename TImage::PixelType InputPixelType
virtual void InitializeThreadingParameters()
MatrixType GetCentralMoments() const
Samples image voxels on a regular grid.
SizeValueType st_NumberOfPixelsCounted