Skip to content

Commit c20ea95

Browse files
committed
ENH: Register default curvilinear FFT factory overrides
Leverages ITK Python factory updates introduced in 10320a6 to initialize default backends to run FFT on `itk::CurvilinearArraySpecialCoordinatesImage` objects. Includes additional wrappings for image inputs. Closes issue #172.
1 parent 8cacf76 commit c20ea95

12 files changed

Lines changed: 215 additions & 245 deletions

include/itkCurvilinearArraySpecialCoordinatesForwardFFTImageFilterFactory.h

Lines changed: 0 additions & 119 deletions
This file was deleted.

include/itkCurvilinearArraySpecialCoordinatesInverseFFTImageFilterFactory.h

Lines changed: 0 additions & 119 deletions
This file was deleted.
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/*=========================================================================
2+
*
3+
* Copyright NumFOCUS
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0.txt
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*=========================================================================*/
18+
#ifndef itkCurvilinearFFTImageFilterInitFactory_h
19+
#define itkCurvilinearFFTImageFilterInitFactory_h
20+
#include "UltrasoundExport.h"
21+
22+
#include "itkLightObject.h"
23+
24+
namespace itk
25+
{
26+
/**
27+
*\class CurvilinearFFTImageFilterInitFactory
28+
* \brief Initialize FFT image filter factory backends.
29+
*
30+
* The purpose of CurvilinearFFTImageFilterInitFactory is to perform
31+
* one-time registration of factory objects that handle
32+
* creation of FFT image filter classes as applied to
33+
* CurvilinearArraySpecialCoordinatesImage objects
34+
* through the ITK object factory singleton mechanism.
35+
*
36+
* By default ITK registers Vnl FFT backends to operate on
37+
* rectangular `itk::Image` inputs and outputs. ITKUltrasound
38+
* expands default availability to apply FFTs to
39+
* curvilinear images.
40+
*
41+
* \ingroup FourierTransform
42+
* \ingroup ITKFFT
43+
* \ingroup ITKSystemObjects
44+
* \ingroup Ultrasound
45+
*/
46+
class Ultrasound_EXPORT CurvilinearFFTImageFilterInitFactory : public LightObject
47+
{
48+
public:
49+
ITK_DISALLOW_COPY_AND_MOVE(CurvilinearFFTImageFilterInitFactory);
50+
51+
/** Standard class type aliases. */
52+
using Self = CurvilinearFFTImageFilterInitFactory;
53+
using Superclass = LightObject;
54+
using Pointer = SmartPointer<Self>;
55+
using ConstPointer = SmartPointer<const Self>;
56+
57+
/** Method for class instantiation. */
58+
itkFactorylessNewMacro(Self);
59+
60+
/** Run-time type information (and related methods). */
61+
itkTypeMacro(CurvilinearFFTImageFilterInitFactory, LightObject);
62+
63+
/** Mimic factory interface for Python initialization */
64+
static void
65+
RegisterOneFactory()
66+
{
67+
RegisterFactories();
68+
}
69+
70+
/** Register all Curvilinear FFT factories */
71+
static void
72+
RegisterFactories();
73+
74+
protected:
75+
CurvilinearFFTImageFilterInitFactory();
76+
~CurvilinearFFTImageFilterInitFactory() override = default;
77+
};
78+
} // end namespace itk
79+
80+
#endif // itkCurvilinearFFTImageFilterInitFactory_h

itk-module.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ itk_module(Ultrasound
2929
ITKTestKernel
3030
ITKVideoCore
3131
ITKVideoIO
32+
FACTORY_NAMES
33+
"FFTImageFilterInit::Curvilinear"
3234
EXCLUDE_FROM_DEFAULT
3335
ENABLE_SHARED
3436
DESCRIPTION

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
set(Ultrasound_SRCS
2+
itkCurvilinearFFTImageFilterInitFactory.cxx
23
itkHDF5UltrasoundImageIOFactory.cxx
34
itkHDF5UltrasoundImageIO.cxx
45
itkTextProgressBarCommand.cxx
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*=========================================================================
2+
*
3+
* Copyright NumFOCUS
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0.txt
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*=========================================================================*/
18+
#include "UltrasoundExport.h"
19+
20+
#include "itkObjectFactoryBase.h"
21+
#include "itkFFTImageFilterFactory.h"
22+
#include "itkVnlComplexToComplex1DFFTImageFilter.h"
23+
#include "itkVnlForward1DFFTImageFilter.h"
24+
#include "itkVnlInverse1DFFTImageFilter.h"
25+
26+
#include "itkCurvilinearArraySpecialCoordinatesImage.h"
27+
#include "itkCurvilinearFFTImageFilterInitFactory.h"
28+
29+
namespace itk
30+
{
31+
CurvilinearFFTImageFilterInitFactory::CurvilinearFFTImageFilterInitFactory()
32+
{
33+
CurvilinearFFTImageFilterInitFactory::RegisterFactories();
34+
}
35+
36+
void
37+
CurvilinearFFTImageFilterInitFactory::RegisterFactories()
38+
{
39+
// Curvilinear -> Curvilinear
40+
itk::ObjectFactoryBase::RegisterFactory(FFTImageFilterFactory<VnlComplexToComplex1DFFTImageFilter,
41+
itk::CurvilinearArraySpecialCoordinatesImage,
42+
itk::CurvilinearArraySpecialCoordinatesImage>::New());
43+
itk::ObjectFactoryBase::RegisterFactory(
44+
FFTImageFilterFactory<VnlForward1DFFTImageFilter, itk::CurvilinearArraySpecialCoordinatesImage, itk::CurvilinearArraySpecialCoordinatesImage>::New());
45+
itk::ObjectFactoryBase::RegisterFactory(
46+
FFTImageFilterFactory<VnlInverse1DFFTImageFilter, itk::CurvilinearArraySpecialCoordinatesImage, itk::CurvilinearArraySpecialCoordinatesImage>::New());
47+
// Curvilinear -> Image
48+
itk::ObjectFactoryBase::RegisterFactory(FFTImageFilterFactory<VnlForward1DFFTImageFilter, itk::CurvilinearArraySpecialCoordinatesImage, itk::Image>::New());
49+
// Image -> Curvilinear
50+
itk::ObjectFactoryBase::RegisterFactory(FFTImageFilterFactory<VnlInverse1DFFTImageFilter, itk::Image, itk::CurvilinearArraySpecialCoordinatesImage>::New());
51+
}
52+
53+
// Undocumented API used to register during static initialization.
54+
// DO NOT CALL DIRECTLY.
55+
void Ultrasound_EXPORT
56+
CurvilinearFFTImageFilterInitFactoryRegister__Private()
57+
{
58+
CurvilinearFFTImageFilterInitFactory::RegisterFactories();
59+
}
60+
61+
} // end namespace itk

0 commit comments

Comments
 (0)