FFTAndFilter() -- FFT And Frequency Domain Filter

Perform 2D FFT on an image, apply a filter in the frequency domain, and transform the image back to spatial domain. The procedure handles large images as it uses disk buffer when necessary.

Available filters are: continuation filter, reduction to pole filter, and vertical differentiation filter.

See Also: FFT2DForward(), FFT2DInverse(), Transform2DForward(), Transform2DInverse()

CALL SEQUENCE

void FFTAndFilter ( fpIn, dbic, dbiw, fpOut, dboc, dbow,
                   szFILB, psParam, pfnProgress, pProgressArg );
FILE    *fpIn;
           File pointer of the input database file.
int     *dbic;
           Array of 1 input channel.
int     *dbiw;
           Offset and size of input window.
FILE    *fpOut;
           File pointer of the output database file.
int     *dboc;
           Array of 1 output channel.
int     *dbow;
           Offset and size of output window. Window size
           should be the same as the input window size.
char    *szFILB;
           Name of a pix file used as a disk buffer. It is
           only used when the entire image does not fit
           into memory. If szFILB is a null string but a
           buffer is needed, a file name is automatically
           generated and saved in szFILB on return.
FilterParamType *psParam;
           A pointer to the filter parameter structure which
           contains all necessary parameters for the filter
           (filter type, X and Y pixel size, cutoff
           frequency, order of differentiation, Z level,
           source and regional field direction angles etc.).
IMPProgressFunc pfnProgress;
       is the pointer to a progress counter function.  See
       IMPProgressFunc for details.
void*   pProgressArg;
       is the callback data argument to the pfnProgress() function.
FFTAndFilter() returns 1 if the data are suitable for filtering, and returns 0 otherwise.

EXAMPLE

Apply continuation filter to a 0,0,256,256 window of image in channel 1 of "magfield.pix". The required height of continuation is 300 meters. Filtered result is to be saved in channel 2 of the same file.

    FILE    *fpIn, *fpOut;
    int     dbic[1], dbiw[4], dboc[1], dbow[4];
    char    szFILB[65];
    FilterParamType sParam;

    fpIn = fpOut = IDBOpen ( "magfield.pix", "r+");
    dbic[0] = 1;
    dbiw[0] = dbiw[1] = 0;
    dbiw[2] = dbiw[3] = 256;
    dboc[0] = 2;
    dbow[0] = dbow[1] = 0;
    dbow[2] = dbow[3] = 256;
    strcpy(szFILB, "tmpbuf.pix");

    sParam.nFiltType = F_CONT;
    sParam.fZLevel = 300.0;
    sParam.nPixelSizeX = ...;
    sParam.nPixelSizeY = ...;

    FFTAndFilter (fpIn, dbic, dbiw, fpOut, dboc, dbow, szFILB,
                  &sParam, IMPTermProgressCounter,NULL);

About PCI Help Gateway