Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java j转换奇异的实逆和实向_Java_Android - Fatal编程技术网

Java j转换奇异的实逆和实向

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

我遇到了一个奇怪的问题。希望你能帮助我! 我尝试在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 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