为什么傅里叶变换在 C++ 中看起来不正确?

Why the Fourier transform does not look correct in C++?

我正在尝试使用名为 FftComplex

的库计算图像的傅里叶变换

我正在处理这张图片:

我应该像这样获取和输出:

但是我得到的是:

这是部分代码:

    // Convert the raw images to vectors
        PF_PixelFloat* pixelPointerAtIndex;
        for (unsigned long index= 0; index < imgArraySize; index++){
            pixelPointerAtIndex = (PF_PixelFloat*)((char*)inWorld.data + (index * sizeof(PF_PixelFloat)));
            imgRedDataVector.push_back( (std::complex<double>) pixelPointerAtIndex->red);
            imgGreenDataVector.push_back((std::complex<double>) pixelPointerAtIndex->green);
            imgBlueDataVector.push_back((std::complex<double>) pixelPointerAtIndex->blue);
        }

    // Fourier Transform
        fft::transform(imgRedDataVector);
        fft::transform(imgGreenDataVector);
        fft::transform(imgBlueDataVector);

    // Copy the Fourier data back to the image
        for (unsigned long index = 0; index < imgArraySize; index++) {
            pixelPointerAtIndex = (PF_PixelFloat*)((char*)inWorld.data + (index * sizeof(PF_PixelFloat)));
            pixelPointerAtIndex->red    = imgRedDataVector[index].real();
            pixelPointerAtIndex->green  = imgGreenDataVector[index].real();
            pixelPointerAtIndex->blue   = imgBlueDataVector[index].real();
        }

我也试过这个:

    finalImgRedDataVector[index].imag()
    ...

看起来我得到的是“参数”,但也许我得到的是“模数”?

有人知道这有什么问题或我遗漏了什么吗?

谢谢。

您也没有得到 "Argument"。复数有两部分,"real" 和 "imaginary"。将它们描绘成 X 和 Y 坐标,参数是它们所成的角度,幅度是到原点的距离。这是第二张图片中描述的幅度。

在 C++ 中,即 abs(std::complex)