Skip to content

Commit 8c6e9b7

Browse files
authored
Merge pull request #5737 from N-Dekker/RecursiveGaussianImageFilter-m_SmoothingFilters-back
2 parents 9d31936 + d92041c commit 8c6e9b7

File tree

5 files changed

+19
-28
lines changed

5 files changed

+19
-28
lines changed

Modules/Filtering/ImageFeature/include/itkHessianRecursiveGaussianImageFilter.hxx

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,8 @@ template <typename TInputImage, typename TOutputImage>
2929
HessianRecursiveGaussianImageFilter<TInputImage, TOutputImage>::HessianRecursiveGaussianImageFilter()
3030

3131
{
32-
// note: this is not constant to suppress a warning
33-
const unsigned int numberOfSmoothingFilters = NumberOfSmoothingFilters;
34-
3532
std::generate(m_SmoothingFilters.begin(), m_SmoothingFilters.end(), [this] {
36-
const GaussianFilterPointer filter = GaussianFilterType::New();
33+
const auto filter = GaussianFilterType::New();
3734
filter->SetOrder(GaussianOrderEnum::ZeroOrder);
3835
filter->SetNormalizeAcrossScale(m_NormalizeAcrossScale);
3936
filter->InPlaceOn();
@@ -61,12 +58,12 @@ HessianRecursiveGaussianImageFilter<TInputImage, TOutputImage>::HessianRecursive
6158
m_DerivativeFilterB->ReleaseDataFlagOn(); // output is only used once
6259

6360
// Deal with the 2D case.
64-
if (numberOfSmoothingFilters > 0)
61+
if constexpr (NumberOfSmoothingFilters > 0)
6562
{
6663
m_SmoothingFilters[0]->SetInput(m_DerivativeFilterB->GetOutput());
6764
}
6865
// connect up smoothing filter chain if necessary
69-
for (unsigned int i = 1; i < numberOfSmoothingFilters; ++i)
66+
for (unsigned int i = 1; i < NumberOfSmoothingFilters; ++i)
7067
{
7168
m_SmoothingFilters[i]->SetInput(m_SmoothingFilters[i - 1]->GetOutput());
7269
}
@@ -163,9 +160,6 @@ HessianRecursiveGaussianImageFilter<TInputImage, TOutputImage>::GenerateData()
163160
// dima = 0 and dimb = 1.
164161
const double weight = 1.0 / (ImageDimension * (ImageDimension * (ImageDimension + 1) / 2));
165162

166-
// note: this is not constant to suppress a warning
167-
const unsigned int numberOfSmoothingFilters = NumberOfSmoothingFilters;
168-
169163
for (const auto & filter : m_SmoothingFilters)
170164
{
171165
progress->RegisterInternalFilter(filter, weight);
@@ -219,7 +213,7 @@ HessianRecursiveGaussianImageFilter<TInputImage, TOutputImage>::GenerateData()
219213
++j;
220214
}
221215
// find the direction for all the other filters
222-
while (i < numberOfSmoothingFilters)
216+
while (i < NumberOfSmoothingFilters)
223217
{
224218
while (j < ImageDimension)
225219
{
@@ -253,7 +247,7 @@ HessianRecursiveGaussianImageFilter<TInputImage, TOutputImage>::GenerateData()
253247

254248
unsigned int i = 0;
255249
unsigned int j = 0;
256-
while (i < numberOfSmoothingFilters)
250+
while (i < NumberOfSmoothingFilters)
257251
{
258252
while (j < ImageDimension)
259253
{
@@ -275,10 +269,9 @@ HessianRecursiveGaussianImageFilter<TInputImage, TOutputImage>::GenerateData()
275269
typename RealImageType::Pointer derivativeImage;
276270

277271
// Deal with the 2D case.
278-
if (numberOfSmoothingFilters > 0)
272+
if constexpr (NumberOfSmoothingFilters > 0)
279273
{
280-
const int temp_dim = int{ ImageDimension } - 3;
281-
const GaussianFilterPointer lastFilter = m_SmoothingFilters[temp_dim];
274+
const GaussianFilterPointer lastFilter = m_SmoothingFilters.back();
282275
lastFilter->UpdateLargestPossibleRegion();
283276
derivativeImage = lastFilter->GetOutput();
284277
}
@@ -313,9 +306,9 @@ HessianRecursiveGaussianImageFilter<TInputImage, TOutputImage>::GenerateData()
313306
}
314307

315308
// manually release memory in last filter in the pipeline
316-
if (numberOfSmoothingFilters > 0)
309+
if constexpr (NumberOfSmoothingFilters > 0)
317310
{
318-
m_SmoothingFilters[numberOfSmoothingFilters - 1]->GetOutput()->ReleaseData();
311+
m_SmoothingFilters.back()->GetOutput()->ReleaseData();
319312
}
320313
else
321314
{

Modules/Filtering/ImageFeature/include/itkLaplacianRecursiveGaussianImageFilter.hxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ LaplacianRecursiveGaussianImageFilter<TInputImage, TOutputImage>::LaplacianRecur
3232

3333
{
3434
std::generate(m_SmoothingFilters.begin(), m_SmoothingFilters.end(), [this] {
35-
const GaussianFilterPointer filter = GaussianFilterType::New();
35+
const auto filter = GaussianFilterType::New();
3636
filter->SetOrder(GaussianOrderEnum::ZeroOrder);
3737
filter->SetNormalizeAcrossScale(m_NormalizeAcrossScale);
3838
filter->ReleaseDataFlagOn();
@@ -50,7 +50,7 @@ LaplacianRecursiveGaussianImageFilter<TInputImage, TOutputImage>::LaplacianRecur
5050

5151
m_SmoothingFilters[0]->SetInput(m_DerivativeFilter->GetOutput());
5252

53-
if (NumberOfSmoothingFilters > 1)
53+
if constexpr (NumberOfSmoothingFilters > 1)
5454
{
5555
for (unsigned int i = 1; i < NumberOfSmoothingFilters; ++i)
5656
{
@@ -196,7 +196,7 @@ LaplacianRecursiveGaussianImageFilter<TInputImage, TOutputImage>::GenerateData()
196196
}
197197
m_DerivativeFilter->SetDirection(dim);
198198

199-
const GaussianFilterPointer lastFilter = m_SmoothingFilters[ImageDimension - 2];
199+
const GaussianFilterPointer lastFilter = m_SmoothingFilters.back();
200200

201201
// scale the new value by the inverse of the spacing squared
202202
const RealType spacing2 = itk::Math::sqr(inputImage->GetSpacing()[dim]);
@@ -218,7 +218,7 @@ LaplacianRecursiveGaussianImageFilter<TInputImage, TOutputImage>::GenerateData()
218218
// pipelined the data must be manually released
219219
if constexpr (ImageDimension > 1)
220220
{
221-
m_SmoothingFilters[ImageDimension - 2]->GetOutput()->ReleaseData();
221+
m_SmoothingFilters.back()->GetOutput()->ReleaseData();
222222
}
223223
else
224224
{

Modules/Filtering/ImageGradient/include/itkGradientMagnitudeRecursiveGaussianImageFilter.hxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ GradientMagnitudeRecursiveGaussianImageFilter<TInputImage,
3838
m_DerivativeFilter->ReleaseDataFlagOn();
3939

4040
std::generate(m_SmoothingFilters.begin(), m_SmoothingFilters.end(), [this] {
41-
const GaussianFilterPointer filter = GaussianFilterType::New();
41+
const auto filter = GaussianFilterType::New();
4242
filter->SetOrder(GaussianOrderEnum::ZeroOrder);
4343
filter->SetNormalizeAcrossScale(m_NormalizeAcrossScale);
4444
filter->InPlaceOn();
@@ -52,7 +52,7 @@ GradientMagnitudeRecursiveGaussianImageFilter<TInputImage,
5252
}
5353

5454
m_SqrSpacingFilter = SqrSpacingFilterType::New();
55-
m_SqrSpacingFilter->SetInput(1, m_SmoothingFilters[ImageDimension - 2]->GetOutput());
55+
m_SqrSpacingFilter->SetInput(1, m_SmoothingFilters.back()->GetOutput());
5656
// run that filter in place for much efficiency
5757
m_SqrSpacingFilter->InPlaceOn();
5858

Modules/Filtering/ImageGradient/include/itkGradientRecursiveGaussianImageFilter.hxx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ GradientRecursiveGaussianImageFilter<TInputImage, TOutputImage>::GradientRecursi
3636
if constexpr (ImageDimension > 1)
3737
{
3838
std::generate(m_SmoothingFilters.begin(), m_SmoothingFilters.end(), [this] {
39-
const GaussianFilterPointer filter = GaussianFilterType::New();
39+
const auto filter = GaussianFilterType::New();
4040
filter->SetOrder(GaussianOrderEnum::ZeroOrder);
4141
filter->SetNormalizeAcrossScale(m_NormalizeAcrossScale);
4242
filter->InPlaceOn();
@@ -230,8 +230,7 @@ GradientRecursiveGaussianImageFilter<TInputImage, TOutputImage>::GenerateData()
230230
typename RealImageType::Pointer derivativeImage;
231231
if constexpr (ImageDimension > 1)
232232
{
233-
const auto imageDimensionMinus2 = static_cast<unsigned int>(ImageDimension - 2);
234-
const GaussianFilterPointer lastFilter = m_SmoothingFilters[imageDimensionMinus2];
233+
const GaussianFilterPointer lastFilter = m_SmoothingFilters.back();
235234
lastFilter->UpdateLargestPossibleRegion();
236235
derivativeImage = lastFilter->GetOutput();
237236
}
@@ -265,8 +264,7 @@ GradientRecursiveGaussianImageFilter<TInputImage, TOutputImage>::GenerateData()
265264
// manually release memory in last filter in the mini-pipeline
266265
if constexpr (ImageDimension > 1)
267266
{
268-
const int temp_dim = int{ ImageDimension } - 2;
269-
m_SmoothingFilters[temp_dim]->GetOutput()->ReleaseData();
267+
m_SmoothingFilters.back()->GetOutput()->ReleaseData();
270268
}
271269
else
272270
{

Modules/Filtering/Smoothing/include/itkSmoothingRecursiveGaussianImageFilter.hxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ SmoothingRecursiveGaussianImageFilter<TInputImage, TOutputImage>::SmoothingRecur
5858
}
5959

6060
m_CastingFilter = CastingFilterType::New();
61-
m_CastingFilter->SetInput(m_SmoothingFilters[ImageDimension - 2]->GetOutput());
61+
m_CastingFilter->SetInput(m_SmoothingFilters.back()->GetOutput());
6262
m_CastingFilter->InPlaceOn();
6363

6464
this->InPlaceOff();

0 commit comments

Comments
 (0)