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 large-scale 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. |
|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 =
|int|| filterCols =
|double|| deltaAngle =
|int|| fft_imagesize = |
Computes the filter bank.
By by passing in a negative number for fft_imagesize, you can do the elliptical filtering the brute-force 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.
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 re-entrant. The ellipFilter itself is thread-safe.