Java用傅立叶转化FFT方法对图像处理 数组越界问题 图像处理java傅立叶转换 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是Complex.javapackage src;//Complex.java//复数的定义class Complex { public double re; public double im; Complex(){ this.re=0; this.im=0; } Complex(double re){ this.re=re; this.im=re; } Complex(double re,double im){ this.re=re; this.im=im; } public void setRE(double re){ this.re=re; } public void setIM(double im){ this.im=im; } public double getRE(){ return this.re; } public double getIM(){ return this.im; } //复数加法 Complex Add(Complex c1,Complex c2){ Complex c=new Complex(0,0); c.re=c1.re+c2.re; c.im=c1.im+c2.im; return c; } //复数减法 Complex Sub(Complex c1,Complex c2){ Complex c=new Complex(0,0); c.re=c1.re-c2.re; c.im=c1.im-c2.im; return c; } //复数乘法 Complex Mul(Complex c1,Complex c2){ Complex c=new Complex(0,0); c.re=c1.re*c2.re-c1.im*c2.im; c.im=c1.re*c2.im+c2.re*c1.im; //c=Sub(c1,c2); return c; }} 这是Onefftpackage src;//OneFft.javaimport java.awt.*;public class Onefft { // 付立叶变换点数 int count; //循环变量 int i,j,k; //中间变量 int bfsize,p; int power; Complex[] w,x1,x2,x; Complex[] fd; public void setData(Complex [] data,int power){ this.power=power; //角度 double angle; //计算傅立叶变换的点数 count=1<<power; //分配空间 w=new Complex[count/2]; x=new Complex[count]; x1=new Complex[count]; x2=new Complex[count]; fd=new Complex[count]; //初始化 for(i=0;i<count/2;i++) { w[i]=new Complex(); } for(i=0;i<count;i++) { x[i]=new Complex(); x1[i]=new Complex(); x2[i]=new Complex(); fd[i]=new Complex(); } //计算加权系数 for(i=0;i<count/2;i++) { angle=-i*Math.PI*2/count; w[i].re=Math.cos(angle); w[i].im=Math.sin(angle); } //将实域点写入x1 for(i=0;i<count;i++) { x1[i]=data[i]; } } public Complex [] getData(){ //蝶形运算 for(k=0;k<power;k++) { for(j=0;j<1<<k;j++) { bfsize=1<<(power-k); for(i=0;i<bfsize/2;i++) { Complex temp1=new Complex(0,0); Complex temp2=new Complex(0,0); p=j*bfsize; x2[i+p]=temp1.Add(x1[i+p],x1[i+p+bfsize/2]); temp2=temp1.Sub(x1[i+p],x1[i+p+bfsize/2]); x2[i+p+bfsize/2]=temp1.Mul(temp2,w[i*(1<<k)]); } } x=x1; x1=x2; x2=x; } //重新排序 for(j=0;j<count;j++) { p=0; for(i=0;i<power;i++) { if((j&(1<<i))!=0) p+=1<<(power-i-1); } fd[j]=x1[p]; } return fd; } } 年前面试软件园一家小公司的22道选择题 关于java项目中的自定义异常^_^ java怎样解压缩.CAB格式的文件 求教闹钟问题 提几个c++ 与 java 的概念区别问题 请问谁知道:ArrayList中的get()方法和LinkedList中的get()方法有什么不同? 在线求教一个SWT控件风格,解决就放分 大家来讨论一下发展方向!!! 关于图像加载的问题,请指教(在线等) 请问如何知道邮件中的邮件哪个是新邮件,我是用POP3协议。请各位大虾指点一下。 请教有关正则表达式的一个问题,大牛请进 用JAVA怎么访问新浪微博页面?(经验证,不用登录可直接访问)
//Complex.java//复数的定义
class Complex {
public double re;
public double im;
Complex(){
this.re=0;
this.im=0;
}
Complex(double re){
this.re=re;
this.im=re;
}
Complex(double re,double im){
this.re=re;
this.im=im;
}
public void setRE(double re){
this.re=re;
}
public void setIM(double im){
this.im=im;
}
public double getRE(){
return this.re;
}
public double getIM(){
return this.im;
}
//复数加法
Complex Add(Complex c1,Complex c2){
Complex c=new Complex(0,0);
c.re=c1.re+c2.re;
c.im=c1.im+c2.im;
return c;
}
//复数减法
Complex Sub(Complex c1,Complex c2){
Complex c=new Complex(0,0);
c.re=c1.re-c2.re;
c.im=c1.im-c2.im;
return c;
}
//复数乘法
Complex Mul(Complex c1,Complex c2){
Complex c=new Complex(0,0);
c.re=c1.re*c2.re-c1.im*c2.im;
c.im=c1.re*c2.im+c2.re*c1.im;
//c=Sub(c1,c2);
return c;
}
}
//OneFft.javaimport java.awt.*;public class Onefft {
// 付立叶变换点数
int count;
//循环变量
int i,j,k;
//中间变量
int bfsize,p;
int power;
Complex[] w,x1,x2,x;
Complex[] fd;
public void setData(Complex [] data,int power){
this.power=power;
//角度
double angle;
//计算傅立叶变换的点数
count=1<<power;
//分配空间
w=new Complex[count/2];
x=new Complex[count];
x1=new Complex[count];
x2=new Complex[count];
fd=new Complex[count];
//初始化
for(i=0;i<count/2;i++)
{
w[i]=new Complex();
}
for(i=0;i<count;i++)
{
x[i]=new Complex();
x1[i]=new Complex();
x2[i]=new Complex();
fd[i]=new Complex();
}
//计算加权系数
for(i=0;i<count/2;i++)
{
angle=-i*Math.PI*2/count;
w[i].re=Math.cos(angle);
w[i].im=Math.sin(angle);
}
//将实域点写入x1
for(i=0;i<count;i++)
{
x1[i]=data[i];
}
}
public Complex [] getData(){
//蝶形运算
for(k=0;k<power;k++)
{
for(j=0;j<1<<k;j++)
{
bfsize=1<<(power-k);
for(i=0;i<bfsize/2;i++)
{
Complex temp1=new Complex(0,0);
Complex temp2=new Complex(0,0);
p=j*bfsize;
x2[i+p]=temp1.Add(x1[i+p],x1[i+p+bfsize/2]);
temp2=temp1.Sub(x1[i+p],x1[i+p+bfsize/2]);
x2[i+p+bfsize/2]=temp1.Mul(temp2,w[i*(1<<k)]);
}
}
x=x1;
x1=x2;
x2=x;
}
//重新排序
for(j=0;j<count;j++)
{
p=0;
for(i=0;i<power;i++)
{
if((j&(1<<i))!=0)
p+=1<<(power-i-1);
}
fd[j]=x1[p];
}
return fd;
}
}