ITK/Release 4/Refactor Numerical Libraries/Inventory/Fourier Transforms: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
Line 36: Line 36:


== VXL ==
== VXL ==
=== Code ===


The FFT code in VXL is in the directory
The FFT code in VXL is in the directory
Line 54: Line 56:
* vnl_fft_prime_factors.txx
* vnl_fft_prime_factors.txx


The code acepts images whose number of pixels is a multiple of powers of the following prime numbers:
 
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
* 2
Line 60: Line 75:
* 5
* 5


It seems that VXL ultimately calls FFT functions from FORTRAN
That is, it should be an expression such as


  CALL GPFA(A,B,TRIGS,INC,JUMP,N,LOT,ISIGN,NIPQ,INFO)
    2^P * 3^Q * 5^R


in the file
==== Image Dimensions ====


  vnl_fft.h
* Implementations are available for 1D and 2D in VXL.
* ITK added a 3D instantiation outside of VXL


= Benchmark Test =
= Benchmark Test =


= Options =
= Options =

Revision as of 22:28, 25 August 2011

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