Java FFT图像变换的输入和输出应该是什么?
我尝试使用Java中的FFT Cooley–Tukey算法获得灰度图像的频谱。 我不知道如何形成算法的输入,以及为了形成光谱图像,要使用输出中的哪些值 目前我的输入是一个复数数组,Re=8位灰度域中像素的值,Im=0; 运行该算法后,我获得了另一个复数数组,实数部分的值超出[0255]范围,虚部为0。 我试着用256模的实数数组创建一个图像 这就是光谱的外观: 这就是我得到的:Java FFT图像变换的输入和输出应该是什么?,java,image-processing,fft,noise-reduction,noise-generator,Java,Image Processing,Fft,Noise Reduction,Noise Generator,我尝试使用Java中的FFT Cooley–Tukey算法获得灰度图像的频谱。 我不知道如何形成算法的输入,以及为了形成光谱图像,要使用输出中的哪些值 目前我的输入是一个复数数组,Re=8位灰度域中像素的值,Im=0; 运行该算法后,我获得了另一个复数数组,实数部分的值超出[0255]范围,虚部为0。 我试着用256模的实数数组创建一个图像 这就是光谱的外观: 这就是我得到的: 显然,我做错了什么,但我不知道是什么。您没有提供源代码 您的结果看起来像分辨率树 用于递归分辨率/频率信息缩放和特征
显然,我做错了什么,但我不知道是什么。您没有提供源代码
- 左边是输入图像(从您的问题中复制)
- 中间是真实的部分
- 右是虚部
=sqrt(Re*Re+Im*Im)
将Re和Im图像放大后可见,否则只会看到角落中的几个白点。这里有更多的例子:
您的预期结果看起来像移动了图像分辨率的一半(因此对称中心位于图像中心,而不是角点)首先计算功率,以便
强度=sqrt(Re^2+Im^2)
然后通过将图像左右移动一半大小来完成包裹。从另一侧回来的重叠是什么,所以只需交换所有行中的所有点swap((x,y),(x+xs/2,y))
,然后交换所有列中的所有点swap((x,y),(x,y+ys/2))
。现在,结果与OP中的结果相匹配,应用程序是您必须发布一些代码,以便我们可以尝试找出错误所在,您是在编写自己的FFT算法还是在使用库?我已经从中实现了算法,用Java编写。我不知道这段代码会有什么帮助。链接似乎是断线者:)这里是链接:我用Java重写了cfft函数