傅里叶变换问题

guopeng111111 2012-09-19 04:22:54
请教大侠:
我对图像进行傅里叶变换后得到的怎么是黑白点相间的、杂乱无章的图像啊?怎么能得到中心白点的图像呢?求救!
...全文
360 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ohayou 2012-09-25
  • 打赏
  • 举报
回复
貌似是没什么错。画出来不对的话也许是你的FFT算错了……
ohayou 2012-09-24
  • 打赏
  • 举报
回复
不用调整坐标啊,直接按点画出来就是啊
[Quote=引用 14 楼 的回复:]

谢谢你的回复,我现在的疑问就是怎么按照这些复数模的大小画图?现在得到的复数数组的坐标是与像素点的坐标对应的,画频谱图怎么调整坐标啊?跟开始学fft,问的问题可能比较简单,希望能给我讲下,非常感谢
引用 13 楼 的回复:
照这么说是对的。
按我的理解把这些复数按模的大小画灰度图就能看出频谱了。


引用 12 楼 的回复:

是的,先对行做一维fft,再对列做fft,这样做有什……
[/Quote]
guopeng111111 2012-09-24
  • 打赏
  • 举报
回复
谢谢你的回复,我现在的疑问就是怎么按照这些复数模的大小画图?现在得到的复数数组的坐标是与像素点的坐标对应的,画频谱图怎么调整坐标啊?跟开始学fft,问的问题可能比较简单,希望能给我讲下,非常感谢
[Quote=引用 13 楼 的回复:]
照这么说是对的。
按我的理解把这些复数按模的大小画灰度图就能看出频谱了。


引用 12 楼 的回复:

是的,先对行做一维fft,再对列做fft,这样做有什么不妥吗?
假如对2048*2048的图像进行快速傅里叶变换,我现在得到了2048*2048复数,该如何处理这些复数,得到图像的频谱图呢?
引用 11 楼 的回复:
这个二维的图像怎么看起来好像是按一维数组做的FFT?
[/Quote]
guopeng111111 2012-09-24
  • 打赏
  • 举报
回复
你好:
这是我取模时的代码,你看什么地方错了啊,
for (int i=0;i<Height2;i++)
{
for (int j=0;j<Width2;j++)
{
pFFT[i*Width2+j] = (double)(sqrt((double)(pFftImage[i*Width2+j].real*pFftImage [i*Width2+j].real+pFftImage[i*Width2+j].imaginary*pFftImage[i*Width2+j].imaginary)));
}
}
pFftImage是傅里叶得到的复数数组。
[Quote=引用 15 楼 的回复:]
不用调整坐标啊,直接按点画出来就是啊

引用 14 楼 的回复:

谢谢你的回复,我现在的疑问就是怎么按照这些复数模的大小画图?现在得到的复数数组的坐标是与像素点的坐标对应的,画频谱图怎么调整坐标啊?跟开始学fft,问的问题可能比较简单,希望能给我讲下,非常感谢
引用 13 楼 的回复:
照这么说是对的。
按我的理解把这些复数按模的大小画灰度图就能看出频谱了。


引用 12 ……
[/Quote]
guopeng111111 2012-09-24
  • 打赏
  • 举报
回复
我取模显示还是得不到想要的图像啊,取模后得到的图像貌似是原图了啊,能留个邮箱或QQ吗?我把图发给你看下,麻烦你了,非常感谢![Quote=引用 15 楼 的回复:]
不用调整坐标啊,直接按点画出来就是啊

引用 14 楼 的回复:

谢谢你的回复,我现在的疑问就是怎么按照这些复数模的大小画图?现在得到的复数数组的坐标是与像素点的坐标对应的,画频谱图怎么调整坐标啊?跟开始学fft,问的问题可能比较简单,希望能给我讲下,非常感谢
引用 13 楼 的回复:
照这么说是对的。
按我的理解把这些复数按模的大小画灰度图就能看出频谱了。


引用 12 ……
[/Quote]
ohayou 2012-09-21
  • 打赏
  • 举报
回复
照这么说是对的。
按我的理解把这些复数按模的大小画灰度图就能看出频谱了。

[Quote=引用 12 楼 的回复:]

是的,先对行做一维fft,再对列做fft,这样做有什么不妥吗?
假如对2048*2048的图像进行快速傅里叶变换,我现在得到了2048*2048复数,该如何处理这些复数,得到图像的频谱图呢?
引用 11 楼 的回复:
这个二维的图像怎么看起来好像是按一维数组做的FFT?
[/Quote]
guopeng111111 2012-09-21
  • 打赏
  • 举报
回复
是的,先对行做一维fft,再对列做fft,这样做有什么不妥吗?
假如对2048*2048的图像进行快速傅里叶变换,我现在得到了2048*2048复数,该如何处理这些复数,得到图像的频谱图呢?
[Quote=引用 11 楼 的回复:]
这个二维的图像怎么看起来好像是按一维数组做的FFT?
[/Quote]
guopeng111111 2012-09-20
  • 打赏
  • 举报
回复
再补充一下,我用快速傅里叶算法得到了复数数组,后面该怎么处理,才能显示成频谱图啊?快速傅里叶变换代码如下:请高手指点,非常感谢!图像的行与列分别进行变换。
complex pTemp,tempX; //中间变量,定义的complex复数类型

complex *W = new complex[fft_nLen/2]; //fft_nLen为每次变换的数据个数

float Temp = 2*PI/fft_nLen;

for(int lev=1; lev<=fft_M; lev++) //fft_M蝶形级数
{
int dist = (int)pow(2.0,lev-1);

for(int t=0; t<dist; t++)
{
int p = t*(int)pow(2.0,fft_M-lev);
float Tempx = p*Temp;

W[p].real = (float)cos(Tempx);
W[p].imaginary = (float)(-1*sin(Tempx));

for(int i=t; i<fft_nLen; i=i+(int)pow(2.0,lev))
{
tempX = Mul(s_pFFTTemp[i+dist],W[p]);
pTemp = Add(s_pFFTTemp[i],tempX);

s_pFFTTemp[i+dist] = Sub(s_pFFTTemp[i],tempX);
s_pFFTTemp[i].real = pTemp.real;
s_pFFTTemp[i].imaginary = pTemp.imaginary;
}
}
}
ohayou 2012-09-20
  • 打赏
  • 举报
回复
这个二维的图像怎么看起来好像是按一维数组做的FFT?
guopeng111111 2012-09-19
  • 打赏
  • 举报
回复
弱弱的问题,怎么由复数数组得到频谱图啊?
[Quote=引用 8 楼 的回复:]
我在c中把得到的复数数组保存出来,然后用matlab读入保存的数据,显示时就成我说的图像了,刚开始搞fft,很多地方不明白,能给我讲下怎么回事吗?


引用 7 楼 的回复:
引用 6 楼 的回复:

谢谢你的回复,我没有取模,显示傅里叶变换得到的复数数组就是很凌乱的、黑白相间的图像,我想得到的是以中心点为中心的频谱图,不知道怎么弄?不知道怎么上传图像,能留下你的QQ联系吗?我的是36……
[/Quote]
guopeng111111 2012-09-19
  • 打赏
  • 举报
回复
我在c中把得到的复数数组保存出来,然后用matlab读入保存的数据,显示时就成我说的图像了,刚开始搞fft,很多地方不明白,能给我讲下怎么回事吗?

[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:

谢谢你的回复,我没有取模,显示傅里叶变换得到的复数数组就是很凌乱的、黑白相间的图像,我想得到的是以中心点为中心的频谱图,不知道怎么弄?不知道怎么上传图像,能留下你的QQ联系吗?我的是362488392,谢谢!
引用 1 楼 的回复:
你画黑白是取的模吗?


不取模你按什么画黑白?人家结果每个点是一个复数,你是按实部的值画啊还是按虚部画的?
[/Quote]
ohayou 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

谢谢你的回复,我没有取模,显示傅里叶变换得到的复数数组就是很凌乱的、黑白相间的图像,我想得到的是以中心点为中心的频谱图,不知道怎么弄?不知道怎么上传图像,能留下你的QQ联系吗?我的是362488392,谢谢!
引用 1 楼 的回复:
你画黑白是取的模吗?
[/Quote]

不取模你按什么画黑白?人家结果每个点是一个复数,你是按实部的值画啊还是按虚部画的?
guopeng111111 2012-09-19
  • 打赏
  • 举报
回复
谢谢你的回复,我没有取模,显示傅里叶变换得到的复数数组就是很凌乱的、黑白相间的图像,我想得到的是以中心点为中心的频谱图,不知道怎么弄?不知道怎么上传图像,能留下你的QQ联系吗?我的是362488392,谢谢!
[Quote=引用 1 楼 的回复:]
你画黑白是取的模吗?
[/Quote]
ohayou 2012-09-19
  • 打赏
  • 举报
回复
既然你没看见,就再问一遍:你画黑白是按照结果取模来画的么?
guopeng111111 2012-09-19
  • 打赏
  • 举报
回复
先谢谢你的回复,我现在做完傅里叶变换后得到复数数组,显示时是黑白点相间的图像,用matlab中的fft时得到的是四角白点或中心白点的图像啊,现在逆变换可以得到原图,现在主要是得到的复数数组显示时全图都是黑白相间的,怎么能弄成中间是白点的图像啊,不知道怎么上传图像,能留下QQ吗?我的是362488392,真心求教!
[Quote=引用 3 楼 的回复:]
引用楼主 的回复:
请教大侠:
我对图像进行傅里叶变换后得到的怎么是黑白点相间的、杂乱无章的图像啊?怎么能得到中心白点的图像呢?求救!


变换后得到的原图像在频域(frequency domain)值,你可以取中央部分的数据,再做傅里叶逆变换就可以得到图像了(时域信号),这种做法通常用于图像去噪
[/Quote]
pathuang68 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
请教大侠:
我对图像进行傅里叶变换后得到的怎么是黑白点相间的、杂乱无章的图像啊?怎么能得到中心白点的图像呢?求救!
[/Quote]

变换后得到的原图像在频域(frequency domain)值,你可以取中央部分的数据,再做傅里叶逆变换就可以得到图像了(时域信号),这种做法通常用于图像去噪
刘彬 2012-09-19
  • 打赏
  • 举报
回复
想进来学习的 ,没人抢沙发 ,帮楼主定下 !!
ohayou 2012-09-19
  • 打赏
  • 举报
回复
你画黑白是取的模吗?

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