我对FFTW分配和我试图写的一个小程序来创建的图像的FFT。我使用的CIMG的读写图像。但我得到的是一个单一的白点较暗的图像:(

我最有可能该做了错误的方式,我将不胜感激,如果有人可以解释如何应该这样做。我并不需要的代码,我只需要知道什么是做到这一点的正确方法。

下面是我的代码:

CImg<double> input("test3.bmp");
CImg<double> image_fft(input, false);

unsigned int nx = input.dimx(), ny = input.dimy();
size_t align = sizeof(Complex);

array2<Complex> in (nx, ny, align);

fft2d Forward(-1, in);

for (int i = 0; i < input.dimx(); ++i) {
    for (int j = 0; j < input.dimy(); ++j) {
        in(i,j) = input(i,j);
    }
}

Forward.fft(in);

for (int i = 0; i < input.dimx(); ++i) {
    for (int j = 0; j < input.dimy(); ++j) {
        image_fft(i,j,0) = image_fft(i,j,1) = image_fft(i,j,2) = std::abs(in(i,j));
    }
}

image_fft.normalize(0, 255);
image_fft.save("test.bmp");
有帮助吗?

解决方案

您需要采取大小的日志。单白点为基值(0赫兹,DC,无论你怎么称呼它),所以它几乎总是是迄今为止你拿(因为像素值不能为负,直流值将任何图像的最大组成部分总是正和大)。

您需要做的是计算出的日志(LN,不管,某些类型的对数计算的)的大小(你从复杂转换为幅度/相位形式(相量表示法IIRC?),所以之后)上的各点之前正常化它。

请注意,这些值在那里,相比DC值它们只是非常小,服用日志(这使得较小的值由大了很多,只有稍大较大值)将使其他频率可见。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top