平面間ホモグラフィの仕組みを理解するのにかなり苦労しています。特に、opencvメソッドがどのように機能するかを知りたいです。
レイトレーシングのようなものですか?同次座標はscale*vectorとどのように異なりますか?
私が読んだものはすべて、あなたが彼らが何について話しているかをすでに知っているように話しているので、理解するのは難しいです!
平面間ホモグラフィの仕組みを理解するのにかなり苦労しています。特に、opencvメソッドがどのように機能するかを知りたいです。
レイトレーシングのようなものですか?同次座標はscale*vectorとどのように異なりますか?
私が読んだものはすべて、あなたが彼らが何について話しているかをすでに知っているように話しているので、理解するのは難しいです!
グーグルhomography estimation
はこれを最初のリンクとして返します(少なくとも私にとっては):
http ://cseweb.ucsd.edu/classes/wi07/cse252a/homography_estimation/homography_estimation.pdf 。そして間違いなくこれは不十分な説明であり、多くが省略されています。あなたがこれらの概念を学びたいのなら、のような良い本を読むことは、Multiple View Geometry in Computer Vision
いくつかの短い記事を読むよりもはるかに良いでしょう。多くの場合、これらの短い記事にはいくつかの重大な間違いがあるため、注意してください。
要するに、コスト関数が定義され、このコスト関数を最小化するパラメーター(ホモグラフィ行列の要素)が私たちが探している答えです。意味のあるコスト関数は幾何学的です。つまり、幾何学的な解釈があります。ホモグラフィの場合、ある画像から別の画像に点を変換することにより、すべての点間の距離とそれらの対応が最小になるようなHを見つけたいと思います。この幾何学的関数は非線形です。つまり、1-反復法を使用して解く必要があります。一般に、2-反復法には初期開始点が必要です。ここで、代数的コスト関数が入力されます。これらのコスト関数には、意味のある/幾何学的な解釈はありません。多くの場合、それらを設計することは芸術的であり、問題については、通常、さまざまなプロパティを持ついくつかの代数的コスト関数を見つけることができます。代数コストの利点は、線形最適化の問題が発生することです。したがって、それらの閉じた形式のソリューションが存在します(つまり、ワンショット/非反復法)。しかし、欠点は、見つかったソリューションが最適ではないことです。したがって、一般的なアプローチは、最初に代数的コストを最適化し、次に、見つかったソリューションを反復的な幾何学的最適化の開始点として使用することです。ホモグラフィのこれらのコスト関数をグーグルで検索すると、通常これらがどのように定義されているかがわかります。一般的なアプローチは、最初に代数的コストを最適化し、次に見つかった解を反復的な幾何学的最適化の開始点として使用することです。ホモグラフィのこれらのコスト関数をグーグルで検索すると、通常これらがどのように定義されているかがわかります。一般的なアプローチは、最初に代数的コストを最適化し、次に見つかった解を反復的な幾何学的最適化の開始点として使用することです。ホモグラフィのこれらのコスト関数をグーグルで検索すると、通常これらがどのように定義されているかがわかります。
OpenCVで使用されているメソッドを知りたい場合は、コードを確認する必要があります:http:
//code.opencv.org/projects/opencv/repository/entry/trunk/opencv/modules/calib3d/src/ Fundam.cpp#L81homography DLT
これは、グーグルがいくつかの関連ドキュメントを見つける必要がある
場合に、言及された本で定義されている代数関数DLTです。そしてここに:
http ://code.opencv.org/projects/opencv/repository/entry/trunk/opencv/modules/calib3d/src/fundam.cpp#L165
反復手順は幾何学的コスト関数を最小化します。ガウスのようです-ニュートン法が実装されています:http:
//en.wikipedia.org/wiki/Gauss%E2%80%93Newton_algorithm
上記のすべての説明は、2つの画像間に対応があることを前提としています。一部のポイントが他の画像の誤ったポイントと一致している場合は、外れ値があり、上記の方法の結果は完全にずれています。堅牢な(外れ値に対する)メソッドがここに入力されます。OpenCVには2つのオプションがあります:1.RANSAC2.LMeDS。Googleはここであなたの友達です。
お役に立てば幸いです。
あなたの質問に答えるには、4つの異なる質問に取り組む必要があります。
1. Define homography.
2. See what happens when noise or outliers are present.
3. Find an approximate solution.
4. Refine it.
2Dポイントをマッピングする3x3マトリックスのホモグラフィ。マッピングは同次座標で線形です:[x2、y2、1]'〜H * [x1、y1、1]'、ここで'は転置(列ベクトルを行として書き込む)を意味し、〜はマッピングがスケールアップしていることを意味します。デカルト座標で見やすくなります(分母と分母に同じ係数を掛けても結果は変わりません)
x2 =(h11 * x1 + h12 * y1 + h13)/(h31 * x1 + h32 * y1 + h33)
y2 =(h21 * x1 + h22 * y1 + h23)/(h31 * x1 + h32 * y1 + h33)
デカルト座標では、マッピングが非線形であることがわかりますが、今のところ、これを覚えておいてください。
最小二乗線形代数法(DLT-直接線形変換を参照)を使用して、同次座標で以前の一連の線形方程式を簡単に解くことができますが、残念ながら、これはホモグラフィパラメーターの代数誤差を最小限に抑えるだけです。人々は別の種類のエラー、つまりデカルト座標系でポイントをシフトするエラーをもっと気にします。ノイズがなく、外れ値がない場合、2つのエラーは同一である可能性があります。ただし、ノイズが存在する場合は、デカルト座標の残差を最小化する必要があります(残差はデカルト方程式の左辺と右辺の差の2乗にすぎません)。さらに、外れ値が存在する場合は、RANSACなどのロバストな方法を使用する必要があります。最適なインライアのセットを選択し、いくつかの外れ値を拒否して、ソリューションを汚染しないようにします。
RANSACは、多くの反復にわたってランダムな試行錯誤の方法で正しいインライアを見つけるため、ホモグラフィを計算するための非常に高速な方法が必要です。これは、パラメーターのエラー(誤ったメトリック)を最小化する線形近似になりますが、それ以外の場合は、最終的なソリューション(二乗点座標の残差を最小化します-正しいメトリック)。さらに非線形最適化の推測として線形解を使用します。
最後のステップは、非線形方程式(ピクセル誤差の2乗の合計を最小化する)を解く際に、最初の推測(ホモグラフィパラメーターを最小化する線形システムの解法)を使用することです。たとえば、絶対値の代わりに残差平方和を使用する理由は、ガウス式(ノイズを表す)に指数exp(x-mu)^ 2の二乗があるため、(いくつかの確率式をスキップして)最尤法では二乗が必要になるためです。残差。
非線形最適化を実行するために、通常、Levenberg-Marquardt法を使用します。ただし、最初の近似では、最急降下法を使用できます(勾配は上り坂を指しますが、最小値を探しているため、それに反するため、下にマイナス記号が表示されます)。一言で言えば、一連の反復1..t..Nを実行し、反復tでホモグラフィパラメーターをparam(t)= param(t-1)-k *勾配として選択します。ここで、gradient = d_cost/d_paramです。
ボーナス素材:ホモグラフィのノイズをさらに最小限に抑えるために、いくつかのトリックを試すことができます。ポイントの検索スペースを減らします(ポイントの追跡を開始します)。さまざまな機能(ホモグラフィによっても変換されるが、SNRが高い可能性がある線、円錐曲線など)を使用します。RANSACを高速化するために不可能な同綴異義語を拒否します(たとえば、「不可能な」点の動きに対応するもの)。ノイズに起因する可能性のあるホモグラフィの小さな変化には、ローパスフィルターを使用します。