我尝试使用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 );
其中in
是double*
,每个值的顺序为e-270。
我的问题是out总是包含-nan
个值。
有没有获得正确值的技巧?
谢谢
答案 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));
祝所有人试图解决这个问题,祝你好运。