18#ifndef itkGenericMultiResolutionPyramidImageFilter_h
19#define itkGenericMultiResolutionPyramidImageFilter_h
21#include "itkMultiResolutionPyramidImageFilter.h"
22#include "itkSmoothingRecursiveGaussianImageFilter.h"
116template <
class TInputImage,
class TOutputImage,
class TPrecisionType =
double>
118 :
public MultiResolutionPyramidImageFilter<TInputImage, TOutputImage>
125 using Superclass = MultiResolutionPyramidImageFilter<TInputImage, TOutputImage>;
141 using typename Superclass::ScheduleType;
142 using typename Superclass::InputImageType;
143 using typename Superclass::OutputImageType;
144 using typename Superclass::InputImagePointer;
145 using typename Superclass::OutputImagePointer;
146 using typename Superclass::InputImageConstPointer;
147 using SpacingType =
typename Superclass::InputImageType::SpacingType;
148 using PixelType =
typename InputImageType::PixelType;
187 return this->m_Schedule;
219 itkGetConstReferenceMacro(CurrentLevel,
unsigned int);
225 itkGetConstMacro(ComputeOnlyForCurrentLevel,
bool);
226 itkBooleanMacro(ComputeOnlyForCurrentLevel);
228#ifdef ITK_USE_CONCEPT_CHECKING
230 itkConceptMacro(SameDimensionCheck, (Concept::SameDimension<ImageDimension, OutputImageDimension>));
231 itkConceptMacro(OutputHasNumericTraitsCheck, (Concept::HasNumericTraits<typename TOutputImage::PixelType>));
241 PrintSelf(std::ostream & os, Indent indent)
const override;
282 using SmootherType = SmoothingRecursiveGaussianImageFilter<InputImageType, OutputImageType>;
296 typename SmootherType::Pointer & smoother,
297 const InputImageConstPointer & input);
304 typename SmootherType::Pointer & smoother,
306 const InputImageConstPointer & input,
307 const OutputImagePointer & outputPtr,
308 typename ImageToImageFilterSameTypes::Pointer & rescaleSameTypes,
309 typename ImageToImageFilterDifferentTypes::Pointer & rescaleDifferentTypes);
315 const OutputImagePointer & outputPtr,
316 typename ImageToImageFilterSameTypes::Pointer & rescaleSameTypes,
317 typename ImageToImageFilterDifferentTypes::Pointer & rescaleDifferentTypes);
332 const unsigned int dim,
333 const unsigned int * factors,
367#ifndef ITK_MANUAL_INSTANTIATION
368# include "itkGenericMultiResolutionPyramidImageFilter.hxx"
Framework for creating images in a multi-resolution pyramid.
~GenericMultiResolutionPyramidImageFilter() override=default
void SetSmoothingScheduleToDefault()
const RescaleScheduleType & GetRescaleSchedule() const
ImageToImageFilter< OutputImageType, OutputImageType > ImageToImageFilterSameTypes
virtual void SetComputeOnlyForCurrentLevel(const bool _arg)
GenericMultiResolutionPyramidImageFilter()
bool AreRescaleFactorsAllOnes(const RescaleFactorArrayType &rescaleFactorArray) const
FixedArray< ScalarRealType, Self::ImageDimension > SigmaArrayType
typename Superclass::InputImageType::SpacingType SpacingType
virtual void SetSmoothingSchedule(const SmoothingScheduleType &schedule)
MultiResolutionPyramidImageFilter< TInputImage, TOutputImage > Superclass
bool m_ComputeOnlyForCurrentLevel
ITK_DISALLOW_COPY_AND_MOVE(GenericMultiResolutionPyramidImageFilter)
ScheduleType RescaleScheduleType
void GenerateOutputInformation() override
bool IsRescaleUsed() const
virtual void SetRescaleSchedule(const RescaleScheduleType &schedule)
virtual void SetSmoothingScheduleToZero()
bool IsSmoothingUsed() const
bool ComputeForCurrentLevel(const unsigned int level) const
double GetDefaultSigma(const unsigned int level, const unsigned int dim, const unsigned int *factors, const SpacingType &spacing) const
void GetShrinkFactors(const unsigned int level, RescaleFactorArrayType &shrinkFactors) const
void GenerateData() override
int SetupShrinkerOrResampler(const unsigned int level, typename SmootherType::Pointer &smoother, const bool sameType, const InputImageConstPointer &input, const OutputImagePointer &outputPtr, typename ImageToImageFilterSameTypes::Pointer &rescaleSameTypes, typename ImageToImageFilterDifferentTypes::Pointer &rescaleDifferentTypes)
SigmaArrayType RescaleFactorArrayType
typename Superclass::Superclass SuperSuperclass
itkStaticConstMacro(ImageDimension, unsigned int, TInputImage::ImageDimension)
SmoothingScheduleType m_SmoothingSchedule
virtual void SetCurrentLevel(unsigned int level)
SmoothingRecursiveGaussianImageFilter< InputImageType, OutputImageType > SmootherType
void GenerateOutputRequestedRegion(DataObject *output) override
unsigned int m_CurrentLevel
itkStaticConstMacro(OutputImageDimension, unsigned int, TOutputImage::ImageDimension)
void GetSigma(const unsigned int level, SigmaArrayType &sigmaArray) const
ImageToImageFilter< InputImageType, OutputImageType > ImageToImageFilterDifferentTypes
void SetSchedule(const ScheduleType &schedule) override
bool AreSigmasAllZeros(const SigmaArrayType &sigmaArray) const
typename NumericTraits< PixelType >::ScalarRealType ScalarRealType
bool SetupSmoother(const unsigned int level, typename SmootherType::Pointer &smoother, const InputImageConstPointer &input)
bool m_SmoothingScheduleDefined
SmartPointer< const Self > ConstPointer
void DefineShrinkerOrResampler(const bool sameType, const RescaleFactorArrayType &shrinkFactors, const OutputImagePointer &outputPtr, typename ImageToImageFilterSameTypes::Pointer &rescaleSameTypes, typename ImageToImageFilterDifferentTypes::Pointer &rescaleDifferentTypes)
void PrintSelf(std::ostream &os, Indent indent) const override
virtual void SetRescaleScheduleToUnity()
void SetNumberOfLevels(unsigned int num) override
void GenerateInputRequestedRegion() override