⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 实现了一个简单的快速傅立叶变化功能函数,对一副图象进行傅立叶变化,其中关键的变换部分是用汇编实现的
💻 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 + -