请问哪里有滤波算法、程序?还有FFT的资料? 高通滤波低通滤波FFT 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 滤波算法可分为:空域的和频域的。空域比较简单,实现起来也比较简单,好多书上都有例子。频域比较复杂,就是对图象的FFT变换程序实现起来比较麻烦。 频域比较复杂,就是对图象的FFT变换程序实现起来比较麻烦。我就想知道频域的,哪里有资料?和程序? <visual c++ 数字图像处理>上有现成的程序.<精通图像编程>周润发编的也有.其实二者是一个.边推算文字都一样.也不知他们在那一本书上找的.我数学不好.看了半天也没看明白.现在用不着就没看.你看明白给我讲讲. VOID WINAPI FFT(struct _complex * TD, struct _complex * FD, int r) { // 付立叶变换点数 LONG count; // 循环变量 int i,j,k; // 中间变量 int bfsize,p; // 角度 double angle; struct _complex *W,*X1,*X2,*X; // 计算付立叶变换点数 count = 1 << r; // 分配运算所需存储器 W = new struct _complex[count/2]; X1 =new struct _complex[count]; X2 = new struct _complex[count]; //struct _complex W[100]; // 计算加权系数 for(i = 0; i < count / 2; i++) { angle = -i * PI * 2 / count; double a,b; a=cos(angle); b=sin(angle); W[i].x=a; W[i].y=b; } // 将时域点写入X1 memcpy(X1, TD, sizeof(struct _complex) * count); // 采用蝶形算法进行快速付立叶变换 for(k = 0; k < r; k++) { for(j = 0; j < 1 << k; j++) { bfsize = 1 << (r-k); for(i = 0; i < bfsize / 2; i++) { p = j * bfsize; X2[i + p] = add(X1[i + p],X1[i + p + bfsize / 2]); X2[i + p + bfsize / 2] = mul(sub(X1[i + p],X1[i + p + bfsize / 2]),W[i * (1<<k)]); } } X = X1; X1 = X2; X2 = X; } // 重新排序 for(j = 0; j < count; j++) { p = 0; for(i = 0; i < r; i++) { if (j&(1<<i)) { p+=1<<(r-i-1); } } FD[j]=X1[p]; }}*************************************struct _complex add(struct _complex a,struct _complex b){ struct _complex c; c.x=a.x+b.x; c.y=a.y+b.y; return c;}struct _complex mul(struct _complex a,struct _complex b){struct _complex c; c.x=a.x*b.x-a.y*b.y; c.y=a.x*b.y+a.y*b.x; return c;}struct _complex sub(struct _complex a,struct _complex b){struct _complex c; c.x=a.x-b.x; c.y=a.y-b.y; return c;}自己好好看吧! Good luck! 谢谢楼上的我用了FFT,可是看不出来对处理过后的图象那是什么意思呢?怪怪的。能否告诉我怎么高通或者低通滤波?谢谢sond(莫同心) 先 首先得设计滤波器吧。滤波器可以是时域的,也可以是频域的。时域滤波,其实就是卷积操作。如果滤波器尺寸较大,可转换成频域进行操作。这时就可用到FFT。原理就是时域卷积,等价频域乘积,在进行IFFT,就可得到所要结果。 FFT处理后的图形显示是和你的画图的横纵坐标相关的.你可以试着调整调整你的纵坐标幅度,因为VC的坐标设置是和实际相反的. 至于你要的高通和低通,抱歉我没玩过,你自己在找找资料吧. 活活,你自己搭一个高通低通率波器不就行了. combobox控件如何获取当前选定的项,并获取相应的值 I/O格式化输出问题 急~~~~如何让对话框启动后在最底层显示 WSPSendto()这么写为什么结果是0.0.0.0和204.204.204.204? 如何实现事件的像C#里+=动态绑定? 面试主管:你对电脑懂多少? 游戏棋盘???? 如何知道用户用的是静态IP还是动态IP? 哪里有com多接口的例子啊? .obj,.lib文件格式(help!) treeview能够实现多选么? installshield 控件的注册?
空域比较简单,实现起来也比较简单,好多书上都有例子。
频域比较复杂,就是对图象的FFT变换程序实现起来比较麻烦。
我就想知道频域的,哪里有资料?和程序?
推算文字都一样.也不知他们在那一本书上找的.我数学不好.看了半天也没看明白.现在用不着就没看.你看明白给我讲讲.
{ // 付立叶变换点数
LONG count;
// 循环变量
int i,j,k;
// 中间变量
int bfsize,p;
// 角度
double angle;
struct _complex *W,*X1,*X2,*X;
// 计算付立叶变换点数
count = 1 << r;
// 分配运算所需存储器
W = new struct _complex[count/2];
X1 =new struct _complex[count];
X2 = new struct _complex[count];
//struct _complex W[100];
// 计算加权系数
for(i = 0; i < count / 2; i++)
{
angle = -i * PI * 2 / count;
double a,b;
a=cos(angle);
b=sin(angle);
W[i].x=a;
W[i].y=b;
}
// 将时域点写入X1
memcpy(X1, TD, sizeof(struct _complex) * count); // 采用蝶形算法进行快速付立叶变换
for(k = 0; k < r; k++)
{
for(j = 0; j < 1 << k; j++)
{
bfsize = 1 << (r-k);
for(i = 0; i < bfsize / 2; i++)
{
p = j * bfsize;
X2[i + p] = add(X1[i + p],X1[i + p + bfsize / 2]);
X2[i + p + bfsize / 2] = mul(sub(X1[i + p],X1[i + p + bfsize / 2]),W[i * (1<<k)]);
}
}
X = X1;
X1 = X2;
X2 = X;
}
// 重新排序
for(j = 0; j < count; j++)
{
p = 0;
for(i = 0; i < r; i++)
{
if (j&(1<<i))
{
p+=1<<(r-i-1);
}
}
FD[j]=X1[p];
}}
*************************************
struct _complex add(struct _complex a,struct _complex b)
{
struct _complex c;
c.x=a.x+b.x;
c.y=a.y+b.y;
return c;
}
struct _complex mul(struct _complex a,struct _complex b)
{struct _complex c;
c.x=a.x*b.x-a.y*b.y;
c.y=a.x*b.y+a.y*b.x;
return c;
}
struct _complex sub(struct _complex a,struct _complex b)
{struct _complex c;
c.x=a.x-b.x;
c.y=a.y-b.y;
return c;
}
自己好好看吧! Good luck!
我用了FFT,可是看不出来对处理过后的图象那是什么意思呢?怪怪的。
能否告诉我怎么高通或者低通滤波?
谢谢sond(莫同心) 先
滤波器可以是时域的,也可以是频域的。
时域滤波,其实就是卷积操作。
如果滤波器尺寸较大,可转换成频域进行操作。
这时就可用到FFT。
原理就是时域卷积,等价频域乘积,
在进行IFFT,就可得到所要结果。
FFT处理后的图形显示是和你的画图的横纵坐标相关的.你可以试着调整调整你的纵坐标幅度,因为VC的坐标设置是和实际相反的.
至于你要的高通和低通,抱歉我没玩过,你自己在找找资料吧.
活活,你自己搭一个高通低通率波器不就行了.