Skip to content

Commit 3180a2f

Browse files
committed
PERF: Use ImageRegionIterator without "WithIndex" in *.hxx files
Replaced `ImageRegionIteratorWithIndex` with `ImageRegionIterator`, and replaced `ImageRegionConstIteratorWithIndex` with `ImageRegionConstIterator`, in cases where the index of the iterator was not used. When the index is not needed, `ImageRegionIterator` and `ImageRegionConstIterator` are _much_ faster than the corresponding iterators "with index"! Aims to speed up the following filters: - BinomialBlurImageFilter - EigenAnalysis2DImageFilter - GradientRecursiveGaussianImageFilter - HessianRecursiveGaussianImageFilter - HoughTransform2DLinesImageFilter - VoronoiPartitioningImageFilter - VoronoiSegmentationImageFilter - VoronoiSegmentationImageFilterBase - VoronoiSegmentationRGBImageFilter As well as: - GradientDifferenceImageToImageMetric - MetaImageConverter - PeakSignalToNoiseRatioCalculator - RobustAutomaticThresholdCalculator Found by regular expression ` ImageRegionIteratorWithIndex(?!.*\.GetIndex\(\))` and ` ImageRegionConstIteratorWithIndex(?!.*\.GetIndex\(\))`. Excluded `ImageRegionIteratorWithIndex<OutputImageAdaptorType>`, to avoid test failures.
1 parent cb8465d commit 3180a2f

13 files changed

Lines changed: 48 additions & 49 deletions

Modules/Core/SpatialObjects/include/itkMetaImageConverter.hxx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
#define itkMetaImageConverter_hxx
2020

2121
#include "itkImageRegionIterator.h"
22-
#include "itkImageRegionIteratorWithIndex.h"
2322
#include "itkMath.h"
2423

2524
namespace itk
@@ -105,7 +104,7 @@ MetaImageConverter<VDimension, PixelType, TSpatialObjectType>::MetaObjectToSpati
105104

106105
this->MetaObjectToSpatialObjectBase(imageMO, imageSO);
107106

108-
ImageRegionIteratorWithIndex<ImageType> it(myImage, myImage->GetLargestPossibleRegion());
107+
ImageRegionIterator<ImageType> it(myImage, myImage->GetLargestPossibleRegion());
109108
for (unsigned int i = 0; !it.IsAtEnd(); i++, ++it)
110109
{
111110
it.Set(static_cast<typename ImageType::PixelType>(imageMO->ElementData(i)));

Modules/Filtering/ImageFeature/include/itkHessianRecursiveGaussianImageFilter.hxx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#ifndef itkHessianRecursiveGaussianImageFilter_hxx
1919
#define itkHessianRecursiveGaussianImageFilter_hxx
2020

21+
#include "itkImageRegionIterator.h"
2122
#include "itkImageRegionIteratorWithIndex.h"
2223
#include "itkProgressAccumulator.h"
2324
#include <algorithm> // For generate.
@@ -285,7 +286,7 @@ HessianRecursiveGaussianImageFilter<TInputImage, TOutputImage>::GenerateData()
285286
// on the output image of vectors
286287
m_ImageAdaptor->SelectNthElement(element++);
287288

288-
ImageRegionIteratorWithIndex<RealImageType> it(derivativeImage, derivativeImage->GetRequestedRegion());
289+
ImageRegionIterator<RealImageType> it(derivativeImage, derivativeImage->GetRequestedRegion());
289290

290291
ImageRegionIteratorWithIndex<OutputImageAdaptorType> ot(m_ImageAdaptor, m_ImageAdaptor->GetRequestedRegion());
291292

Modules/Filtering/ImageFeature/include/itkHoughTransform2DLinesImageFilter.hxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#ifndef itkHoughTransform2DLinesImageFilter_hxx
1919
#define itkHoughTransform2DLinesImageFilter_hxx
2020

21-
#include "itkImageRegionIteratorWithIndex.h"
21+
#include "itkImageRegionIterator.h"
2222
#include "itkDiscreteGaussianImageFilter.h"
2323
#include "itkMinimumMaximumImageCalculator.h"
2424
#include "itkCastImageFilter.h"
@@ -196,9 +196,9 @@ HoughTransform2DLinesImageFilter<TInputPixelType, TOutputPixelType>::Simplify()
196196
++image_it;
197197
}
198198

