ITK/Release 4/Refactor Numerical Libraries/Inventory/Fourier Transforms
The Problem
ITK obtains Fast Fourier Transform (FFT) functionalities from
- VXL - as software included as third party library
- FFTW - as a configuration time option
When using the VXL code that is shipped with ITK, the FFT operations are very slow.
FFTW is a lot faster, but it is licensed under GPL and can not be included as part of the ITK distribution.
To choose between these two options you use, at CMake configuration time, the following variables
- USE_FFTWF to use the float version of FFTW
- USE_FFTWD to use the double version of FFTW
- USE_SYSTEM_FFTW to use an FFTW library installed in your system
Where is the Code
ITK classes that provide FFT filters can be found in the Module:
ITK/Modules/Filtering/FFT
They include
- itkFFTShiftImageFilter.h
- itkFFTWForwardFFTImageFilter.h
- itkFFTWInverseFFTImageFilter.h
- itkForwardFFTImageFilter.h
- itkInverseFFTImageFilter.h
- itkVnlForwardFFTImageFilter.h
- itkVnlInverseFFTImageFilter.h
- vnl_fft_3d.h
VXL
Code
The FFT code in VXL is in the directory
ITK/Modules/ThirdParty/VNL/src/vxl/core/vnl/algo
and include the following files
- vnl_fft_1d.h
- vnl_fft_1d.txx
- vnl_fft_2d.h
- vnl_fft_2d.txx
- vnl_fft_base.h
- vnl_fft_base.txx
- vnl_fft.cxx
- vnl_fft.h
- vnl_fft_prime_factors.h
- vnl_fft_prime_factors.txx
It seems that VXL ultimately calls FFT functions from FORTRAN
CALL GPFA(A,B,TRIGS,INC,JUMP,N,LOT,ISIGN,NIPQ,INFO)
in the file
vnl_fft.h
Conditions
Image Size
The code accepts images whose number of pixels along every dimension is a multiple of powers of the following prime numbers:
- 2
- 3
- 5
That is, it should be an expression such as
2^P * 3^Q * 5^R
Image Dimensions
- Implementations are available for 1D and 2D in VXL.
- ITK added a 3D instantiation outside of VXL
Benchmark Test
Options
Options that have been considered:
- INTEL Library