The Ellip class can optionally use a Fast Fourier Transform algorithm and an efficient way to compute the results of transforming with rotated filter pairs. The complexity of the elliptical filtering algorithm is N*(N/d)*logN where d is the delta angle and N one of the dimensions of the image. The complexity does not depend on the size of the filter. The memory need of the algorithm is about (180/d + 5) times the size of the images.
For information on the largescale filtering technique itself, please refer to Lincoln Laboratory publications.
It is possible to have two Ellip objects to perform filtering using elliptical filters of differing sizes (5x21 and 15x64, say) but you can not perform filtering on images of different sizes within the same application. This is because of an efficiency kludge made in FFTObj.
Public Member Functions  
Ellip (int filterRows=5, int filterCols=21, double deltaAngle=10.0, int fft_imagesize=1)  
Computes the filter bank.  
~Ellip ()  
Releases the resources allocated for the filter bank.  
void  ellipFilter (Data2D< int >) 
At the end of this function, the input 2D data will have been filtered. 
Ellip::Ellip  (  int  filterRows = 5 , 

int  filterCols = 21 , 

double  deltaAngle = 10.0 , 

int  fft_imagesize = 1  
) 
Computes the filter bank.
You will need to construct only one Ellip object to transform a set of images. Since construction of an Ellip object is a very computationally intensive operation, do it as few times as possible.
By by passing in a negative number for fft_imagesize, you can do the elliptical filtering the bruteforce way, i.e. without FFT. Otherwise, pass in the size of the images you will use. The rows and columns refer to the size of the ellipse with the major axis either horizontal or vertical. The delta angle is the number of degrees that each tilt of the ellipse differs from the previous ellipse in the filter bank.
This will create an Ellip object which will use elliptical filters of size filterRowsxfilterCols. There will be one elliptical filter for every deltaAngle degrees. The images that the elliptical filter is created for should be of size equal to fft_imagesize. A given Ellip object can be used to filter images of a particular size only. All the images will be filtered using elliptical filters of the same size.
Ellip::~Ellip  (  ) 
Releases the resources allocated for the filter bank.
void Ellip::ellipFilter  (  Data2D< int >  ) 
At the end of this function, the input 2D data will have been filtered.
This operation is very expensive. It sends its intermediate status to stdout. Note that the construction of an Ellip object is not thread safe and not reentrant. The ellipFilter itself is threadsafe.