Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FFT图像变换的输入和输出应该是什么?_Java_Image Processing_Fft_Noise Reduction_Noise Generator - Fatal编程技术网

Java FFT图像变换的输入和输出应该是什么?

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模的实数数组创建一个图像 这就是光谱的外观: 这就是我得到的: 显然,我做错了什么,但我不知道是什么。您没有提供源代码 您的结果看起来像分辨率树 用于递归分辨率/频率信息缩放和特征

我尝试使用Java中的FFT Cooley–Tukey算法获得灰度图像的频谱。 我不知道如何形成算法的输入,以及为了形成光谱图像,要使用输出中的哪些值

目前我的输入是一个复数数组,Re=8位灰度域中像素的值,Im=0; 运行该算法后,我获得了另一个复数数组,实数部分的值超出[0255]范围,虚部为0。 我试着用256模的实数数组创建一个图像

这就是光谱的外观:

这就是我得到的:


显然,我做错了什么,但我不知道是什么。

您没有提供源代码

  • 您的结果看起来像分辨率树

    用于递归分辨率/频率信息缩放和特征提取非FFT!!!因此,可能是您的递归错误或重叠数据(就地编码FFT几乎疯狂),您应该从1D变换开始,然后将其用于2D并目视检查每个阶段(以及与原始数据匹配的逆变换)

  • 您的FFT输出应有非零虚部

    看看这里,看看我答案中的所有子链接

  • 您的图像分辨率是2的精确幂吗?

    如果不调零,它或FFT将无法正常工作

  • 你的例子是错误的

    这就是它在现实中的样子:

    • 左边是输入图像(从您的问题中复制)
    • 中间是真实的部分
    • 右是虚部
    您可以将它们组合为功率谱
    =sqrt(Re*Re+Im*Im)
    ReIm图像放大后可见,否则只会看到角落中的几个白点。这里有更多的例子:

    您的预期结果看起来像移动了图像分辨率的一半(因此对称中心位于图像中心,而不是角点)

  • [Edit1]电源和包装

    在我的应用程序中添加了power和wrap功能,结果如下:


    首先计算功率,以便
    强度=sqrt(Re^2+Im^2)
    然后通过将图像左右移动一半大小来完成包裹。从另一侧回来的重叠是什么,所以只需交换所有行中的所有点
    swap((x,y),(x+xs/2,y))
    ,然后交换所有列中的所有点
    swap((x,y),(x,y+ys/2))
    。现在,结果与OP中的结果相匹配,应用程序是

    您必须发布一些代码,以便我们可以尝试找出错误所在,您是在编写自己的FFT算法还是在使用库?我已经从中实现了算法,用Java编写。我不知道这段代码会有什么帮助。链接似乎是断线者:)这里是链接:我用Java重写了cfft函数