199-
ImageRegionConstIteratorWithIndex<OutputImageType> accusimple_it(m_SimplifyAccumulator,
200-
m_SimplifyAccumulator->GetRequestedRegion());
201-
ImageRegionIteratorWithIndex<OutputImageType> accu_it(outputImage, outputImage->GetRequestedRegion());
199+
ImageRegionConstIterator<OutputImageType> accusimple_it(m_SimplifyAccumulator,
200+
m_SimplifyAccumulator->GetRequestedRegion());
201+
ImageRegionIterator<OutputImageType> accu_it(outputImage, outputImage->GetRequestedRegion());
202202

203203
while (!accusimple_it.IsAtEnd())
204204
{

Modules/Filtering/ImageGradient/include/itkGradientRecursiveGaussianImageFilter.hxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ GradientRecursiveGaussianImageFilter<TInputImage, TOutputImage>::GenerateData()
239239
// on the output image of vectors
240240
m_ImageAdaptor->SelectNthElement(nc * ImageDimension + dim);
241241

242-
ImageRegionIteratorWithIndex<RealImageType> it(derivativeImage, derivativeImage->GetRequestedRegion());
242+
ImageRegionIterator<RealImageType> it(derivativeImage, derivativeImage->GetRequestedRegion());
243243

244244
ImageRegionIteratorWithIndex<OutputImageAdaptorType> ot(m_ImageAdaptor, m_ImageAdaptor->GetRequestedRegion());
245245

Modules/Filtering/ImageNoise/test/itkPeakSignalToNoiseRatioCalculator.hxx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
#define itkPeakSignalToNoiseRatioCalculator_hxx
2020

2121

22-
#include "itkImageRegionConstIteratorWithIndex.h"
2322
#include "itkImageRegionConstIterator.h"
2423

2524
namespace itk
@@ -53,8 +52,8 @@ PeakSignalToNoiseRatioCalculator<TInputImage>::Compute()
5352
return;
5453
}
5554

56-
ImageRegionConstIteratorWithIndex<InputImageType> iIt(m_Image, m_Image->GetRequestedRegion());
57-
ImageRegionConstIteratorWithIndex<InputImageType> nIt(m_NoisyImage, m_NoisyImage->GetRequestedRegion());
55+
ImageRegionConstIterator<InputImageType> iIt(m_Image, m_Image->GetRequestedRegion());
56+
ImageRegionConstIterator<InputImageType> nIt(m_NoisyImage, m_NoisyImage->GetRequestedRegion());
5857

5958
// init the values
6059
double mse = 0;

Modules/Filtering/Smoothing/include/itkBinomialBlurImageFilter.hxx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "itkProgressReporter.h"
2323
#include "itkImageRegion.h"
2424
#include "itkImageRegionConstIterator.h"
25+
#include "itkImageRegionIterator.h"
2526
#include "itkImageRegionIteratorWithIndex.h"
2627
#include "itkImageRegionReverseIterator.h"
2728
#include <algorithm> // For min and max.
@@ -228,8 +229,8 @@ BinomialBlurImageFilter<TInputImage, TOutputImage>::GenerateData()
228229
// buffer iterator walks a region defined by the output
229230
using OutputIterator = ImageRegionIterator<TOutputImage>;
230231

231-
OutputIterator outIt(outputPtr, outputPtr->GetRequestedRegion());
232-
ImageRegionIteratorWithIndex<TTempImage> tempIt2(tempPtr, outputPtr->GetRequestedRegion());
232+
OutputIterator outIt(outputPtr, outputPtr->GetRequestedRegion());
233+
ImageRegionIterator<TTempImage> tempIt2(tempPtr, outputPtr->GetRequestedRegion());
233234

