📄 main.c
字号:
#include "stdio.h"
#include "stdlib.h"
int n=128; /*在data.s中定义*/
void loadImage(unsigned char *);
void storeImage(unsigned char *);
int n_fft(unsigned char *, double *,double *,double *,int , int );
double sqr(double ff);
// int malloc(int);
unsigned char * image1;
unsigned char * image2;
double * prdata;
double * pidata;
double *ar;
double *ai;
extern int fft(int , double *, double *);
//extern double * ap;
int ROW=128;
int COL=128;
#define LEVEL 255
double * ap;
int main()
{
int p=0;
int u=0;
image1=malloc(2*COL*COL*sizeof(char));
image2=malloc(2*COL*COL*sizeof(char));
prdata=malloc(2*COL*COL*sizeof(double));
pidata=malloc(2*COL*COL*sizeof(double));
ap=malloc(2*COL*COL*sizeof(double));
ar=malloc(2*COL*sizeof(double));
ai=malloc(2*COL*sizeof(double));
// i=malloc(2*sizeof(double));
//k=malloc(2*sizeof(double));
loadImage( image1);
n_fft(image1, prdata, pidata, ap, ROW, COL);
storeImage(image2);
return 0;
}
void loadImage(unsigned char *cc)
{
FILE *pf;
pf=fopen("image.raw","rb+");
fread(cc,1,1,pf);
rewind(pf);
fread(cc,n*n,1,pf);
fclose(pf);
}
void storeImage(unsigned char *cc)
{
FILE *pf;
pf=fopen("afterFFT.raw","wb+");
fwrite(cc,n*n,1,pf);
fclose(pf);
}
double sqr(double ff)
{
return(ff*ff);
}
int n_fft(unsigned char *inimage, double *prdata,double *pidata,double *ap,int row, int col)
{
int i,j;
//double *ar;
//double *ai;
double gmax;
for(i=0;i<row;i++)
for(j=0;j<col;j++)
{
*(prdata+i*col+j)=(double)*(inimage+i*col+j);
*(pidata+i*col+j)=0;
}
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
*(ar+j)=*(prdata+i*col+j);
*(ai+j)=*(pidata+i*col+j);
}
fft(col,ar,ai);
for(j=0;j<col;j++)
{
*(prdata+i*col+j)=*(ar+j);
*(pidata+i*col+j)=*(ai+j);
}
}
for(i=0;i<col;i++)
{
for(j=0;j<row;j++)
{
*(ar+j)=*(prdata+j*col+i);
*(ai+j)=*(pidata+j*col+i);
}
fft(row,ar,ai);
for(j=0;j<row;)
{
*(prdata+j*col+i)=*(ar+j);
*(pidata+j*col+i)=*(ai+j);
j++;
}
}
printf("the end\n");
gmax=0;
for(i=0;i<row;i++)
for(j=1;j<col;j++)
{
*(ap+col*i+j)=sqrt(sqr(*(prdata+i*col+j))+sqr(*(pidata+i*col+j)));
if(gmax<*(ap+col*i+j))
gmax=*(ap+col*i+j);
}
for(i=0;i<row;i++)
for(j=1;j<col;j++)
{
*(image2+i*col+j)=(unsigned char)(*(ap+col*i+j)*LEVEL/gmax);
}
free(ar);
free(ai);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -