F行列を計算する

Mat findFundamentalMat( InputArray points1, InputArray points2, int method, double param1, double param2, OutputArray mask );

  • 基礎行列(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になって返ってくる

Mat findFundamentalMat( InputArray points1, InputArray points2, OutputArray mask, int method, double param1, double param2 );

  • 後方互換のためのラッパー関数。

引数

返り値

解説

  • 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と等しくなければならない

サンプルコード

実体ファイル

  • 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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-01-18 (月) 21:52:03 (676d)