我有一个图像,我想使用 FFT 转换到频域,Java 似乎缺少这个库,但我找到了两个。一个是 JTransforms,另一个是鲜为人知的,没有名字。
对于不太知名的一个,2D 只能具有 2 的幂的长度值,但具有简单的使用方法,例如FastFourierTransform.fastFT(real, imaginary, true);
实部是充满每个像素值的双精度数组的 2D 数组,而虚部是相同大小的 2D 数组的零。布尔值将取决于正向或反向变换。这对我来说很有意义,除了两个要求的力量破坏了我所做的任何变换(我最初在图像周围添加了黑色空间以使其适合最接近的两个幂)之外,它起作用了,我正在努力解决如何使用 JTransforms 的等效方法,并希望得到任何指导。我会说明我目前在做什么。
我相信相关的类是DoubleFFT_2D
,它的构造函数需要许多行和列,我认为它们是图像的宽度和高度。因为我的图像没有虚部,我想我可以使用doubleFFT.realForwardFull(real);
它将虚部视为零并传递充满像素的真实二维数组。不幸的是,这根本不起作用。JavaDoc 状态the input array must be of size rows*2*columns, with only the first rows*columns elements filled with real data
但我不明白这与我的图像有什么关系,以及我必须做些什么来满足这个要求。
对于冗长而糟糕的解释感到抱歉,如果需要任何其他信息,我很乐意提供。
JTransforms 库和文档可以在这里找到:https ://sites.google.com/site/piotrwendykier/software/jtransforms