📄 新建 文本文档.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 + -