4

15 個の orderer&indexed 3D ポイント (X1、X2、...、X15) のセットから、同じインデックスを持つ 15 個のポイントの別のセット (1 つの最終ポイントに対応する 1 つの初期ポイント) への回転を見つける必要があるアプリケーションがあります。

オイラー角(一部の人にとっては悪)、四元数、または基底軸にベクトルを投影して回転を見つけることについて、私は多くのことを読みました。しかし、追加の制約があります。最終セットのいくつかのポイントが間違っている可能性がある(つまり、座標が間違っている)ため、中央回転から非常に遠い回転を要求するポイントを識別したいと考えています。

私の問題は次のとおりです: 3 つのポイント (位置合わせされていないもの) とその画像のすべてのセットについて、クォータニオンを計算できます (変換行列が純粋な回転ではないという事実によると、いくつかの追加の計算がありますが、実行できます)。したがって、クォータニオンのセット (最大 455 個) を取得し、間違ったものを削除したいと考えています。

平均回転から離れた回転を与えるポイントを見つける方法はありますか? 「平均」と「標準偏差」は四元数の何かを意味しますか、それともオイラー角を計算する必要がありますか? そして、「良い」クォータニオンのセットを取得したら、「平均」クォータニオン/回転をどのように計算できますか?

乾杯、

リコラ3D

4

2 に答える 2

4

ここには 2 つの問題があります。

  • 任意の数のポイントに対して「最適」を計算するにはどうすればよいですか?
  • どの点を受け入れるか、どの点を拒否するかをどのように決定しますか?

最初の一般的な答えは、「最小二乗法を実行する」です。これには、おそらくオイラー角よりもクォータニオンの方が適しています。以下を試してください:

foreach point pair (a -> b), ideal rotation by unit quaternion q is:
   b = q a q*   ->   q a - b q = 0

したがって、 に適合する最小二乗を探しますq

minimize sum[over i] of |q a_i - b_i q|^2
under the constraint:  |q|^2 = 1

上記のように、最小二乗問題は制約を除いて線形であり、オイラー角の定式化よりも簡単に解決できるはずです。


2 番目の問題については、次の 2 つのアプローチが考えられます。

  • ポイントがそれほど離れていない場合は、すべてのポイントで最小二乗ソルバーを実行してから戻って、「外れ値」(二乗誤差が最大のポイント ペア) を捨てて、もう一度試すことができます。
  • 非常に矛盾したポイントが上記の手順から外れている場合は、3 つまたは 4 つのペアのランダムな小さなサブセットを選択して、それぞれに適合する最小二乗を見つけることができます。これらの結果の大規模なグループが同様のローテーションを持ち、合計エラーが少ない場合、これを使用して「良い」ペアを特定できます (したがって、悪いペアを排除できます)。次に戻って、すべての適切なペアに適合する最小二乗法を見つけます。
于 2012-07-03T22:10:55.417 に答える
3

コンピューター ビジョンでは、あなたが提案したようなことを行うためのRANSACと呼ばれる手法があります。可能なすべての四元数を見つける代わりに、点対応の最小セットを使用して、単一の四元数/変換行列を見つけます。次に、適合の質についてすべてのポイントを評価し、十分に適合しないものを破棄します。良い試合が十分にない場合は、元のセットで悪い試合をした可能性があります。そのため、その試行を破棄して、もう一度やり直します。十分な一致が得られた場合は、すべてのインライア ポイントの最小二乗回帰フィットを実行して新しい変換行列を取得し、結果に満足するまで繰り返します。

または、正規化されたすべての四元数を取り、それらすべての間の内積を見つけることができます。内積は常に正でなければなりません。特定の計算ではない場合は、2 つの四元数のいずれかのすべてのコンポーネントを否定して再計算する必要があります。次に、クォータニオン間の距離を測定し、クラスター化またはギャップを探すことができます。

于 2012-07-06T15:26:02.867 に答える