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

📄 新建 文本文档.txt

📁 C语言做数字图像傅立叶变换
💻 TXT
字号:
C语言做数字图像傅立叶变换(32*32像素,16色灰度)
 悬赏分:30 - 提问时间2008-5-20 20:03
#include "stdio.h" 
#include "graphics.h" 
#include "alloc.h" 
#include "stdlib.h" 
#include "math.h" 

#define pi 3.1415926 

typedef struct tagBITMAPFILEHEADER 
{ 
unsigned int bfType; 
unsigned long bfSize; 
unsigned int bfReserved1; 
unsigned int bfReserved2; 
unsigned long bfOffBits; 
}BITMAPFILEHEADER; 



typedef struct tagBITMAPINFOHEADER 
{ 
unsigned long biSize; 
long biWidth; 
long biHeight; 
unsigned int biPanes; 
unsigned int biBitCount; 
unsigned long biCompression; 
unsigned long biSizeImage; 
long biXPelsPerMeter; 
long biYPelsPerMeter; 
unsigned long biClrUsed; 
unsigned long biClrImportant; 
}BITMAPINFOHEADER; 



typedef struct tagRGBQUAD 
{ 
unsigned char rgbBlue; 
unsigned char rgbGreen; 
unsigned char rgbRed; 
unsigned char rgbReserved; 
}RGBQUAD; 



typedef struct tagBITMAPINFO 
{ 
BITMAPINFOHEADER bmiHeader; 
RGBQUAD bmiColors[]; 
}BITMAPINFO; 



int xmax; 
int ymax; 


void InitGraph() 
{ 
int mod=EGA; 
int dr=EGAHI; 
initgraph(&mod,&dr,""); 
xmax=getmaxx(); 
ymax=getmaxy(); 
}; 



void CloseGraph() 
{ 
closegraph(); 
}; 



void Exit(char *ErrorCode) 
{ 
printf("%s",ErrorCode); 
getch(); 
exit(0); 
} 



long WidthBytes(long Width,int BitCount) 
{ 
long WBytes; 
/*WBytes=(Width*BitCount+31)/8; 
WBytes=WBytes/16;*/ 
int k; 
k=(Width%4)?(4-Width%4):0; 
WBytes=k+Width; 
return WBytes; 
} 

void BmpRead(FILE *fp,unsigned long bfOffBits,long biWidth,long biHeight,long WBytes,char d1[][32]) 
{ 
int i,j; 
for(i=0;i<biHeight;i++) 
{ 
fseek(fp,bfOffBits+i*WBytes,SEEK_SET); 
fread(d1[biHeight-i-1],WBytes,1,fp); 
} 
} 




有问题,大家帮忙解决一下吧 
示例图像用32*32像素,16色灰度
问题补充:/*FFT*/ 
void Fft(char d1[][32],char f[][32],char fi[][32]/*,char F[][32]*/) 
{ 
int i,j,x,y; 
char t; 
for(i=0;i<32;i++) 
{ 
for(j=0;j<32;i++) 
{ 
t=pow(-1,i+j)*d1[i][j]; 
for(x=0;x<32;i++) 
{ 
for(y=0;y<32;i++) 
{ 
f[i][j]+=t*cos((2*pi*i*x+2*pi*j*y)/32); 
fi[i][j]+=t*sin((2*pi*i*x+2*pi*j*y)/32); 
} 
} 
d1[i][j]=sqrt(pow(f[i][j],2)+pow(fi[i][j],2)); 
putpixel(j,i,d1[i][j]); 
} 
} 
} 


/*lowpass*/ 
void lowpass(char f[][32],char fi[][32]) 
{ 
int i,j,dx; 
int d0=5; 
for(i=0;i<32;i++) 
{ 
for(j=0;j<32;i++) 
{ 
dx=sqrt(pow(i-16,2)+pow(j-16,2)); 
if(dx>d0) 
{ 
f[i][j]=0; 
fi[i][j]=0; 
} 
} 

} 
}
提问者: 闫鸿浩 - 试用期 一级 其他回答    共 1 条
#include"graphics.h" 
#include<stdio.h> 
#include<math.h> 
#include<conio.h> 
void main() 
{ 
int driver,mode,x,y,x0,y0; 
float siat,r; 
driver=DETECT; 
mode=VGAHI; 
initgraph(&driver,&mode,""); 
sita=-15.0; 
r=10*sita; 
x0=getmaxx()/2; 
y0=getmaxy()/2; 
x=x0+r*cos(sita); 
y=y0+r*sin(sita); 
moveto(x,y); 
while(sita<15.0) 
{ 
sita+=0.1; 
r=10*sita; 
x=x0+r*cos(sita); 
y=y0+r*sin(sita); 
lineto(x,y); 
} 
x=x0+150*cos(15.0); 
y=y0+150*sin(15.0); 
lineto(x,y); 
getch(); 
closegraph; 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -