fft快速傅立叶变换问题!!急

问题描述

我是用java进行fft变换。参考了一些资料,实现了二维的fft。比如说输入二维矩阵输出的结果和和参考的结果一样。。但是我有个问题不明白,假如是一一幅图像作为二维矩阵进行fft变换,变换前的矩阵是每个像素的灰度值么?变换以后的复数矩阵怎么把它显示成该图像的频谱呢?贴出核心代码大家给个说明吧谢谢就是resPixArray返回的复数数组怎么把它显示成输入图像的频谱???//一维FFT变换publicvoidFFT(){//doublea=Math.log10(complex.length-1)/Math.log10(2);//doubleb=Math.pow(2,(int)a+1);intN=complex.length;Complexexp[]=newComplex[N];Complextemp=newComplex();intM=(int)(Math.log10(N)/Math.log10(2));intB=0,P=0;for(inti=0;i<N;i++){exp[i]=newComplex(Math.cos(i*2.0*Math.PI/N),-Math.sin(i*2.0*Math.PI/N));}changeOrder(N);for(intL=1;L<=M;L++){B=(int)Math.pow(2,(L-1));for(intj=0;j<=B-1;j++){P=j*(int)Math.pow(2,(M-L));for(intk=j;k<=N-1;k+=(int)Math.pow(2,L)){temp=temp.mul(complex[k+B],exp[P]);complex[k+B]=temp.sub(complex[k],temp);complex[k]=temp.add(complex[k],temp);}}}}//二维FFT快速傅立叶变换publicComplex[][]FFT2(int[]currPixArray){Complex[][]resPixArray=newComplex[height][width];intN=Math.max(width,height);complex=newComplex[N];for(inti=0;i<N;i++)complex[i]=newComplex();for(inti=0;i<height;i++){for(intj=0;j<width;j++){currPixArray[i*width+j]=currPixArray[i*width+j]&0xff;//System.out.println(currPixArray[i*width+j]);resPixArray[i][j]=newComplex(currPixArray[i*width+j],0);}}for(inti=0;i<height;i++){for(intj=0;j<width;j++){complex[j]=resPixArray[i][j];}FFT();for(intj=0;j<width;j++){resPixArray[i][j]=complex[j];}}for(inti=0;i<width;i++){for(intj=0;j<height;j++){complex[j]=resPixArray[j][i];}FFT();for(intj=0;j<height;j++){resPixArray[j][i]=complex[j];}}returnresPixArray;}privatevoidchangeOrder(intN){intweight=N/2;intj=weight,k=weight;for(inti=1;i<N/2;i++){swap(i,j);k=weight;while(j>=k){j=j-k;k=(int)(k/2+0.5);}j=j+k;}}privatevoidswap(inti,intj){Complextemp=newComplex();temp=complex[i];complex[i]=complex[j];complex[j]=temp;}

解决方案

解决方案二:
1。把结果的实部和虚部分别做成矩阵来试试。2.可能要进行归一化,要不制作图像的过程会出错
解决方案三:
恩可是是要归一化吧。。求教具体怎么个做法呢??
解决方案四:
1.变换前的矩阵就是图像的灰度值2.运算FFT后,返回两个矩阵,分别代表结果中的实数与虚数。这些东东在图像书上都有啊!为了显示输出的效果,需要将图像归一化,就是将图像的值区间约束到0-1之间(对于算计机图像处理来说,是约束到0-255之间)。FFT输出的对比度太强,可能导致显示出来的图就是中间一个亮点,没什么意义,所以会需要进行降对比度处理,书上一般是使用一个对数函数来进行,进行对数操作以后,再归一化显示,效果就出来了

时间: 2024-08-02 04:32:48

fft快速傅立叶变换问题!!急的相关文章

快速傅立叶变换(FFT)的C#代码

这个代码是从<快速傅立叶变换(FFT)的C++实现与Matlab实验>这篇文章里的源代码转换而来,请注意查看原文. 在这里自己转换成了C#代码,并作了一些改动,主要是对N值的确定,原文的N值为常量1024,自己通过对输入的数组的长度来确定N值,N值的确定符合2的n次方,函数返回N值.通过作者提供的测试变量进行测试,能得到相应的结果.代码如下: FFT代码: using System; using System.Collections.Generic; using System.Text; na

《精通Matlab数字图像处理与识别》一6.3 快速傅立叶变换及实现

