我尝试使用Java中的FFT Cooley-Tukey算法获取灰度图像的光谱。 我不知道如何形成该算法的输入以及要使用哪些值来形成光谱图像。FFT图像变换的输入和输出应该是什么?
目前我的输入是一个复数的数组,Re = 8位灰度域中的像素值,Im = 0; 运行该算法后,我获得另一个复数数组,其中实数部分具有[0,255]范围和虚数部分0以外的很多值。 我试图从实数列数模256创建图像。
这是频谱应该是什么样子:
这是我的本钱:
显然I'me做一些可怕的错误,但我不知道是什么。
我尝试使用Java中的FFT Cooley-Tukey算法获取灰度图像的光谱。 我不知道如何形成该算法的输入以及要使用哪些值来形成光谱图像。FFT图像变换的输入和输出应该是什么?
目前我的输入是一个复数的数组,Re = 8位灰度域中的像素值,Im = 0; 运行该算法后,我获得另一个复数数组,其中实数部分具有[0,255]范围和虚数部分0以外的很多值。 我试图从实数列数模256创建图像。
这是频谱应该是什么样子:
这是我的本钱:
显然I'me做一些可怕的错误,但我不知道是什么。
您没有提供源代码...
你的结果看起来像分辨率树
用于递归解析/频率信息缩放和特征提取不FFT! !所以,可能是你的递归是错误的,或者您重叠数据(代码就地FFT几乎是疯狂),你应该先从1D变换,然后利用它来进行2D和目视检查每一个阶段(也逆变换以匹配原始数据)
您的FFT输出应该有非零虚部!!!
这里看看How to compute Discrete Fourier Transform并进入我的这个答复所有子链接
是你的图像分辨率的2精确的力量?
如果不是零填充它或FFT将无法正常
你的榜样工作是错误
这是怎么看起来像在现实:
你可以将它们结合起来,功率谱=sqrt(Re*Re+Im*Im)
的重新和林图像被放大,被其他人看到只有几角落中的白色点将可见。这里是一些例子:
您预期的结果看起来像移了图像分辨率的一半(所以对称的中心是图像的中心,而不是在角落)
[EDIT1]功率和包裹
添加功率和封装函数到矿井应用程序,以便在这里是结果:
首先计算功率intensity=sqrt(Re^2+Im^2)
,然后通过将图像向右和向下移动一半来完成包装。什么是来自对方的重叠,所以只需交换所有行中的所有点swap((x,y),(x+xs/2,y))
,然后对于所有列swap((x,y),(x,y+ys/2))
都是相同的。现在结果与来自OP的应用程序相匹配:here
您必须发布一些代码,以便我们可以尝试找出错误的位置,您是在编写自己的FFT算法还是在使用库? – KillaKem 2014-11-03 11:53:30
我已经实现了从[这里](http://example.com),用Java编写的算法。我不知道代码可能会如何帮助。 – mawus 2014-11-03 12:16:43
该链接似乎被打破 – KillaKem 2014-11-03 12:51:37