ポイントをワープグリッドにマッピングする方法
-
05-07-2019 - |
質問
デカルト座標系の座標を持つポイントのコレクションがあるとします。
別のポイントをプロットしたいが、その座標が同じデカルト座標系でわかっている。
ただし、描画しているプロットは元のプロットから歪んでいます。元の平面を取り、ゴムシートに印刷し、いくつかの場所でそれを伸ばし、他の場所でそれを非対称な方法で(重なりや複雑なものなしで)想像してみてください。
(ソース)
各ポイントセットのストレッチされた座標とストレッチされていない座標は知っていますが、基になるストレッチ関数はわかりません。新しいポイントの伸びていない座標を知っています。
近くのポイントの引き伸ばされた位置に基づいて、引き伸ばされた座標の新しいポイントをプロットする場所をどのように推定できますか?正確な情報である必要はありません。詳細な情報がない限り、リマップポイントのセットから実際のストレッチ関数を決定することはできません。
その他の可能なキーワード:ゆがんだゆがんだグリッドメッシュプレーン座標のゆがみ
解決
わかりました、これは画像のゆがみのように聞こえます。これはあなたがすべきことです:
-
歪みのないグリッドの Delaunay三角形を作成し、ゆがんだグリッドの三角測量を作成するための、ゆがんだグリッドと非ゆがんだグリッド間の対応。これで、各画像の対応する三角形がわかったので、オーバーラップがないため、次のステップを簡単に実行できるはずです。
-
今、ワープ画像で対応するポイント
A
を見つけるには:- 三角形を見つける
A
が存在し、非ワープグリッドの三角形とワープグリッド間の変換を使用して新しい位置を見つけます。
- 三角形を見つける
これは明示的に詳細に説明されていますここ。
別の(はるかに複雑な)メソッドは、シンプレートスプライン(これも説明されています)上記のスライドで)。
他のヒント
ラップされたグリッドポイントとラップされていないグリッドポイントが1対1で対応していることを理解しました。そして、変形はあまりにも極端ではないので、グリッド線が交差しているかもしれません(表示する画像のように)。
戦略は、ジェイコブが提案するとおりです:三角形の間に1対1の対応があるように2つのグリッドを三角形化し、三角形分割でマッピングするポイントを特定し、対応する三角形の重心座標を使用して計算します新しいポイントの場所。
前処理
- ラップされたグリッドのポイントの Delaunay三角形を生成し、それを
WT
。 -
WT
のすべての三角形について、ラップされていないグリッドの対応する頂点の間に三角形を追加します。これにより、ラップされていないポイントの三角形分割UWT
が得られます。
ポイントを p
をラップされたグリッドにマップします
-
p
を含むUWT
で三角形T(p1、p2、p3)
を見つけます。 - 重心座標
(b1、b2、b3)を計算します
T(p1、p2、p3)
の -
T(p1、p2、p3)
に対応するTw(q1、q2、q3)
をWT
の三角形にします。新しい位置は
b1 * q1 + b2 * q2 + b3 * q3
です。
p
の
備考 これにより、線形スプラインとして変形機能が提供されます。より滑らかな動作のために、同じ三角形分割を使用できますが、重心座標の代わりにもう少し複雑な計算につながる高次近似を実行できます。
他の答えは素晴らしいです。追加する唯一のことは、をご覧になることです。変形を記述する方法としての自由形式の変形。
それが便利な場合、既知のペアに変形グリッド/格子を適合させることはかなり可能です。その後、将来のポイントを変形する非常に高速な方法があります。
多くは既存のポイントの数に依存します。 1つしかない場合、それでできることはあまりありません。同じ方向に同じ量だけ2つ目のポイントをオフセットできますが、それ以上のことをするのに十分なデータがありません。
既存のポイントがかなりある場合は、それらのポイントを介してサーフェスフィットを実行し、それを使用して新しいポイントの適切な位置を近似できます。 N点が与えられると、N次多項式を使用して常に完全な近似を得ることができますが、そうすることはめったにありません-代わりに、通常、ストレッチ関数はかなり低次の関数(たとえば2次または3次)であり、近似しますそれに基づいたポイントへの表面。次に、フィットした表面の関数に基づいて新しいポイントを配置します。