http://www.fftw.org/のライブラリを使用してイメージをFFTして、周波数領域で畳み込みを行うことができます。しかし、私はそれを動作させる方法を理解できません。 これを行う方法を理解するには、イメージをピクセルカラーの配列としてFFTを転送し、ピクセルカラーの同じ配列を取得するために逆FFTを実行しようとしています。ここで私は何をすべきかです:イメージを前方にFFTし、イメージを逆FFTして同じ結果を得る
fftw_plan planR, planG, planB;
fftw_complex *inR, *inG, *inB, *outR, *outG, *outB, *resultR, *resultG, *resultB;
//Allocate arrays.
inR = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * width * width);
inG = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * width * width);
inB = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * width * width);
outR = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * width * width);
outG = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * width * width);
outB = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * width * width);
resultR = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * width * width);
resultG = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * width * width);
resultB = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * width * width);
//Fill in arrays with the pixelcolors.
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int currentIndex = ((y * width) + (x)) * 3;
inR[y * width + x][0] = pixelColors[currentIndex];
inG[y * width + x][0] = pixelColors[currentIndex + 1];
inB[y * width + x][0] = pixelColors[currentIndex + 2];
}
}
//Forward plans.
planR = fftw_plan_dft_2d(width, width, inR, outR, FFTW_FORWARD, FFTW_MEASURE);
planG = fftw_plan_dft_2d(width, width, inG, outG, FFTW_FORWARD, FFTW_MEASURE);
planB = fftw_plan_dft_2d(width, width, inB, outB, FFTW_FORWARD, FFTW_MEASURE);
//Forward FFT.
fftw_execute(planR);
fftw_execute(planG);
fftw_execute(planB);
//Backward plans.
planR = fftw_plan_dft_2d(width, width, outR, resultR, FFTW_BACKWARD, FFTW_MEASURE);
planG = fftw_plan_dft_2d(width, width, outG, resultG, FFTW_BACKWARD, FFTW_MEASURE);
planB = fftw_plan_dft_2d(width, width, outB, resultB, FFTW_BACKWARD, FFTW_MEASURE);
//Backward fft
fftw_execute(planR);
fftw_execute(planG);
fftw_execute(planB);
//Overwrite the pixelcolors with the result.
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int currentIndex = ((y * width) + (x)) * 3;
pixelColors[currentIndex] = resultR[y * width + x][0];
pixelColors[currentIndex + 1] = resultG[y * width + x][0];
pixelColors[currentIndex + 2] = resultB[y * width + x][0];
}
}
は、誰かが私にFFT画像、その後、後方FFT同じ結果を得るためにFFTWを使用して画像を転送する方法の例を示していただけますか?私は、FFTWをFFTに使用する方法を示す多くの例を見てきましたが、イメージを表すピクセルカラーの配列を持つ私の状況にどのように適用されるのか理解できません。