为什么傅里叶变换在 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)
我正在尝试使用名为 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)