diff --git a/Modules/Filtering/Thresholding/include/itkHistogramThresholdImageFilter.h b/Modules/Filtering/Thresholding/include/itkHistogramThresholdImageFilter.h index a940e7cf5d5..9c8a227394b 100644 --- a/Modules/Filtering/Thresholding/include/itkHistogramThresholdImageFilter.h +++ b/Modules/Filtering/Thresholding/include/itkHistogramThresholdImageFilter.h @@ -20,6 +20,7 @@ #define itkHistogramThresholdImageFilter_h #include "itkImageToImageFilter.h" +#include "itkImageToHistogramFilter.h" #include "itkHistogram.h" #include "itkHistogramThresholdCalculator.h" @@ -111,6 +112,9 @@ class ITK_TEMPLATE_EXPORT HistogramThresholdImageFilter : public ImageToImageFil using CalculatorType = HistogramThresholdCalculator; using CalculatorPointer = typename CalculatorType::Pointer; + using HistogramGeneratorType = Statistics::ImageToHistogramFilter; + using HistogramGeneratorPointer = typename HistogramGeneratorType::Pointer; + /** Image related type alias. */ static constexpr unsigned int InputImageDimension = InputImageType::ImageDimension; static constexpr unsigned int OutputImageDimension = OutputImageType::ImageDimension; @@ -197,6 +201,9 @@ class ITK_TEMPLATE_EXPORT HistogramThresholdImageFilter : public ImageToImageFil void GenerateData() override; + /** Set up the histogram generator. */ + void + SetUpHistogramGenerator(HistogramGeneratorPointer histogramGenerator); void VerifyPreconditions() ITKv5_CONST override diff --git a/Modules/Filtering/Thresholding/include/itkHistogramThresholdImageFilter.hxx b/Modules/Filtering/Thresholding/include/itkHistogramThresholdImageFilter.hxx index c8a86347909..a5e12c3e119 100644 --- a/Modules/Filtering/Thresholding/include/itkHistogramThresholdImageFilter.hxx +++ b/Modules/Filtering/Thresholding/include/itkHistogramThresholdImageFilter.hxx @@ -19,7 +19,6 @@ #define itkHistogramThresholdImageFilter_hxx #include "itkHistogramThresholdImageFilter.h" -#include "itkImageToHistogramFilter.h" #include "itkMaskedImageToHistogramFilter.h" #include "itkBinaryThresholdImageFilter.h" #include "itkMaskImageFilter.h" @@ -55,6 +54,19 @@ HistogramThresholdImageFilter::HistogramT } } +template +void +HistogramThresholdImageFilter::SetUpHistogramGenerator( + HistogramGeneratorPointer histogramGenerator) +{ + histogramGenerator->SetInput(this->GetInput()); + histogramGenerator->SetNumberOfWorkUnits(this->GetNumberOfWorkUnits()); + typename HistogramType::SizeType hsize(this->GetInput()->GetNumberOfComponentsPerPixel()); + hsize.Fill(this->GetNumberOfHistogramBins()); + histogramGenerator->SetHistogramSize(hsize); + histogramGenerator->SetAutoMinimumMaximum(this->GetAutoMinimumMaximum()); +} + template void HistogramThresholdImageFilter::GenerateData() @@ -62,40 +74,32 @@ HistogramThresholdImageFilter::GenerateDa typename ProgressAccumulator::Pointer progress = ProgressAccumulator::New(); progress->SetMiniPipelineFilter(this); - using HistogramGeneratorType = itk::Statistics::ImageToHistogramFilter; - typename HistogramGeneratorType::Pointer histogramGenerator = HistogramGeneratorType::New(); + HistogramGeneratorPointer histogramGenerator = HistogramGeneratorType::New(); - using MaskedHistogramGeneratorType = itk::Statistics::MaskedImageToHistogramFilter; - typename MaskedHistogramGeneratorType::Pointer maskedhistogramGenerator = MaskedHistogramGeneratorType::New(); + using MaskedHistogramGeneratorType = Statistics::MaskedImageToHistogramFilter; + typename MaskedHistogramGeneratorType::Pointer maskedHistogramGenerator = MaskedHistogramGeneratorType::New(); if (this->GetMaskImage()) { - maskedhistogramGenerator->SetInput(this->GetInput()); - maskedhistogramGenerator->SetMaskImage(this->GetMaskImage()); - maskedhistogramGenerator->SetNumberOfWorkUnits(this->GetNumberOfWorkUnits()); - typename HistogramType::SizeType hsize(this->GetInput()->GetNumberOfComponentsPerPixel()); - hsize.Fill(this->GetNumberOfHistogramBins()); - maskedhistogramGenerator->SetHistogramSize(hsize); - maskedhistogramGenerator->SetAutoMinimumMaximum(this->GetAutoMinimumMaximum()); - maskedhistogramGenerator->SetMaskValue(this->GetMaskValue()); - progress->RegisterInternalFilter(maskedhistogramGenerator, .4f); - - m_Calculator->SetInput(maskedhistogramGenerator->GetOutput()); - m_Calculator->SetNumberOfWorkUnits(this->GetNumberOfWorkUnits()); + this->SetUpHistogramGenerator(maskedHistogramGenerator); + + maskedHistogramGenerator->SetMaskImage(this->GetMaskImage()); + maskedHistogramGenerator->SetMaskValue(this->GetMaskValue()); + + progress->RegisterInternalFilter(maskedHistogramGenerator, .4f); + + m_Calculator->SetInput(maskedHistogramGenerator->GetOutput()); } else { - histogramGenerator->SetInput(this->GetInput()); - histogramGenerator->SetNumberOfWorkUnits(this->GetNumberOfWorkUnits()); - typename HistogramType::SizeType hsize(this->GetInput()->GetNumberOfComponentsPerPixel()); - hsize.Fill(this->GetNumberOfHistogramBins()); - histogramGenerator->SetHistogramSize(hsize); - histogramGenerator->SetAutoMinimumMaximum(this->GetAutoMinimumMaximum()); + this->SetUpHistogramGenerator(histogramGenerator); + progress->RegisterInternalFilter(histogramGenerator, .4f); m_Calculator->SetInput(histogramGenerator->GetOutput()); - m_Calculator->SetNumberOfWorkUnits(this->GetNumberOfWorkUnits()); } + + m_Calculator->SetNumberOfWorkUnits(this->GetNumberOfWorkUnits()); progress->RegisterInternalFilter(m_Calculator, .2f); using ThresholderType = BinaryThresholdImageFilter;