我编写了以下函数,对输入图像应用快速傅立叶变换。我在行“F [2 * k] = F [2 * k] .plus(w_ux.mul(f_even));”中有空指针异常。“。
完成变换运行需要相当长的时间,时间类似于普通的傅里叶变换。并且结果图像不符合预期。
private Complex[] fft(byte[] img, int width, int height) {
// M - height N - width , u - height v - width
Complex[] F = new Complex[width*height]; // one single point
Complex w;
int size = F.length;
double w_ux_exp, w_u_exp;
double f_even, f_odd;
for (int u=0; u<size/2;u++){
for (int k=0; k<size/2; k++){
f_even = (double)(img[2*k]&0xFF)*Math.pow(-1, k); // f(x) for even, centering
f_odd = (double)(img[2*k+1]&0xFF)*Math.pow(-1, k); // f(x) for odd, centering
w_u_exp =-2.0 * Math.PI*2*(img[u]&0xFF) / size;
w_ux_exp =-2.0 * Math.PI*(2*k)*(img[u]&0xFF) / size; //even
Complex w_ux = Complex.fromPolar(1, w_ux_exp);
Complex w_u = Complex.fromPolar(1, w_u_exp);
F[2*u]= F[2*u].plus(w_ux.mul(f_even));
F[2*u+1]=F[2*u+1].plus(w_u.mul(f_odd));
}
}
return F;
}
非常感谢你的帮助。