/*********************************************************************/
/* /vision/usr/barron/2dfft.c */
/* This program provides tools for performing 2D Fourier Transforms */
/* on square images that are powers of 2 and doing lowpass, highpass */
/* bandpass and bandreject filtering. A histogram equalization */
/* routine, routines to do phase and magnitude suppression, etc. are */
/* also included. Note that pixel values are not rescaled to be */
/* between 0 and 255 before the images are saved except in equalize */
/* where the function rescale_pixels is used to do this. */
/* */
/* Written by John Barron, December 1989. */
/* */
/*********************************************************************/
#include <math.h>
#include <stdio.h>
#include <fcntl.h>
#include <rasterfile.h>
#define maxn 256
#define epsilon 0.001
#define image_header_size 32
#define numrows 512 /* Image size */
#define numcols 512 /* Work size */
#define maxrows 512
#define maxcols 512
#define maxlutsize 256
#define TRUE 1
#define FALSE 0
#define WHITE 255
#define BLACK 0
#define NUMBER 999999.9
float pi = M_PI;
float twopi = 6.2831853;
float ffttransform = -1.0;
float fftinverse = 1.0;
float rasterfile[maxrows][maxcols][2];
float pic1[maxrows][maxcols][2],pic2[maxrows][maxcols][2];
float pic3[maxrows][maxcols][2];
float energyfile[maxrows][maxcols][2];
float edges[maxrows][maxcols][2];
int sign();
void NLOGN();
void fft_2d(),add(),sub();
void gauss_smoothing(),transpose(),mult(),laplacian();
void equalize(),tom_high_pass();
float sinc();
/*=========================================================================*/
/* Main Routine */
/*=========================================================================*/
main()
{
char header[32];
loadcolour("630clip09.ras",pic1,pic2,pic3);
savecolour("630clip09-1.ras",pic1,pic2,pic3);
if(TRUE) exit(1);
loadraster ("630image",rasterfile,header);
translate_to_origin( rasterfile );
fft_2d (8,rasterfile, ffttransform );
butterworth_highpass(rasterfile);
fft_2d (8,rasterfile, fftinverse );
translate_to_origin( rasterfile );
rescale_pixels(rasterfile,8);
saveraster ("630out",rasterfile,header);
loadraster ("630image",rasterfile,header);
translate_to_origin( rasterfile );
fft_2d (8,rasterfile, ffttransform );
compute_energy_spectrum(rasterfile,energyfile);
saveraster ("630energy",energyfile,header);
if(TRUE) exit(1);
loadraster("630image",pic1,header);
translate_to_origin(pic1);
fft_2d(8,pic1,ffttransform);
copy_data(pic1,pic2);
copy_data(pic1,pic3);
butterworth_lowpass(pic1,0.05,1);
butterworth_bandpass(pic2,0.05,1,0.1);
butterworth_highpass(pic3,0.05,1);
fft_2d(8,pic1,fftinverse);
fft_2d(8,pic2,fftinverse);
fft_2d(8,pic3,fftinverse);
translate_to_origin(pic1);
translate_to_origin(pic2);
translate_to_origin(pic3);
rescale_pixels(pic1,8);
rescale_pixels(pic2,8);
rescale_pixels(pic3,8);
savecolour("630colour",pic1,pic2,pic3);
if(TRUE) exit(1);
test0();
if(TRUE) exit(1);
if(TRUE) exit(1);
loadraster ("630image",rasterfile,header);
translate_to_origin( rasterfile );
fft_2d (8,rasterfile, ffttransform );
gauss_smoothing ( rasterfile, 2.0, 1.0);
fft_2d (8,rasterfile, fftinverse );
translate_to_origin( rasterfile );
saveraster ("630smooth",rasterfile,header);
loadraster ("630image",rasterfile,header);
translate_to_origin( rasterfile );
fft_2d (8,rasterfile, ffttransform );
butterworth_highpass(rasterfile,0.15,1);
fft_2d (8,rasterfile, fftinverse );
translate_to_origin( rasterfile );
saveraster ("630butterhighpass0.15",rasterfile,header);
if(TRUE) exit(1);
test0();
loadraster ("630image",rasterfile,header);
set_ideal_lowpass(rasterfile,0.05);
fft_2d(8,rasterfile,fftinverse);
rearrange(rasterfile,8);
rescale_pixels(rasterfile,8);
saveraster ("ideal",rasterfile,header);
if(TRUE) exit(1);
/* test1();
test2();
test3();
test4();
if(TRUE) exit(1); */
loadraster ("630image",rasterfile,header);
translate_to_origin( rasterfile );
fft_2d (8,rasterfile, ffttransform );
gauss_smoothing ( rasterfile, 2.0, 1.0);
fft_2d (8,rasterfile, fftinverse );
translate_to_origin( rasterfile );
saveraster ("630smooth2.0",rasterfile,header);
if(TRUE)exit(1);
loadraster ("630image",rasterfile,header);
translate_to_origin( rasterfile );
fft_2d (8,rasterfile, ffttransform );
gauss_smoothing ( rasterfile, 2.0, 1.0);
laplacian( rasterfile );
fft_2d (8,rasterfile, fftinverse );
translate_to_origin( rasterfile );
compute_zero_crossings(rasterfile,edges,8);
rescale_pixels(rasterfile,8);
saveraster ("630laplacian2.0",rasterfile,header);
saveraster ("630edges2.0",edges,header);
printf("630laplacian2.0 saved\n");
if(TRUE) exit(1);
loadraster ("630image",rasterfile,header);
translate_to_origin( rasterfile );
fft_2d (8,rasterfile, ffttransform );
butterworth_highpass(rasterfile,0.25,1);
fft_2d (8,rasterfile, fftinverse );
translate_to_origin( rasterfile );
saveraster ("630butterhighpass0.25-1",rasterfile,header);
loadraster ("630image",rasterfile,header);
translate_to_origin( rasterfile );
fft_2d (8,rasterfile, ffttransform );
butterworth_highpass(rasterfile,0.25,5);
fft_2d (8,rasterfile, fftinverse );
translate_to_origin( rasterfile );
saveraster ("630butterhighpass0.25-5",rasterfile,header);
loadraster ("630image",rasterfile,header);
translate_to_origin( rasterfile );
fft_2d (8,rasterfile, ffttransform );
butterworth_highpass(rasterfile,0.40,1);
fft_2d (8,rasterfile, fftinverse );
translate_to_origin( rasterfile );
saveraster ("630butterhighpass0.4-1",rasterfile,header);
loadraster ("630image",rasterfile,header);
translate_to_origin( rasterfile );
fft_2d (8,rasterfile, ffttransform );
butterworth_highpass(rasterfile,0.40,5);
fft_2d (8,rasterfile, fftinverse );
translate_to_origin( rasterfile );
saveraster ("630butterhighpass0.4-5",rasterfile,header);
if(TRUE) exit(1);
loadraster ("630image",rasterfile,header);
translate_to_origin( rasterfile );
fft_2d (8,rasterfile, ffttransform );
gauss_smoothing ( rasterfile, 2.0, 1.0);
laplacian( rasterfile );
fft_2d (8,rasterfile, fftinverse );
translate_to_origin( rasterfile );
compute_zero_crossings(rasterfile,edges,8);
rescale_pixels(rasterfile,8);
saveraster ("630laplacian2.0",rasterfile,header);
saveraster ("630edges2.0",edges,header);
printf("630laplacian2.0 saved\n");
if(TRUE) exit(1);
loadraster ("630image",rasterfile,header);
translate_to_origin( rasterfile );
fft_2d (8,rasterfile, ffttransform );
gauss_smoothing ( rasterfile, 2.0, 1.0);
fft_2d (8,rasterfile, fftinverse );
translate_to_origin( rasterfile );
saveraster ("630smooth2.0",rasterfile,header);
loadraster ("630image",rasterfile,header);
translate_to_origin( rasterfile );
fft_2d (8,rasterfile, ffttransform );
compute_energy_spectrum(rasterfile,energyfile);
saveraster ("630energy",energyfile,header);
if(TRUE) exit(1);
loadraster ("630image",rasterfile,header);
fft_2d (8,rasterfile, ffttransform );
gauss_smoothing ( rasterfile, 2.5, 1.0);
fft_2d (8,rasterfile, fftinverse);
fft_2d (8,rasterfile, ffttransform );
gauss_smoothing ( rasterfile, 2.5, -1.0);
fft_2d (8,rasterfile, fftinverse );
saveraster ("630original",rasterfile,header);
system("print_postscript 630original");
if(TRUE) exit(1);
loadraster ("630blurred2.5",rasterfile,header);
fft_2d
评论0