12

画像処理は初めてですが、C# 画像解析には EMGU を使用しています。ただし、ホモグラフィ行列が EMGU に固有のものではないことはわかっているため、別の言語の知識を持っている人がより適切に説明できる可能性があります。

(できる限り単純化して)誰かが各要素の機能を説明してください。私はこれをオンラインで調べましたが、適切に理解できる答えを見つけることができません (私が言ったように、私はこれらすべてにちょっと慣れていません!)

どちらも 2 次元の 2 つの画像を分析します。したがって、画像の回転/移動を考慮するには、3x3 マトリックスが必要です。動きが検出されない場合、ホモグラフィ行列は 100, 010, 001 です。

私は研究から知っています (例: OpenCV ホモグラフィ、ポイントの変換、このコードは何をしている? ): 10Tx, 01Ty, XXX

10,01 ビットは、x 座標と y 座標の回転です。Tx ビットと Ty ビットは並進運動ですが、XXX ビットとは何ですか? これ、わからないですよね?アフィン変換と関係がありますか?誰か説明してくれませんか: 2. XXX ビットの意味

4

2 に答える 2

17

行列の掛け算を理解していれば、理解するのはそれほど難しくありません。あなたのポイントx

/a\
\b/,

座標系を次のように回転させますA

/3 4\
\5 6/

そしてそれを「動かす」t

/2\
\2/.

後者の行列は、新しい点を取得するためのアフィン変換のコンポーネントですy

y = A*x + t = <a'; b'>T //(T means transposed).

ご存知のように、それを取得するには、次のような3 次元行列Bとベクトルを作成できます。x'

    /3 4 2\         /a\
B = |5 6 2| ,  x' = |b|
    \0 0 1/         \1/

そのような

     /a'\
y' = |b'| = B*x'
     \ 1/ 

そこから抽出できますy。それがどのように機能するか見てみましょう。元の変換 (加算を使用) では、最初のステップは乗算を実行することです。回転部y_r

y_r = A*x = <3a+4b; 5a+6b>T

次に、「絶対」部分を追加します。

y = y_r + t = <3a+4b+2; 5a+6b+2>T

次に、どのようにB機能するかを見てください。y'行ごとに計算します:

1) a' = 3*a + 4*b + 2*1

2) b' = 5*a + 6*b + 2*1

3) the rest: 0*a + 0*b + 1*1 = 1

まさに私たちが期待したものです。まず、回転部分が計算されます (加算と乗算)。次に、並進部分の x 部分が追加され、乗算され1ます -- それは同じままです。2行目も同じです。

3 行目では、abが削除されます ( で乗算され0ます)。最後の部分は同じままで、たまたま1. したがって、その最後の行については、ポイントの値を「ドロップ」し、1.


したがって、2x3 行列で十分であると言えます。それは部分的には正しいのですが、重大な欠点が 1 つあります。それは、構成可能性が失われることです。基本的に で満足しているがB、1 つの座標をミラーリングしたいとします。次に、別の変換行列を選択できます

    /-1 0 0\
C = | 0 1 0|
    \ 0 0 1/

そして結果が出ます

y'' = C*B*x' = <-3a+4b+2; 5a+6b+2; 1>T

この単純な乗算は、単純に行列乗算の特性のために、2x3 行列では簡単に実行できませんでした。

原則として、上記の最後の行 (the XXX) は、その他の形式のものでもかまいません<0;0;x>。ポイント値を下げるだけでした。ただし、乗算による合成を機能させるには、まさにこのようにする必要があります。

最後に、この場合、ウィキペディアは私にとって非常に有益なようです。

于 2012-08-22T13:45:42.540 に答える
1

まず第一に、アフィン変換は直線を維持するものであり、任意の次元の多くを行うことができます

ホモグラフィは、2 つの平面にわたるマッピング、または純粋なカメラの回転中に何が起こるかを表します。

最後の行は、さまざまなせん断を表します (つまり、x が x と y の両方の関数である場合)。

于 2013-02-12T00:11:28.990 に答える