/* FFT2fltr_Low_gauss.c */ #include #include #include #include"mypgm.h" #include"FFT1.h" #include"FFT2.h" void gaussian_lowpass_filtering( ) /* low pass filtering */ { int i, j; double sigma; double factor, radius; printf("\nGaussian low pass filtering is applied to FFT coefficients.\n"); printf("Total frequency range is 0 - %d.\n", num_of_data / 2); printf("\nEnter sdv value for Gaussian filter (ex. %d) : ", num_of_data / 16); scanf("%lf", &sigma); sigma = pow(sigma, 2); for (i = 0; i < num_of_data; i++) { for (j = 0; j < num_of_data; j++) { radius = pow(i-num_of_data/2, 2) + pow(j-num_of_data/2, 2); factor = exp(-radius/(2.0*sigma)); data[i][j] *= factor; jdata[i][j] *= factor; } } } main( ) { load_image_data(); /* Input image load */ make_original_data(); /* FFT arrays generation */ FFT2(1); /* 2-d FFT */ origin_centered_FFT(); /* FFT rearrangement */ gaussian_lowpass_filtering(); /* Gaussian low pass filtering */ origin_centered_FFT(); /* FFT rearrangement */ FFT2(-1); /* 2-d inverse FFT */ make_output_image(); /* Image generation after IFFT */ save_image_data(); /* Output image save */ return 0; }