저는 FFT (고속 푸리에 변환)를 처음 사용하고 C++와 같은 프로그래밍 언어로 계산하는 방법에 대해 잘 모릅니다. 여기 FFT2DFFT2D (고속 푸리에 변환 2D) R, G, B 색상 구성 요소 수행 방법
void FFT2D(Complex<double> *f, Complex<double> *F, int width, int height);
It takes an input image f of size width * height and output the transformed
coefficients into F.
힌트 방법 : 이들을 각각 복소수의 1 차원 배열로 표시되면서 이미지 픽셀은 세 개의 이미지의 색상 (R, G, B)면으로 저장된다. 화상이 크기 폭 W 및 높이 H 인 경우, 화상 위치 (m, n)에서의 화소의 색 성분 값 (R, G 및 B)은 R [m + n * W], G m + n * W) 및 B [m + n * W] (R, G, B는 복소수의 3 개 배열입니다. 변환 된 계수의 1D 배열도 같은 방식으로 나타납니다.
하나의 색상 구성 요소에 대해서만 처리를 구현해야하며 프로그래밍 템플릿은 구현 된 기능을 기반으로 R, G, B를 개별적으로 처리합니다. 템플릿은 각 입력 이미지의 크기가 2m * 2n이되도록 이미지에 0을 채 웁니다.
If I called from another class, I have to pass R, G, B separately
Suppose:
Complex<double> *R = new Complex<double>[width * height];
Let, width = 4096 and height 4096
FFT2D(R, output F, width, height) for compute “R” color component;
FFT2D(G, output F, width, height) for compute “G” color component;
FFT2D(B, output F, width, height) for compute “B” color component;
We have template of calculated FFT1D function:
void FFT1D(Complex<double> *fx, Complex<double> *Fu, int twoK, int stride)
Hint: it outputs the frequency coefficients in the array Fu.
FFT1D는 FFT2D의 함수 내부에서 호출된다. C, C++ 및 Java와 C#에서 FFT2D의 여러 가지 유형의 코드를 발견했습니다. 대부분 2D 배열 구조를 사용하여 구현했습니다. 행과 열의 루프로 2D 배열 구조에 실수와 허수 부를 할당합니다. 그러나, 내 경우에는 색상 구성 요소의 1D 배열 구조입니다.
하자가, 몇 가지 코드를하고이 FFT2D 기능 내부하십시오 FFTID를 호출하기 전에
Complex<double> *outPutMap = new Complex<double>[width * height];
for (int i = 0; i < height; i++){
# for(int j = 0; j < width; j++){
# outPutMap[i + j * width] = f[i + j * width];
# I don’t understand how to implement in here for color component and how
# it assign a value for real and imaginary part
# }
}
, 그것은 또한 당신이 경우, 책으로 twoK의 값을 계산 M = 2K
필요 어떤 아이디어 나 참고 자료가 있으면 알려주세요.
는감사 이치로가
[FFTW] (http://www.fftw.org) 라이브러리를 사용하십시오. –