-1

Java のInterpolationBilinearクラスを使用して、配列のリサンプリングを支援しています。私の現在の (そして比較的小さい) テスト ケースは、10x10 配列を 20x20 配列に変換しています。私の問題はinterpolate(double[][], float x, float y)、このクラスのメソッドが、送信した 2D 配列の左上隅 (0x0、0x1、1x0、1x1) のみをリサンプリングしていることです。

現在、interpolate メソッドに配列全体ではなく 2x2 配列の束を送るコードを書く必要があるようです。もっと良い方法があるようですが、ヒントはありますか?

サードパーティのライブラリの使用には興味がなく、標準の Java と自分で記述できるコードだけに興味があります。

ありがとう!

4

1 に答える 1

1

それがInterpolationBilinearクラスが行うべきことです。ドキュメントを参照してください。それが行う唯一のことは、長方形に配置された 4 つのポイント間の双一次補間を実装することです。公式はこちらで説明されていますが、自分で簡単に実装することもできます。

質問は次のとおりです。あなたの例ではfloat xfloat yは何ですか? それらはInterpolationBilinear.interpolate、サンプルの四角形の四隅の間の分数の位置を表すことになっているからです。

それとも、配列内の要素番号を表現しfloat xたいですか? float yたとえば、(4.3,7.1) は要素 (4,7)、(4,8)、(5,7)、および (5,8) 間の補間を意味しますか? interpolate次に、はい、 x の 0.3 と y の 0.1 の小数位置とともに、これらの 4 つの値 (またはその単純な式の独自の実装) をプラグインする必要があります。

編集配列内の分数位置を表す必要があることxを明確にし、それを呼び出して、10 x 10 であると仮定します。つまり、インデックスは両方の次元で 0 から 9 になります。yraw[][]

補間するには、どの正方形が該当するかを見つけて、4 つの角の間を補間する(x,y)必要があります。(x,y)x 方向では、インデックスは のすぐ上とすぐ下の整数になりますx*9。つまりMath.floor(x*9)、 とMath.floor(x*9) + 1-- y でも同じ考えですがy*9、これで四隅ができました。それらを式に当てはめます。分数の位置は と のようにxfrac = x*9 - Math.floor(x*9)なりyfrac = y*9 - Math.floor(y*9)ます。それらも式に当てはめます。

これは、ターゲット配列のポイントごとに繰り返す必要があります。x上記の段落のは、ターゲット配列のインデックスi/19y等しいことj/19に注意してiください。j

于 2011-10-13T13:24:20.600 に答える