1

我正在尝试为Java中的图像混合实现泊松求解器。在使用 5 星方法进行去离散化之后,真正的工作就开始了。为此,我使用颜色值执行以下三个步骤:

  1. 对行和列使用正弦变换
  2. 乘特征值
  3. 对行和列使用反正弦变换

到目前为止,这有效。为了在 Java 中进行正弦变换,我使用了 Apache Commons Math 包。

但是FastSineTransformer有两个限制:

  1. 数组中的第一个值必须为零(好吧,第二个是真正的问题)
  2. 输入的长度必须是 2 的

所以现在我的摘录的长度是 127、255 等等。(我在开头插入一个零,这样 1 和 2 就满足了)这很愚蠢,因为我想选择我的摘录自由。

我的问题是: 有没有办法扩展我的数组,例如长度为 100 以适应 Apache FastSineTransformer 的限制?

在 FastFourierTransfomer 类中提到,您可以用零填充以获得 2 的幂。但是当我这样做时,我会得到错误的结果。也许我做错了,但是当我用零填充时,我真的不知道是否有什么需要记住的

4

1 回答 1

0

据我所知http://books.google.de/books?id=cOA-vwKIffkC&lpg=PP1&hl=de&pg=PA73#v=onepage&q&f=false和来源http://grepcode.com/file/repo1 .maven.org/maven2/org.apache.commons/commons-math3/3.2/org/apache/commons/math3/transform/FastSineTransformer.java?av=f

规则如下:

  • 根据实现,数据集大小应该是 2 的幂 - 可以推测,以便算法保证 O(n*log(n)) 执行时间。
  • 根据 James S. Walker 的说法,函数必须是奇数,即上述假设必须是完整的,并且实现信任这一点。
  • 根据实现,由于某种原因,第一个元素和中间元素必须为 0: x'[0] = x[0] = 0, x'[k] = x[k] if 1 <= k < N, x'[ N] = 0,如果 N + 1 <= k < 2N,则 x'[k] = -x[2N-k]。

至于您的情况,当您的数据集可能不是 2 的幂时,我建议您可以调整大小并用零填充间隙,而不会违反上述规则。但我建议先参考这本书。

于 2014-04-19T11:49:21.807 回答