0
我使用FFT创建的图像与IFFT相比,有问题。这是我正在转换的图像:oryginal image,以下是我在FFT和IFFT后获得的图像:output image。我认为相转换是好的,问题在于大小转换。下面是对每个像素中环红色通道我FFT功能的一部分,OUTR从fftw_plan_dft_2d功能输出和magRMax是所有大小的maxiumum值:在IFT中使用QT C++中的FFTW库模糊图像
realR = outR[tempCounter][0]/(double)(squareSize * squareSize);
imagR = outR[tempCounter][1]/(double)(squareSize * squareSize);
...
magR = sqrt((realR * realR) + (imagR * imagR));
...
int param = 255;
magR = (param*log(magR+1))/log(1 + magRMax);
...
magR = (magR > 255 ? 255 : magR);
...
magR = (magR < 0 ? 0 : magR);
...
tempColor.setRed((int)magR);
新的像素被分配到幅度图像。经过FFT和创建幅度,我试图做IFFT没有任何幅度,相位图像的任何中期变化的相位图像。下面是用于红色chanell我的IFFT功能的一部分:
planR = fftw_plan_dft_2d(squareSize, squareSize, inR, outR, FFTW_BACKWARD, FFTW_ESTIMATE);
...
tempColor.setRgb(myImageMag->pixel(i,j));
tempColor2.setRgb(myImagePhase->pixel(i,j));
magR = tempColor.red()/255.0;
phaseR = ((tempColor2.red()/255.0) * 2 * M_PI) - M_PI;
inR[tempCounter][0] = (magR * cos(phaseR));
inR[tempCounter][1] = (magR * sin(phaseR));
...
redMax += abs(redMin);
...
red = (int)(outR[tempCounter][0]);
...
red = ((red + abs(redMin))/(double)redMax)*255.0;
...
tempColor.setRed(red);
的RedMAX是OUTR的所有像素的最大值[tempCounter] [0],redMin是OUTR的所有像素的最小值[tempCounter] [0]。 redMax + = abs(redMin)是缩小的过程,因为我得到的值低于0,我也调整了所有的红色值。
代码以在GitHub进行编程:
https://github.com/Hariver/POID/blob/master/main.cpp