1

円上に 5 つの点があります:........1
................................ .... .... 2 ... ... . 3

                      4     5

これで、回転した画像ができました: .............

................................................................... ...........1. .......3

                           2          5

                             4        

注: ポイントは番号付けされていません。

私は基本的に 5 セットの座標を持っており、プロットすると下の画像のようになります。

上の画像のように見えるように画像を傾ける必要がある量を計算する必要があります

4

3 に答える 3

1

ポイント座標がある場合は、角度とオフセットに依存する適切な誤差関数を定義することにより、誤差を最小限に抑えることができます。

変換にスケールもある場合、この問題は線形最小二乗法によって解決可能になります。その場合、Matlab でのソリューションは簡単です。

x,y を元のポイントとし、xt,yt を結果のポイントとします。

   tform = cp2tform([x,y],[xt,yt],'linear conformal');

この変換は、次を使用して画像に適用できます。imtransform


モデルにスケールがなく、回転とシフトのみの場合は、次の最小二乗方程式によって近似解を見つけることができます。

   ( x1   y1  1  0)                      (x1t)
   (-y1   x1  0  1)                      (y1t)
   ( x2   y2  1  0)                      (x2t)
   (-y2   x2  0  1) * ( cos(theta) )     (y1t)
          ...         ( sin(theta) ) = 
          ...         (    xc      )
          ...         (    yc      )

   (xn   yn  1   0)   
   (-yn  xn  0   1)                       (ynt)

明らかに、cos(シータ) と sin(シータ) に同じシータを強制することはできないため、解は概算です。これは初期解として機能し、勾配降下法によって洗練されます。

于 2012-06-21T07:20:39.730 に答える
1

Statistics Toolbox にアクセスできる場合は、このprocrustesコマンドで必要なことを実行できると思います。2 組の点を指定すると、一方の点の最適な (2 乗誤差の合計に関して) 線形変換 (平行移動、反射、直交回転、スケーリング) を見つけて、もう一方の点に一致させます。

コマンドへのオプションの入力を使用して、スケーリング コンポーネントと反射コンポーネントを抑制することができます。コマンドを適用する前に両方のセットを共通の原点に移動すると、移動コンポーネントも抑制され、回転だけが残ります。

于 2012-06-21T12:35:18.730 に答える
0

私があなたの質問を正しく理解していれば、これは絶対的な向きの問題です。そのためのいくつかの解決策を見つけることができます (たとえば、クォータニオンを使用したホーンの解決策)。同様の質問がここにあります。

于 2012-06-21T08:28:02.053 に答える