Устранение числовой разницы между MATLAB fft2 () и его реализацией fftw_plan_dft_2d () C ++ - PullRequest
0 голосов
/ 25 января 2012

Я пытаюсь реализовать функцию MATLAB fft2 () и ifft2 () в C ++, используя OpenCV и библиотеку FFTW3.3. Мне удалось успешно перенести код, который правильно выполняет прямое и обратное преобразование. Но сложные числовые значения матрицы dft, сгенерированной функцией MATLAB R2009a fft2 (), сильно отличаются от ее аналога FFTW. Мне нужно решить эту проблему для оптимальной производительности моего приложения. Я предоставляю свои реализации C ++ и пример ввода / вывода ниже:

Например, вышеупомянутая функция fft2 () вызывается с использованием следующего кода:

cv::Mat im(2,2,CV_64FC2);

im.at<cv::Vec2d>(0,0)[0] = 1;
im.at<cv::Vec2d>(0,0)[0] = 0;
im.at<cv::Vec2d>(0,1)[1] = 1;
im.at<cv::Vec2d>(0,1)[1] = 0;
im.at<cv::Vec2d>(1,0)[0] = 1;
im.at<cv::Vec2d>(1,0)[1] = 0;
im.at<cv::Vec2d>(1,1)[0] = 1;
im.at<cv::Vec2d>(1,1)[1] = 0;
    int rows = im.rows;
int cols = im.cols;
cv::Mat imagefft(rows,cols,CV_64FC2);
imagefft = fft2(im);

Для х = [1 + 1i 1 + 1i; 1 + 1i 1 + 1i] fft2 (x) обеспечивает

[4,0000 + 4,0000i 0; 0 0], где реализация fftw обеспечивает,

[- 6,27744e + 066-6,27744e + 066i 6,27744e + 066-6,27744e + 066i; -6.27744e + 066-6.27744e + 066i 6.27744e + 066-6.27744e + 066i]

Мне нужно понять, какова связь между этими двумя матрицами, если таковые имеются.

Ждем ваших предложений.

Заранее спасибо.

...