Java j转换奇异的实逆和实向
我遇到了一个奇怪的问题。希望你能帮助我! 我尝试在android上使用JTransforms(一个java FFT库)来处理图像。首先,我对R_焊盘进行FFT(realFoward,我没有使用realFowardFull以节省内存),然后使用IFFT(realInverse)恢复R_焊盘Java j转换奇异的实逆和实向,java,android,Java,Android,我遇到了一个奇怪的问题。希望你能帮助我! 我尝试在android上使用JTransforms(一个java FFT库)来处理图像。首先,我对R_焊盘进行FFT(realFoward,我没有使用realFowardFull以节省内存),然后使用IFFT(realInverse)恢复R_焊盘 double[][] R_pad = ImagePad(R, picw, pich, kernelxsize, kernelysize); int R_pad_size1 = R_pad.length; int
double[][] R_pad = ImagePad(R, picw, pich, kernelxsize, kernelysize);
int R_pad_size1 = R_pad.length;
int R_pad_size2 = R_pad[0].length;
Log.d("R_pad", "R_pad origin:"+ R_pad[20][13]);
Log.d("R_pad", "R_pad origin:"+ R_pad[40][82]);
// do fft to R_pad
DoubleFFT_2D fft_pad = new DoubleFFT_2D(R_pad_size1,R_pad_size2);
fft_pad.realForward(R_pad);
// do ifft
fft_pad.realInverse(R_pad, true);
Log.d("R_pad", "R_pad after1:" + R_pad[20][13]);
Log.d("R_pad", "R_pad after1:" + R_pad[40][82]);
根据理论,R_焊盘应与原R_焊盘保持一致。然而,我采样了一些元素,发现它们完全不同(不是很接近)
所以我写了一个小矩阵,看看这是否是这个库的问题
double[][] test = new double[][] {{121.0,151.0,132.0,190.0,90.0,71.0,0,0},{201.0,184.0,35.0,92.0,67.0,33.0,0,0},{93.0,104.0,27.0,35.0,88.0,204.0,0,0},{98.0,60.0,94.0,99.0,192.0,45.0,0,0}};
DoubleFFT_2D fft_test = new DoubleFFT_2D(4,8);
for(int j = 0; j <4; j++){
for (int i = 0; i < 8; i++){
Log.d("test fft", "test fft:"+test[j][i]);
}
}
fft_test.realForward(test);
fft_test.realInverse(test,true);
for(int j = 0; j <4; j++){
for (int i = 0; i < 8; i++){
Log.d("test fft", "test fft:"+test[j][i]);
}
}
double[]test=新的double[]test{{121.0151.0132.0190.0,90.0,71.0,0,0},{201.0184.0,35.0,92.0,67.0,33.0,0,0,0},{93.0104.0,27.0,35.0,88.0204.0,0,0,0},{98.0,60.0,94.0,99.0192.0,45.0};
DoubleFFT_2D fft_测试=新的DoubleFFT_2D(4,8);
对于JTTransforms文档中的(int j=0;j),在2d双数组的realForward和RealReverse方法描述中:
“只有当两个维度的大小都是两个数字的幂时,此方法才有效”
这就是为什么你的第二个例子效果很好,因为4和8都是2的幂
因此,我认为您应该将数据归零,使每个维度的长度为2的幂,或者使用complexForward和complexInverse