6.3 快速傅立叶变换及实现 精通Matlab数字图像处理与识别 6.2节介绍了离散傅立叶变换(DFT)的原理,但并没有涉及其实现问题,这主要是因为DFT的直接实现效率较低.在工程实践中,我们迫切地需要一种能够快速计算离散傅立叶变换的高效算法,快速傅立叶变换(FFT)便应运而生.本节将给出快速傅立叶变换算法的原理及其实现细节. 6.3.1 FFT变换的必要性 之所以提出快速傅立叶变换(FFT)方法,是因为在计算离散域上的傅立叶变换时,对于N点序列,它的DFT变换与反变换对定义为 于是不难发现,计

《精通Matlab数字图像处理与识别》一6.2 傅立叶变换基础知识

6.2 傅立叶变换基础知识 精通Matlab数字图像处理与识别 要理解傅立叶变换,掌握频率域滤波的思想,必要的数学知识是不能跳过的.为便于理解,我们将尽可能定性地去描述.其实傅立叶变换所必需的数学知识对于一个理工科大学二年级以上的学生来说是很有限的,高等数学中傅立叶级数的知识加上线性代数中基和向量空间的概念就足够了.下面就从一维情况下的傅立叶级数开始进行介绍. 6.2.1 傅立叶级数 法国数学家傅立叶发现任何周期函数只要满足一定条件(狄利赫里条件)都可以用正弦函数和余弦函数构成的无穷级数,即以不

分数阶fourier变换-很急!!!matlab仿真分数阶Fourier变换

问题描述 很急!!!matlab仿真分数阶Fourier变换 初学分数阶Fourier变换,matlab又很水,十分希望大神的matlab仿真分数阶Fourier变换的程序!!!万分感谢!!! 解决方案 matlab 仿射变换

傅立叶变换-是否有支持定点化,支持NEON, 支持任意长度的的傅里叶变换的库

问题描述 是否有支持定点化,支持NEON, 支持任意长度的的傅里叶变换的库 现在正在做实时信号处理,在ARM上对性能要求比较高,所以需要比较快的FFT库 需要能同时支持定点化,NEON指令优化,并且支持非2的N次方的傅里叶变换库.希望有谁有用过的,了解过的,介绍一下给点指导. PS:现在找到大部分库都都不能满足上面三个特性,例如FFTWKISSFFTNET10 等都是只能满足两个特性.

傅立叶变换-读取音频文件 分析是否包含某区间频率的值

问题描述 读取音频文件 分析是否包含某区间频率的值 发动机故障,录下故障声音,通过一个软件识别是否有某个频率或某段频率的声音-从而给诊断带来依据.请问这个怎么实现?用matlab或..net实现.有代码吗? 解决方案 的确可以判断是否有某段频率的声音,但根据声音识别故障,我还是头回听说... 解决方案二: 这个你就不用管啦!是初步筛查故障范围! 有没有代码啊--

英特尔开源分布式深度学习库BigDL:支持高性能大数据分析

近日,英特尔开源了一个运行在 Apache Spark 上的分布式深度学习库 BigDL,其可以利用已有的 Spark 集群来运行深度学习计算,并且还能简化从 Hadoop 的大数据集的数据加载. 开源地址>>> 据介绍,在 Xeon 服务器上的测试表明,BigDL 相比于 Caffe.Torch 或 TensorFlow 等开源框架实现了显著的速度提升.其速度可与主流的 GPU 相媲美,而且 BigDL 也能扩展到多达数十个 Xeon 服务器. BigDL 库支持 Spark 1.5.

学计算机的值得一看的文章,跟帖也很有水平啊

从csdn上转来的,n手货,原始作者大概是04年发表的,已经无从查找原文出处了. 希望纠结要不要读研的人,看到后有所帮助. 回复CSDN和KAOYAN诸位网友的几点看法,(为避免吵架,郑重声明,本人不是高手,只是有感而发的一点个人陋见,欢迎指正,事先感谢): 就我自己的理解,谈谈我对读研和软件学院的看法,不妥之处一笑了之即可. 如果你有实际开发工作经验,感觉自己的水平和实力进入了一个高原期,迫切需要从理论上提高,那么计算机学院是唯一选择.因为计算机学院才能让你在理论上更上一层楼.软件学院从教学计

ADSL调制与业务承载

目前,宽带接入技术已经成为IT界日益关注的热点.在各种宽带接入技术中,具有代表意义的一种技术就是ADSL(非对称数字用户线).这种技术可以通过现有普通电话用户双绞线,实现远距离的高速非对称数据传输,同时还可以维持原有的电话业务及其质量,是一种集话音与数据一起的.新的铜线接入技术.它的最大特点是能够提供高达8Mbit/s的下行速率.例如,可以使用ADSL技术来提供1.5M MPEG-1或4M MPEG-2的VOD业务. ADSL更为吸引人的地方是:它在同一铜线上分别传送数据和语音信号,数据信号并不