1

Javaで画像ブレンディング用のポアソン ソルバーを実装しようとしています。5つ星の方法で秘密化した後、実際の作業が始まります。これを行うには、色の値を使用して次の 3 つの手順を実行します。

  1. 行と列で正弦変換を使用する
  2. 固有値を掛ける
  3. 行と列に逆正弦変換を使用する

これはこれまでのところ機能します。Java で正弦変換を行うために、Apache Commons Math パッケージを使用しています。

ただし、FastSineTransformerには 2 つの制限があります。

  1. 配列の最初の値は 0 でなければなりません (それで問題ありません。実際の問題は 2 番目です)。
  2. 入力の長さは2 の累乗でなければなりません

したがって、現在、私の抜粋は 127、255 などの長さで収まっています (1 と 2 が満たされるように、最初にゼロを挿入しています)私の抜粋を自由に。

私の質問は: Apache FastSineTransformer の制限に適合するように、たとえば長さ 100 の配列を拡張する方法はありますか?

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 に答える