FFTW3 DFT 2D始终返回NaN

时间:2015-07-15 00:26:22

标签: c++ fftw dft

我尝试使用FFTW3对真实的2D矩阵进行DFT。 这是我的代码片段:

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 );

其中indouble*,每个值的顺序为e-270。

我的问题是out总是包含-nan个值。

有没有获得正确值的技巧?

谢谢

1 个答案:

答案 0 :(得分:0)

感谢大家。

我运行的问题不是由于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;
}

然后我将返回的矩阵liniarize以提供dft函数。

但是一些结果矩阵元素是NaN。

作为修复,我得到cv :: Mat元素而不是double:

row.push_back(inMat.at<long>(i, j));

祝所有人试图解决这个问题,祝你好运。