F行列を計算する

#contents

*Mat findFundamentalMat( InputArray points1, InputArray points2, int method, double param1, double param2, OutputArray mask ); [#n84d76e8]
-基礎行列(Fundamental Matrix、F行列)を推定する

**引数 [#y56a246f]
-points0:Mat型の対応点。Nx2、Nx3で使う。
-points1:Mat型の対応点。Nx2、Nx3で使う。
-mask:Mat型の出力。対応点として使われたかどうか。
-method:int型の計算方法。省略した場合はFM_RANSAC
--FM_7POINT(1):7点非線型計算
--FM_8POINT(2):8点線型計算
--FM_LMEDS(4):LMedS推定を使って外れ値除去
--FM_RANSAC(8):RANSACを使って外れ値除去
-param1:double型の外れ値とするしきい値。省略すると3.0
-param2:double型の信頼度(0-1)の間。省略すると0.99

**返り値 [#if58fc1e]
-3x3のF行列
-失敗するとF行列がすべて0になって返ってくる

*Mat findFundamentalMat( InputArray points1, InputArray points2, OutputArray mask, int method, double param1, double param2 ); [#jdf61fb6]
-後方互換のためのラッパー関数。

**引数 [#b28a0e8d]
-[[前述の引数>#y56a246f]]に準ずる

**返り値 [#mc5cf3dd]
-[[前述の返り値>#if58fc1e]]に準ずる

*解説 [#j4910b1a]
-point0とpoint1の対応点からF行列を計算する
-多少誤対応が含まれていてもRANSACやらLMedSで弾ける
-ただし手法を指定しても、対応点の数に応じ、以下のアルゴリズムで利用する手法が選択される
--点数が7点未満の場合
---0、もしくは0行列が返されて終了
--点数が7点の場合
---FM_RANSACやFM_LMEDSやFM_8POINTを指定しても、7点非線型推定でF行列を求める
---誤対応の除去はしない(というかできない)
--点数が8点の場合(OpenCV 2.4.4とそれ以前)
---通常の8点線型手法にかける
--点数が9点以上の場合(OpenCV 2.4.4以前)
---RANSACかLMeDS推定を用いて誤対応を除去する
---それぞれの手法で外れ値をはじき、8点線型手法にかける
---外れ値とするしきい値や信頼度をparam1とparam2で指定する
--点数が8点以上の場合(OpenCV 3.0系列、OpenCV 2.4.5以降)
---点数が15点以上あれば、RANSACも可能だが、それ未満の場合はFM_RANSACを指定してもLMeD手法が使われる
-座標が計算に使われた場合はmaskの対応する場所に1が返る
-故にmaskのサイズはpoints0、point1と等しくなければならない

*サンプルコード [#c3a901d7]
-[[エピポーラ線の計算]]を参照

*実体ファイル [#i54452a6]
-OpenCV 3.0系列
--modules/calib3d/src/fundam.cpp
--modules/calib3d/include/opencv2/calib3d.hpp
-OpenCV 2.4系列
--modules/calib3d/src/fundam.cpp
--modules/calib3d/include/opencv2/calib3d.hpp

*その他 [#z344a869]
-OpenCV 2.4.4までC++インタフェースを使ってもラッパーで内部でCインタフェースの関数をcallする
-OpenCV 2.4.5から、全面的にC++インタフェースが実体に代わり、Cインタフェースがラッパーとなった
-Cインタフェース時代は、対応点は行方向、列方向どちらでも受け付けていたのだが、C++インタフェースになってからは、N行3列(n rows x 3 columns)、N行2列(n rows x 2 columns)しか受け付けない

ジャンル[[:OpenCV]][[:OpenCV 2.4]][[:OpenCV 3.0]][[:OpenCV 3.1]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS