当前位置:  开发笔记 > 编程语言 > 正文

图像的FFT

如何解决《图像的FFT》经验,为你挑选了1个好方法。

我有一个关于fftw的任务,我正在尝试编写一个小程序来创建一个fft的图像.我正在使用CImg来读写图像.但我得到的只是一个带有一个白点的黑暗图像:(

我很可能以错误的方式做这件事,如果有人能解释如何做到这一点,我将不胜感激.我不需要代码,我只需要知道什么是正确的方法.

这是我的代码:

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

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

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

CookieOfFort.. 5

你需要记录幅度.单个白点是基本值(0 Hz,DC,无论你想要什么叫它),所以它几乎总是你拍摄的任何图像的最大分量(因为像素值不能为负,DC值将为永远是积极和大的).

您需要做的是计算幅度的对数(ln,无论什么,某种类型的对数计算)(因此在您从标准化之前的每个点上从复数形式转换为幅度/相位形式(相量符号iirc?)之后)它.

请注意,值与那里相比,它们与DC值相比只是非常小,取日志(这会使较小的值大幅增大,而较大的值仅略大)会使其他频率可见.



1> CookieOfFort..:

你需要记录幅度.单个白点是基本值(0 Hz,DC,无论你想要什么叫它),所以它几乎总是你拍摄的任何图像的最大分量(因为像素值不能为负,DC值将为永远是积极和大的).

您需要做的是计算幅度的对数(ln,无论什么,某种类型的对数计算)(因此在您从标准化之前的每个点上从复数形式转换为幅度/相位形式(相量符号iirc?)之后)它.

请注意,值与那里相比,它们与DC值相比只是非常小,取日志(这会使较小的值大幅增大,而较大的值仅略大)会使其他频率可见.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有