F行列を計算する
- Mat findFundamentalMat( InputArray points1, InputArray points2, int method, double param1, double param2, OutputArray mask );
- Mat findFundamentalMat( InputArray points1, InputArray points2, OutputArray mask, int method, double param1, double param2 );
- 解説
- サンプルコード
- 実体ファイル
- その他
- 基礎行列(Fundamental Matrix、F行列)を推定する
- 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
返り値†
- 3x3のF行列
- 失敗するとF行列がすべて0になって返ってくる
返り値†
- point0とpoint1の対応点からF行列を計算する
- 多少誤対応が含まれていてもRANSACやらLMedSで弾ける
- ただし手法を指定しても、対応点の数に応じ、以下のアルゴリズムで利用する手法が選択される
- 点数が7点未満の場合
- 点数が7点の場合
- FM_RANSACやFM_LMEDSやFM_8POINTを指定しても、7点非線型推定でF行列を求める
- 誤対応の除去はしない(というかできない)
- 点数が8点の場合(OpenCV 2.4.4とそれ以前)
- 点数が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と等しくなければならない
サンプルコード†
実体ファイル†
- 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
その他†
- 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