
正文
java傅里叶变换代码 傅里叶变换程序实现
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
傅里叶变换如何解决大整数乘法? 希望能给出思路,最好能用JAVA语言描述一下,万分感谢
用BigInteger
给java傅里叶变换代码你个例子
import java.math.BigInteger;
public class Admin {
public static void main(String... args) {
BigInteger a = BigInteger.valueOf(Long.MAX_VALUE);
BigInteger b = BigInteger.valueOf(Long.MAX_VALUE);
System.out.println(a);
System.out.println(b);
// 加
System.out.println(a.add(b));
// 减
System.out.println(a.subtract(b));
// 乘
System.out.println(a.multiply(b));
// 除
System.out.println(a.divide(b));
}
}
相关问答
Q1: 求教,傅里叶变换,不胜感激。f(t)=u(t)e^-t的傅里叶变换
这里t已经是符号变量,就不用对它赋值(第二行)。我写了个简单的代码:pre t="code"
l="cpp"clear all;
close all;
clc;
%带有阶跃函数的Laplace变换
syms t s
f=exp(-t)*heaviside(t-2) %heaviside 阶跃函数的表示
F=laplace(f,t,s)运行的程序截图如下:f =heaviside(t - 2)/exp(t) F =1/(exp(2)*exp(2*s)*(s + 1))
定义
f(t)是t的周期函数,如果t满足狄里赫莱条件:在一个以2T为周期内f(X)连续或只有有限个第一类间断点,附f(x)单调或可划分成有限个单调区间,则F(x)以2T为周期的傅里叶级数收敛,和函数S(x)也是以2T为周期的周期函数,且在这些间断点上,函数是有限值;在一个周期内具有有限个极值点;绝对可积。则有下图①式成立。称为积分运算f(t)的傅立叶变换。
Q2: 求傅里叶变换(DFT)Java源码 图像处理
您对于傅里叶变换恐怕并不十分理解
傅里叶变换的实质是将一个信号分离为无穷多多正弦/复指数信号的加成,也就是说,把信号变成正弦信号相加的形式——既然是无穷多个信号相加,那对于非周期信号来说,每个信号的加权应该都是零——但有密度上的差别,你可以对比概率论中的概率密度来思考一下——落到每一个点的概率都是无限小,但这些无限小是有差别的
所以,傅里叶变换之后,横坐标即为分离出的正弦信号的频率,纵坐标对应的是加权密度
对于周期信号来说,因为确实可以提取出某些频率的正弦波成分,所以其加权不为零——在幅度谱上,表现为无限大——但这些无限大显然是有区别的,所以我们用冲激函数表示
已经说过,傅里叶变换是把各种形式的信号用正弦信号表示,因此非正弦信号进行傅里叶变换,会得到与原信号频率不同的成分——都是原信号频率的整数倍。这些高频信号是用来修饰频率与原信号相同的正弦信号,使之趋近于原信号的。所以说,频谱上频率最低的一个峰(往往是幅度上最高的),就是原信号频率。
傅里叶变换把信号由时域转为频域,因此把不同频率的信号在时域上拼接起来进行傅里叶变换是没有意义的——实际情况下,我们隔一段时间采集一次信号进行变换,才能体现出信号在频域上随时间的变化。
我的语言可能比较晦涩,但我已尽我所能向你讲述我的一点理解——真心希望能对你有用。我已经很久没在知道上回答过问题了,之所以回答这个问题,是因为我本人在学习傅里叶变换及拉普拉斯变换的过程中着实受益匪浅——它们几乎改变了我对世界的认识。傅里叶变换值得你用心去理解——哪怕苦苦思索几个月也是值得的——我当初也想过:只要会算题就行。但浙大校训“求是”时时刻刻鞭策着我追求对理论的理解——最终经过很痛苦的一番思索才恍然大悟。建议你看一下我们信号与系统课程的教材:化学工业出版社的《信号与系统》,会有所帮助。
Q3: 我需要做一个关于图像复原算法的JAVA程序~我有代码~但是我不懂,需要一个完整的解释~
(本人学习比较努力,基本上一天学习九小时)
就冲以上这点, 你很有前途. 学VC基础非常重要, 请特别注意C与C++的区别, 一定要有面向对象的概念. 以下是我自己的学习经验, 推荐你看的书:
入门:
入门就是要初步对编程的思想有个了解,并且能编程解决一些小问题。入门一定要选好书,难度如果太低了会造成对读者的误导,以为编程就是这么回事;也不能太高深,免的打击读者的信心。既然编程的入门要求是编一些小程序解决小问题,那么就没必要直接学习C++,我觉得循环、判断、跳转、指针才是最基本的编程思想,学通了这些对以后学习C++很有帮助。
相信你已经过了这个阶段,可以用《C++编程思想》审视自己一下语言方面究竟扎实掌握多少了。
提高:
我们不能满足于解决“百钱买百鸡”,真正实现程序还有很多非功能上的问题,比如怎样做才能使用更少的内存?怎样做才能更快?在熟悉一门语言后,一定要认真学习的就是数据结构!数据结构保证了我们的程序能以高效的方式运行。《 数据结构算法与应用C++语言描述 》是本好书,它提供了很多实际的例子,比如火车站调度、走迷宫,相比于“百钱买百鸡”这种问题又提高了一个层次。(这里就是解决基本算法问题)
接下来可以看看《WINDOWS编程》《深入浅出MFC》等,也可以参考《visual c++ 6。0 技术内幕》(现在微软应该已经出到。NET版本了),你要用VC,那就是跟着微软走,所以要对他的实现模式和整个基本框架有了解,里面涉及很多API,消息的知识,够你学习一段时间了。
再提高:
到现在为止,你已经熟练掌握C++语言了,当然,你肯定也有了一定的工作经验。现在你可以看看《effective C++》和《more effective c++》,因为你的代码还冗余很大,效率也很低,这两本书可以让你的编程水平有质的飞跃!
最后,你需要提高的就是设计思想,就由《 设计模式--可复用面向对象软件的基础 》来补救吧!所谓模式就是前人总结出来的、经过千锤百炼的一种系统结构,设计模式展示了23个经典的模式,通过学习、理解,你可以看到什么是真正的面向对象。
看了《 设计模式--可复用面向对象软件的基础 》后,有时间不妨看看《 重构--改善既有代码的设计(中文版) 》,学了面向对象的设计思想后看它,可以站在一定高度重新审视一下自己的C++编程水平。
结束语:
在学习编程的过程中一定要注意多实践!学习时到专业论坛同大家讨论是个不错的办法,你会找到许多热心的朋友与您一起学习,能通过学习编程交些朋友不是更好吗?最后,希望您能成为优秀的程序设计师,我也是过来人,大家可以多多交流,共同进步!
忘了说了, 对于数据库什么的你不用担心, 只要基础扎实了, 无论什么具体工作上手都很快的. 反对那些知识埋头写程序而从来不用脑子好好想想的人. 千万不要忽视培养自己分析问题和把握宏观系统结构的能力!
Q4: 图像傅里叶变换的步骤是什么? java
冈萨雷斯版图像处理里面的解释非常形象:一个恰当的比喻是将傅里叶变换比作一个玻璃棱镜。棱镜是可以将光分解为不同颜色的物理仪器,每个成分的颜色由波长(或频率)来决定。傅里叶变换可以看作是数学上的棱镜,将函数基于频率分解为不同的成分。当考虑光时,讨论它的光谱或频率谱。同样, 傅立叶变换能通过频率成分来分析一个函数。
Fourier theory讲的就是:任何信号(如图像信号)都可以表示成一系列正弦信号的叠加,在图像领域就是将图像brightness variation 作为正弦变量。比如下图的正弦模式可在单傅里叶中由三个分量编码:频率f、幅值A、相位γ 这三个value可以描述正弦图像中的所有信息。
1.frequency
frequency在空间域上可由亮度调节,例如左图的frequency比右图的frequency低……
2.幅值magnitude(amplitude)
sin函数的幅值用于描述对比度,或者说是图像中最明和最暗的峰值之间的差。(一个负幅值表示一个对比逆转,即明暗交换。)
3.相位表示相对于原始波形,这个波形的偏移量(左or右)。
=================================================================
一个傅里叶变换编码是一系列正弦曲线的编码,他们的频率从0开始(即没有调整,相位为0,平均亮度处),到尼奎斯特频率(即数字图像中可被编码的最高频率,它和像素大小、resolution有关)。傅里叶变换同时将图像中所有频率进行编码:一个只包含一个频率f1的信号在频谱上横坐标f为f1的点处绘制一个单峰值,峰值高度等于对应的振幅amplitude,或者正弦曲线信号的高度。如下图所示。
DC term直流信号对应于频率为0的点,表示整幅图像的平均亮度,如果直流信号DC=0就表示整幅图像平均亮度的像素点个数=0,可推出灰度图中,正弦曲线在正负值之间交替变化,但是由于灰度图中没有负值,所以所有的真实图像都有一个正的DC term,如上图所示。
出于某些数学分析原因,经常把傅里叶变换用mirror-image表示,在原点的的两端,frequency都是增加的方向,具有相同的幅值。
上面讲的都是一维信号,一个二维傅里叶变换是一维傅里叶变换在每一个行扫描线和列扫描线上的傅里叶变换的叠加。
傅里叶谱图上的每一个像素点都代表一个频率值,幅值由像素点亮度变码而得。最中心的亮点是指直流分量,傅里叶谱图中越亮的点,对应于灰度图中对比越强烈(对比度越大)的点。
由于每一列扫描线上没有变化,所以相应的fourier spectrum上行向量为0, 每一行扫描线上有contrast,所以有频率幅值。
这里频率比上面的小,相应的亮点比上副图也集中。
图像傅立叶变换的物理意义
傅里叶提出任何周期函数都可以表示为不同频率的正弦和/或余弦和的形式,每个正弦和/或余弦乘以不同的系数(傅里叶级数)。图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度.在噪声点和图像边缘处的频率为高频。
傅立叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅立叶变换就表示f的谱。从纯粹的数学意义上看,傅立叶变换是将一个函数转换为一系列周期函数来处理的。从物理效果看,傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。换句话说,傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数.
傅立叶变换以前,图像(未压缩的位图)是由对在连续空间(现实空间)上的采样得到一系列点的集合,习惯用一个二维矩阵表示空间上各点,则图像可由z=f(x,y)来表示。由于空间是三维的,图像是二维的,因此空间中物体在另一个维度上的关系就由梯度来表示,这样可以通过观察图像得知物体在三维空间中的对应关系。为什么要提梯度?因为实际上对图像进行二维傅立叶变换得到频谱图,就是图像梯度的分布图,当然频谱图上的各点与图像上各点并不存在一一对应的关系,即使在不移频的情况下也是没有。傅立叶频谱图上我们看到的明暗不一的亮点,实际上图像上某一点与邻域点差异的强弱,即梯度的大小,也即该点的频率的大小(可以这么理解,图像中的低频部分指低梯度的点,高频部分相反)。一般来讲,梯度大则该点的亮度强,否则该点亮度弱。这样通过观察傅立叶变换后的频谱图,也叫功率图,首先就可以看出,图像的能量分布,如果频谱图中暗的点数更多,那么实际图像是比较柔和的(因为各点与邻域差异都不大,梯度相对较小),反之,如果频谱图中亮的点数多,那么实际图像一定是尖锐的,边界分明且边界两边像素差异较大的。对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。将频谱移频到圆心除了可以清晰地看出图像频率分布以外,还有一个好处,它可以分离出有周期性规律的干扰信号,比如正弦干扰,一副带有正弦干扰,移频到原点的频谱图上可以看出除了中心以外还存在以某一点为中心,对称分布的亮点集合,这个集合就是干扰噪音产生的,这时可以很直观的通过在该位置放置带阻滤波器消除干扰.
图像是两个参数的函数,通过一组正交函数的线性组合可以将其分解,而傅里叶就是通过谐波函数来分解的。而对于离散傅里叶变换,傅里叶变换的条件是存在的。
傅里叶变换进行图像处理有几个特点
1. 直流成分F(0,0)等于图像的平均值;
2. 能量频谱|F(u,v)|^2完全对称于原点;其中F=PfQ, f表示原图,P和Q都是对称的实正交矩阵,这个公式表示傅里叶变换就是个正交矩阵的正交变换
3.图像f平移(a,b)后,F只有exp[-2pij(au/M+bv/M)]的相位变化,能量频谱不发生变化。
4. 图像f自乘平均等于能量频谱的总和,f的分散等于能量频谱中除直流成分后的总和。
5.图像f(x,y)和g(x,y)的卷积h(x,y)=f(x,y)*g(x,y)的傅里叶变换H(u,v)等于f(x,y)和g(x,y)各自的傅里叶变换的乘积。
图像中的每个点通过傅里叶变换都成了谐波函数的组合,也就有了频率,这个频率则是在这一点上所有产生这个灰度的频率之和,也就是说傅里叶变换可以将这些频率分开来。当想除去图像背景时,只要去掉背景的频率就可以了。
在进行傅里叶变换时,实际上在某一特定的频率下,计算每个图像位置上的乘积。就是f(x,y)exp[-j2pi(ux+vy)],然后计算下一个频率。这样就得到了频率函数。
也就是说,看到傅里叶变换的每一项(对每对频率u,v,F(u,v)的值)是由f(x)函数所有值的和组成。f(x)的值与各种频率的正弦值和余弦值相乘。因此,频率u, v决定了变换的频率成分(x, y也作用于频率,但是它们相加,对频率有相同的贡献)。
通常在进行傅里叶变换之前用(-1)^(x+y)乘以输入的图像函数,这样就可以将傅里叶变换的原点F(0,0)移到(M/2,N/2)上。
每个F(u,v)项包含了被指数修正的f(x,y)的所有值,因而一般不可能建立图像特定分量和其变换之间的联系。然而,一般文献通常会有关于傅里叶变换的频率分量和图像空间特征之间联系的阐述。变换最慢的频率成分(u=v=0)对应一幅图像的平均灰度级。当从变换的原点移开时,低频对应着图像的慢变换分量,较高的频率开始对应图像中变化越来越快的灰度级。这些事物体的边缘和由灰度级的突发改变(如噪声)标志的图像成分。
在频率域中的滤波基础
1. (-1)^(x+y)乘以输入图像来进行中心变换
2. 由(1)计算图像的DFT, 即F(u,v)
3. 用滤波器函数H(u,v)乘以F(u,v)
4. 计算(3)中的结果的反DFT
5. 得到(4)中的结果的实部
6. 用(-1)^(x+y)乘以(5)中的结果
另外说明以下几点:
1、图像经过二维傅立叶变换后,其变换系数矩阵表明:
若变换矩阵Fn原点设在中心,其频谱能量集中分布在变换系数短阵的中心附近(图中阴影区)。若所用的二维傅立叶变换矩阵Fn的原点设在左上角,那么图像信号能量将集中在系数矩阵的四个角上。这是由二维傅立叶变换本身性质决定的。同时也表明一幅图像能量集中低频区域。
2 、变换之后的图像在原点平移之前四角是低频,最亮,平移之后中间部分是低频,最亮,亮度大说明低频的能量大(幅角比较大)
java傅里叶变换代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于傅里叶变换程序实现、java傅里叶变换代码的信息别忘了在本站进行查找喔。






