From f81d6636bce05c13ba94fb324868e69b012e84c8 Mon Sep 17 00:00:00 2001 From: Tom Birdsong Date: Thu, 27 Jan 2022 16:09:46 -0500 Subject: [PATCH] ENH: Expose FFT filter dimension traits Moves FFT filter image dimensions into existing trait objects in order to decouple FFT factory overrides from fixed dimension lists. This will allow other, external FFT implementations that may not be valid for higher-dimension overrides to reuse the FFT factory class. Future changes may replace the explicit dimension lists with CMake variables to avoid registering unnecessary factories. --- Modules/Filtering/FFT/include/itkFFTImageFilterFactory.h | 4 ++-- .../FFT/include/itkFFTWComplexToComplex1DFFTImageFilter.h | 1 + .../FFT/include/itkFFTWComplexToComplexFFTImageFilter.h | 1 + .../Filtering/FFT/include/itkFFTWForward1DFFTImageFilter.h | 1 + Modules/Filtering/FFT/include/itkFFTWForwardFFTImageFilter.h | 1 + .../include/itkFFTWHalfHermitianToRealInverseFFTImageFilter.h | 1 + .../Filtering/FFT/include/itkFFTWInverse1DFFTImageFilter.h | 1 + Modules/Filtering/FFT/include/itkFFTWInverseFFTImageFilter.h | 1 + .../include/itkFFTWRealToHalfHermitianForwardFFTImageFilter.h | 1 + .../FFT/include/itkVnlComplexToComplex1DFFTImageFilter.h | 1 + .../FFT/include/itkVnlComplexToComplexFFTImageFilter.h | 1 + Modules/Filtering/FFT/include/itkVnlForward1DFFTImageFilter.h | 1 + Modules/Filtering/FFT/include/itkVnlForwardFFTImageFilter.h | 1 + .../include/itkVnlHalfHermitianToRealInverseFFTImageFilter.h | 1 + Modules/Filtering/FFT/include/itkVnlInverse1DFFTImageFilter.h | 1 + Modules/Filtering/FFT/include/itkVnlInverseFFTImageFilter.h | 1 + .../include/itkVnlRealToHalfHermitianForwardFFTImageFilter.h | 1 + 17 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Modules/Filtering/FFT/include/itkFFTImageFilterFactory.h b/Modules/Filtering/FFT/include/itkFFTImageFilterFactory.h index 6c4b85d2c7b..4ebb267242c 100644 --- a/Modules/Filtering/FFT/include/itkFFTImageFilterFactory.h +++ b/Modules/Filtering/FFT/include/itkFFTImageFilterFactory.h @@ -116,11 +116,11 @@ class FFTImageFilterFactory : public itk::ObjectFactoryBase { OverrideFFTImageFilterType::template InputPixelType, typename FFTImageFilterTraits::template OutputPixelType>( - std::integer_sequence{}); + typename FFTImageFilterTraits::FilterDimensions{}); OverrideFFTImageFilterType::template InputPixelType, typename FFTImageFilterTraits::template OutputPixelType>( - std::integer_sequence{}); + typename FFTImageFilterTraits::FilterDimensions{}); } }; diff --git a/Modules/Filtering/FFT/include/itkFFTWComplexToComplex1DFFTImageFilter.h b/Modules/Filtering/FFT/include/itkFFTWComplexToComplex1DFFTImageFilter.h index b0ff3b36f11..8430f8a206c 100644 --- a/Modules/Filtering/FFT/include/itkFFTWComplexToComplex1DFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkFFTWComplexToComplex1DFFTImageFilter.h @@ -111,6 +111,7 @@ struct FFTImageFilterTraits using InputPixelType = std::complex; template using OutputPixelType = std::complex; + using FilterDimensions = std::integer_sequence; }; } // namespace itk diff --git a/Modules/Filtering/FFT/include/itkFFTWComplexToComplexFFTImageFilter.h b/Modules/Filtering/FFT/include/itkFFTWComplexToComplexFFTImageFilter.h index c7f150599b3..8a692cc2479 100644 --- a/Modules/Filtering/FFT/include/itkFFTWComplexToComplexFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkFFTWComplexToComplexFFTImageFilter.h @@ -158,6 +158,7 @@ struct FFTImageFilterTraits using InputPixelType = std::complex; template using OutputPixelType = std::complex; + using FilterDimensions = std::integer_sequence; }; diff --git a/Modules/Filtering/FFT/include/itkFFTWForward1DFFTImageFilter.h b/Modules/Filtering/FFT/include/itkFFTWForward1DFFTImageFilter.h index af586b51c63..65551772a76 100644 --- a/Modules/Filtering/FFT/include/itkFFTWForward1DFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkFFTWForward1DFFTImageFilter.h @@ -110,6 +110,7 @@ struct FFTImageFilterTraits using InputPixelType = TUnderlying; template using OutputPixelType = std::complex; + using FilterDimensions = std::integer_sequence; }; } // namespace itk diff --git a/Modules/Filtering/FFT/include/itkFFTWForwardFFTImageFilter.h b/Modules/Filtering/FFT/include/itkFFTWForwardFFTImageFilter.h index 619542f543e..991f561dda3 100644 --- a/Modules/Filtering/FFT/include/itkFFTWForwardFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkFFTWForwardFFTImageFilter.h @@ -144,6 +144,7 @@ struct FFTImageFilterTraits using InputPixelType = TUnderlying; template using OutputPixelType = std::complex; + using FilterDimensions = std::integer_sequence; }; } // namespace itk diff --git a/Modules/Filtering/FFT/include/itkFFTWHalfHermitianToRealInverseFFTImageFilter.h b/Modules/Filtering/FFT/include/itkFFTWHalfHermitianToRealInverseFFTImageFilter.h index f624174338d..99fc9ac1f6d 100644 --- a/Modules/Filtering/FFT/include/itkFFTWHalfHermitianToRealInverseFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkFFTWHalfHermitianToRealInverseFFTImageFilter.h @@ -151,6 +151,7 @@ struct FFTImageFilterTraits using InputPixelType = std::complex; template using OutputPixelType = TUnderlying; + using FilterDimensions = std::integer_sequence; }; } // namespace itk diff --git a/Modules/Filtering/FFT/include/itkFFTWInverse1DFFTImageFilter.h b/Modules/Filtering/FFT/include/itkFFTWInverse1DFFTImageFilter.h index 4fd39a8bb96..fed20728d15 100644 --- a/Modules/Filtering/FFT/include/itkFFTWInverse1DFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkFFTWInverse1DFFTImageFilter.h @@ -109,6 +109,7 @@ struct FFTImageFilterTraits using InputPixelType = std::complex; template using OutputPixelType = TUnderlying; + using FilterDimensions = std::integer_sequence; }; } // namespace itk diff --git a/Modules/Filtering/FFT/include/itkFFTWInverseFFTImageFilter.h b/Modules/Filtering/FFT/include/itkFFTWInverseFFTImageFilter.h index 7744ccc75e6..ea1cf85d818 100644 --- a/Modules/Filtering/FFT/include/itkFFTWInverseFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkFFTWInverseFFTImageFilter.h @@ -145,6 +145,7 @@ struct FFTImageFilterTraits using InputPixelType = std::complex; template using OutputPixelType = TUnderlying; + using FilterDimensions = std::integer_sequence; }; } // namespace itk diff --git a/Modules/Filtering/FFT/include/itkFFTWRealToHalfHermitianForwardFFTImageFilter.h b/Modules/Filtering/FFT/include/itkFFTWRealToHalfHermitianForwardFFTImageFilter.h index 837be3037b6..67670ee72ee 100644 --- a/Modules/Filtering/FFT/include/itkFFTWRealToHalfHermitianForwardFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkFFTWRealToHalfHermitianForwardFFTImageFilter.h @@ -144,6 +144,7 @@ struct FFTImageFilterTraits using InputPixelType = TUnderlying; template using OutputPixelType = std::complex; + using FilterDimensions = std::integer_sequence; }; } // namespace itk diff --git a/Modules/Filtering/FFT/include/itkVnlComplexToComplex1DFFTImageFilter.h b/Modules/Filtering/FFT/include/itkVnlComplexToComplex1DFFTImageFilter.h index c328efaee8e..552c835c9d0 100644 --- a/Modules/Filtering/FFT/include/itkVnlComplexToComplex1DFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkVnlComplexToComplex1DFFTImageFilter.h @@ -74,6 +74,7 @@ struct FFTImageFilterTraits using InputPixelType = std::complex; template using OutputPixelType = std::complex; + using FilterDimensions = std::integer_sequence; }; } // end namespace itk diff --git a/Modules/Filtering/FFT/include/itkVnlComplexToComplexFFTImageFilter.h b/Modules/Filtering/FFT/include/itkVnlComplexToComplexFFTImageFilter.h index 0185f797e7c..306e77ff134 100644 --- a/Modules/Filtering/FFT/include/itkVnlComplexToComplexFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkVnlComplexToComplexFFTImageFilter.h @@ -82,6 +82,7 @@ struct FFTImageFilterTraits using InputPixelType = std::complex; template using OutputPixelType = std::complex; + using FilterDimensions = std::integer_sequence; }; } // end namespace itk diff --git a/Modules/Filtering/FFT/include/itkVnlForward1DFFTImageFilter.h b/Modules/Filtering/FFT/include/itkVnlForward1DFFTImageFilter.h index 54e68a5c619..08ad49f4512 100644 --- a/Modules/Filtering/FFT/include/itkVnlForward1DFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkVnlForward1DFFTImageFilter.h @@ -75,6 +75,7 @@ struct FFTImageFilterTraits using InputPixelType = TUnderlying; template using OutputPixelType = std::complex; + using FilterDimensions = std::integer_sequence; }; } // end namespace itk diff --git a/Modules/Filtering/FFT/include/itkVnlForwardFFTImageFilter.h b/Modules/Filtering/FFT/include/itkVnlForwardFFTImageFilter.h index cae89962864..6bd73ddae9c 100644 --- a/Modules/Filtering/FFT/include/itkVnlForwardFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkVnlForwardFFTImageFilter.h @@ -101,6 +101,7 @@ struct FFTImageFilterTraits using InputPixelType = TUnderlying; template using OutputPixelType = std::complex; + using FilterDimensions = std::integer_sequence; }; } // namespace itk diff --git a/Modules/Filtering/FFT/include/itkVnlHalfHermitianToRealInverseFFTImageFilter.h b/Modules/Filtering/FFT/include/itkVnlHalfHermitianToRealInverseFFTImageFilter.h index 6235343b0da..e90d8a2edcf 100644 --- a/Modules/Filtering/FFT/include/itkVnlHalfHermitianToRealInverseFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkVnlHalfHermitianToRealInverseFFTImageFilter.h @@ -110,6 +110,7 @@ struct FFTImageFilterTraits using InputPixelType = std::complex; template using OutputPixelType = TUnderlying; + using FilterDimensions = std::integer_sequence; }; } // namespace itk diff --git a/Modules/Filtering/FFT/include/itkVnlInverse1DFFTImageFilter.h b/Modules/Filtering/FFT/include/itkVnlInverse1DFFTImageFilter.h index c4710e13a58..1557c81bc59 100644 --- a/Modules/Filtering/FFT/include/itkVnlInverse1DFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkVnlInverse1DFFTImageFilter.h @@ -76,6 +76,7 @@ struct FFTImageFilterTraits using InputPixelType = std::complex; template using OutputPixelType = TUnderlying; + using FilterDimensions = std::integer_sequence; }; } // end namespace itk diff --git a/Modules/Filtering/FFT/include/itkVnlInverseFFTImageFilter.h b/Modules/Filtering/FFT/include/itkVnlInverseFFTImageFilter.h index a796db1f8ba..7c4f13eff97 100644 --- a/Modules/Filtering/FFT/include/itkVnlInverseFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkVnlInverseFFTImageFilter.h @@ -107,6 +107,7 @@ struct FFTImageFilterTraits using InputPixelType = std::complex; template using OutputPixelType = TUnderlying; + using FilterDimensions = std::integer_sequence; }; } // namespace itk diff --git a/Modules/Filtering/FFT/include/itkVnlRealToHalfHermitianForwardFFTImageFilter.h b/Modules/Filtering/FFT/include/itkVnlRealToHalfHermitianForwardFFTImageFilter.h index 07f5844ef56..5fc02da894c 100644 --- a/Modules/Filtering/FFT/include/itkVnlRealToHalfHermitianForwardFFTImageFilter.h +++ b/Modules/Filtering/FFT/include/itkVnlRealToHalfHermitianForwardFFTImageFilter.h @@ -105,6 +105,7 @@ struct FFTImageFilterTraits using InputPixelType = TUnderlying; template using OutputPixelType = std::complex; + using FilterDimensions = std::integer_sequence; }; } // namespace itk