234235
for (outIt.GoToBegin(), tempIt2.GoToBegin(); !outIt.IsAtEnd(); ++outIt, ++tempIt2)
235236
{

Modules/Nonunit/Review/include/itkRobustAutomaticThresholdCalculator.hxx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
#ifndef itkRobustAutomaticThresholdCalculator_hxx
1919
#define itkRobustAutomaticThresholdCalculator_hxx
2020

21-
#include "itkImageRegionConstIteratorWithIndex.h"
2221
#include "itkImageRegionConstIterator.h"
2322

2423

@@ -38,8 +37,8 @@ RobustAutomaticThresholdCalculator<TInputImage, TGradientImage>::Compute()
3837
itkExceptionStringMacro("Input or gradient image(s) not set.");
3938
}
4039

41-
ImageRegionConstIteratorWithIndex<InputImageType> iIt(m_Input, m_Input->GetRequestedRegion());
42-
ImageRegionConstIteratorWithIndex<GradientImageType> gIt(m_Gradient, m_Gradient->GetRequestedRegion());
40+
ImageRegionConstIterator<InputImageType> iIt(m_Input, m_Input->GetRequestedRegion());
41+
ImageRegionConstIterator<GradientImageType> gIt(m_Gradient, m_Gradient->GetRequestedRegion());
4342

4443
// Init the values
4544
double n = 0;

Modules/Numerics/Eigen/include/itkEigenAnalysis2DImageFilter.hxx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#ifndef itkEigenAnalysis2DImageFilter_hxx
1919
#define itkEigenAnalysis2DImageFilter_hxx
2020

21-
#include "itkImageRegionIteratorWithIndex.h"
21+
#include "itkImageRegionIterator.h"
2222
#include "itkProgressReporter.h"
2323

2424
namespace itk
@@ -136,13 +136,13 @@ EigenAnalysis2DImageFilter<TInputImage, TEigenValueImage, TEigenVectorImage>::Ge
136136

137137
const EigenValueImageRegionType region = outputPtr1->GetRequestedRegion();
138138

139-
ImageRegionConstIteratorWithIndex<TInputImage> inputIt1(inputPtr1, region);
140-
ImageRegionConstIteratorWithIndex<TInputImage> inputIt2(inputPtr2, region);
141-
ImageRegionConstIteratorWithIndex<TInputImage> inputIt3(inputPtr3, region);
139+
ImageRegionConstIterator<TInputImage> inputIt1(inputPtr1, region);
140+
ImageRegionConstIterator<TInputImage> inputIt2(inputPtr2, region);
141+
ImageRegionConstIterator<TInputImage> inputIt3(inputPtr3, region);
142142

143-
ImageRegionIteratorWithIndex<EigenValueImageType> outputIt1(outputPtr1, region);
144-
ImageRegionIteratorWithIndex<EigenValueImageType> outputIt2(outputPtr2, region);
145-
ImageRegionIteratorWithIndex<EigenVectorImageType> outputIt3(outputPtr3, region);
143+
ImageRegionIterator<EigenValueImageType> outputIt1(outputPtr1, region);
144+
ImageRegionIterator<EigenValueImageType> outputIt2(outputPtr2, region);
145+
ImageRegionIterator<EigenVectorImageType> outputIt3(outputPtr3, region);
146146

147147
constexpr EigenVectorType nullVector{};
148148

Modules/Registration/Common/include/itkGradientDifferenceImageToImageMetric.hxx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#ifndef itkGradientDifferenceImageToImageMetric_hxx
1919
#define itkGradientDifferenceImageToImageMetric_hxx
2020

21-
#include "itkImageRegionConstIteratorWithIndex.h"
21+
#include "itkImageRegionConstIterator.h"
2222
#include "itkNumericTraits.h"
2323
#include "itkMath.h"
2424

