使用傅里叶变换来处理图像,可以滤波,去噪。 但是网络上java实现很少,可以运行的就更少,我总结了一些代码,并加以调试,
保证速度的情况下得以运行成功。 这些代码仅对灰度图验证通过。学习之用。
调用结果可以用http://cns-alumni.bu.edu/~slehar/fourier/fourier.html#filtering 网站的图片验证:
输入图像:ff8.bmp 输出图像fft_result.bmp
输入图像:ff8.bmp 输出图像fft_result.bmp
所有FFT变换都已经验证通过。 但是傅里叶逆变换没有成功。 有高手可以指点一下。 如何使逆变换的图片显示出来。
FFT 类负责一维变换:
package app.fourier;
public class FFT {
// double r_data[] = null;
// double i_data[] = null;
// compute the FFT of x[], assuming its length is a power of 2
public static void fft(Complex[] src, int row, int width, Complex[] dest) {
Complex[] temp = new Complex[width];
for (int k = 0; k < width; k++) {
temp[k] = src[row * width + k];
}
temp = fft(temp);
//set output
for (int k = 0; k < width; k++) {
dest[row * width + k] = temp[k];
}
}
public static Complex[] fft(Complex[] x) {
int N = x