/*---------------------------------------------------------------------------*/ /* Program: fft.c */ /* */ /* Purpose: This program calculates the FFT of an image in KUIM format. */ /* */ /* Author: John Gauch */ /* */ /* Date: April 6, 1994 */ /* */ /* Note: Copyright (C) The University of Kansas, 1994 */ /*---------------------------------------------------------------------------*/ #include /*---------------------------------------------------------------------------*/ /* Purpose: This is the main program. */ /*---------------------------------------------------------------------------*/ int main(int argc, char *argv[]) { /* Image variables */ char Name1[50]; char Name2[50]; IM_TYPE *Image1; IM_TYPE *Image2; COMPLEX_TYPE *Data1; COMPLEX_TYPE **Data2; COMPLEX_TYPE ***Data3; int PixType, Xdim, Ydim, Zdim, DimCnt; /* Program variables */ int Debug = FALSE; int Sign = -1; int i = 0; /* Interpret program options */ printf("FFT Program - KUIM Version 1.0\n\n"); while ((++i < argc) && (argv[i][0] == '-')) switch (argv[i][1]) { case 'd': Debug = TRUE; break; case 'I': Sign = 1; break; default: Error("Invalid option encountered"); break; } /* Check number of file names */ if (argc - i != 2) { fprintf(stderr, "Usage: fft [options] infile outfile\n"); fprintf(stderr, " [-d] Print debugging information\n"); fprintf(stderr, " [-I] Calculate inverse FFT\n"); exit(1); } /* Get image file names from argument list */ if (sscanf(argv[i++], "%s", Name1) == 0) Error("Could not get input file name"); if (sscanf(argv[i++], "%s", Name2) == 0) Error("Could not get output file name"); /* Read input image and create output image */ Image1 = im_open(Name1, &PixType, &Xdim, &Ydim, &Zdim, &DimCnt); Image2 = im_create(Name2, COMPLEX, Xdim, Ydim, Zdim); /* Handle 1D images */ if (DimCnt == 1) { Data1 = (COMPLEX_TYPE *) im_alloc1D(Image1, COMPLEX); im_read(Image1, COMPLEX, (char *) Data1); if (fft_1d(Data1, Xdim, Sign) == INVALID) Error("Could not perform FFT"); im_write(Image2, COMPLEX, (char *) Data1); im_free1D((char *) Data1); } /* Handle 2D images */ else if (DimCnt == 2) { Data2 = (COMPLEX_TYPE **) im_alloc2D(Image1, COMPLEX); im_read(Image1, COMPLEX, (char *) &(Data2[0][0])); if (fft_2d(&(Data2[0][0]), Xdim, Ydim, Sign) == INVALID) Error("Could not perform FFT"); im_write(Image2, COMPLEX, (char *) &(Data2[0][0])); im_free2D((char **) Data2); } /* Handle 3D images */ else if (DimCnt == 3) { Data3 = (COMPLEX_TYPE ***) im_alloc3D(Image1, COMPLEX); im_read(Image1, COMPLEX, (char *) &(Data3[0][0][0])); if (fft_3d(&(Data3[0][0][0]), Xdim, Ydim, Zdim, Sign) == INVALID) Error("Could not perform FFT"); im_write(Image2, COMPLEX, (char *) &(Data3[0][0][0])); im_free3D((char ***) Data3); } return (0); }