FastSineTransformer - 具有零的焊盘阵列以适合长度

时间:2013-01-24 09:25:53

标签: java math poisson apache-commons-math

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

  1. 在行和列上使用正弦变换
  2. 乘以特征值
  3. 对行和列使用反正弦变换
  4. 到目前为止这是有效的。 要在Java中进行正弦转换,我正在使用Apache Commons Math包。

    FastSineTransformer有两个限制:

    1. 数组中的第一个值必须为零(好吧,第二个是真正的问题)
    2. 输入的长度必须是 2的幂
    3. 所以现在我的摘录长度为127,255等等。(我在开头插入一个零,这样就完成了1和2)这是非常愚蠢的,因为我想选择我自由摘录的大小。

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

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

1 个答案:

答案 0 :(得分: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&#39; [0] = x [0] = 0, 如果1 <= k

对于你的情况,如果你的数据集不是2的幂,我建议你可以调整大小并用零填充空白,而不违反上面的规则。但我建议首先参考这本书。