2

画像のモーフィングを実装したいと思います。そのためには、指定された一連のポイントとその目的の位置 (「ドラッグ」される場所) で画像を変形できる必要があります。仕事を終わらせるシンプルで簡単なソリューションを探しています。見栄えがよくなくても、非常に高速である必要もありません。

これは私が必要とする例です:

画像と、目的地が [0.6,0.5] の 1 つの変形ポイント [0.5,0.5] のセットがあるとします (または、移動ベクトルが [0.1,0.0] であると言えます)。これは、画像の中心のピクセルを 0.1 右に移動したいということです。任意の半径 r にある隣接するピクセルは、もちろん、このピクセルと一緒に少し「ドラッグ」する必要があります。

私の考えは、次のようにすることでした:

  1. 提供された変形ポイント セットに応じて、ソース イメージの位置を目的の位置にマッピングする関数を作成します。
  2. 次に、この関数の逆関数を見つける必要があります。これは、宛先ピクセルを調べて、「この位置に到達するためにポイントがどこから来なければならなかったか」を確認して変換を実行する必要があるためです。

ステップ 1 の関数は次のようになります。

p2 = p1 + ( 1 / ( (distance(p1,p0) / r)^2 + 1 ) ) * s

どこ

  • p0 ([x,y] ベクトル) は変形点の位置です。
  • p1 ([x,y] ベクトル) は、ソース イメージ内の任意の点です。
  • p2 ([x,y] ベクトル) は、p1 が移動される位置です。
  • s ([x,y] ベクトル) は変形点の移動ベクトルであり、p0 がドラッグされる方向と距離を示します。
  • r (スカラー) は半径で、数値です。

ステップ 2 に問題があります。逆関数の計算は少し複雑すぎるように思われるので、次のように思います。

  • 逆関数を見つけるための簡単な解決策がある場合、または
  • 逆関数を見つけるのが簡単なより良い関数がある場合、または
  • これをすべて行うためのまったく異なる方法があれば、それは簡単ですか?
4

2 に答える 2