@@ -203,8 +203,8 @@ GradientDifferenceImageToImageMetric<TFixedImage, TMovingImage>::ComputeMovedGra
203203
for (iDimension = 0; iDimension < FixedImageDimension; ++iDimension)
204204
{
205205

206-
ImageRegionConstIteratorWithIndex<MovedGradientImageType> iterate(m_MovedSobelFilters[iDimension]->GetOutput(),
207-
this->GetFixedImageRegion());
206+
ImageRegionConstIterator<MovedGradientImageType> iterate(m_MovedSobelFilters[iDimension]->GetOutput(),
207+
this->GetFixedImageRegion());
208208

209209
gradient = iterate.Get();
210210

@@ -242,8 +242,8 @@ GradientDifferenceImageToImageMetric<TFixedImage, TMovingImage>::ComputeVariance
242242
for (iDimension = 0; iDimension < FixedImageDimension; ++iDimension)
243243
{
244244

245-
ImageRegionConstIteratorWithIndex<FixedGradientImageType> iterate(m_FixedSobelFilters[iDimension]->GetOutput(),
246-
this->GetFixedImageRegion());
245+
ImageRegionConstIterator<FixedGradientImageType> iterate(m_FixedSobelFilters[iDimension]->GetOutput(),
246+
this->GetFixedImageRegion());
247247

248248
// Calculate the mean gradients
249249

@@ -330,12 +330,12 @@ GradientDifferenceImageToImageMetric<TFixedImage, TMovingImage>::ComputeMeasure(
330330
MovedGradientPixelType diff;
331331

332332

333-
ImageRegionConstIteratorWithIndex<FixedGradientImageType> fixedIterator(
334-
m_FixedSobelFilters[iDimension]->GetOutput(), this->GetFixedImageRegion());
333+
ImageRegionConstIterator<FixedGradientImageType> fixedIterator(m_FixedSobelFilters[iDimension]->GetOutput(),
334+
this->GetFixedImageRegion());
335335

336336

337-
ImageRegionConstIteratorWithIndex<MovedGradientImageType> movedIterator(
338-
m_MovedSobelFilters[iDimension]->GetOutput(), this->GetFixedImageRegion());
337+
ImageRegionConstIterator<MovedGradientImageType> movedIterator(m_MovedSobelFilters[iDimension]->GetOutput(),
338+
this->GetFixedImageRegion());
339339

340340
m_FixedSobelFilters[iDimension]->UpdateLargestPossibleRegion();
341341
m_MovedSobelFilters[iDimension]->UpdateLargestPossibleRegion();

Modules/Segmentation/Voronoi/include/itkVoronoiPartitioningImageFilter.hxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#ifndef itkVoronoiPartitioningImageFilter_hxx
1919
#define itkVoronoiPartitioningImageFilter_hxx
2020

21-
#include "itkImageRegionIteratorWithIndex.h"
21+
#include "itkImageRegionIterator.h"
2222

2323
namespace itk
2424
{
@@ -92,7 +92,7 @@ VoronoiPartitioningImageFilter<TInputImage, TOutputImage>::MakeSegmentBoundary()
9292
{
9393
const RegionType region = this->GetInput()->GetRequestedRegion();
9494

95-
ImageRegionIteratorWithIndex<OutputImageType> oit(this->GetOutput(), region);
95+
ImageRegionIterator<OutputImageType> oit(this->GetOutput(), region);
9696
while (!oit.IsAtEnd())
9797
{
9898
oit.Set(0);
@@ -120,7 +120,7 @@ VoronoiPartitioningImageFilter<TInputImage, TOutputImage>::MakeSegmentObject()
120120
{
121121
const RegionType region = this->GetInput()->GetRequestedRegion();
122122

123-
ImageRegionIteratorWithIndex<OutputImageType> oit(this->GetOutput(), region);
123+
ImageRegionIterator<OutputImageType> oit(this->GetOutput(), region);
124124
while (!oit.IsAtEnd())
125125
{
126126
oit.Set(0);

0 commit comments

Comments
 (0)