Я пытаюсь сделать DFT для реальной 2D-матрицы, используя FFTW3.
это мой фрагмент кода:
size_t nyh = ny/2 + 1;
out = (fftw_complex*)fftw_malloc ( sizeof ( fftw_complex ) * nx * nyh );
plan_forward = fftw_plan_dft_r2c_2d ( nx, ny, in, out, FFTW_ESTIMATE );
fftw_execute ( plan_forward );
где in
это double*
каждое значение в порядке е-270.
моя проблема в том, что вне содержит всегда -nan
ценности.
Есть ли хитрость, чтобы получить правильные значения?
Спасибо
Спасибо всем.
Проблема, в которой я работал, не была связана с библиотекой FFTW3, и мой код был верным, несмотря на его слабость.
Моя проблема возникла из-за того, что я кормлю fftw_plan_dft_r2c_2d
функция, которая выдается из cv::Mat
образ. Итак, я публикую ошибку, которую я сделал, чтобы помочь кому-либо получить эту проблему 🙂
Я конвертирую cv::Mat
к vector<vector<double> >
используя эту функцию:
static MatrixOfDouble _convertMat( cv::Mat& inMat)
{
MatrixOfDouble result;
for (int i = 0; i < inMat.rows; ++i)
{
std::vector<double> row;
for (int j = 0; j < inMat.cols; ++j)
{
row.push_back(inMat.at<double>(i, j));
}
result.push_back(row);
}
return result;
}
И тогда я линеаризирую возвращенную матрицу для подачи функции dft.
Но некоторые из элементов матрицы результата были NaN.
В качестве исправления я получаю элемент cv :: Mat как длинный вместо double:
row.push_back(inMat.at<long>(i, j));
Удачи всем, кто пытается решить эту проблему.