Я пытаюсь реализовать функцию 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]
Мне нужно понять, какова связь между этими двумя матрицами, если таковые имеются.
Ждем ваших предложений.
Заранее спасибо.