OpenCV は、RANSAC 関数自体を提供していません。少なくとも、それを呼び出して実行できる形式 (例: cv::ransac(...)
) では提供していません。RANSAC を使用できるすべての関数/メソッドには、それを有効にするフラグがあります。ただし、これは、ホモグラフィ/基本行列を推定した後に RANSAC が計算するインライアで実際に何か他のことをしたい場合には、常に役立つとは限りません。たとえば、Octave または同様のソフトウェア/ポイントのライブラリで素敵なプロットを作成し、フィルタリングされた一致の残りのセットなど
2 つの画像を一致させた後、一致のベクトルを取得します。それに加えて、もちろん、マッチング プロセスで使用された 2 セットのキーポイント (各画像に 1 つ) があります。一致とキーポイントを使用して、ポイントの 2 つのベクトル (例: cv::Point2f points
) を作成し、これらを に渡しますfindHomography()
。thisとthisの投稿から、その関数に渡すマスクを使用してインライアがどのように正確にマークされているかを発見しました。マスク内の各行は、インライア/アウトライアに関連しています。ただし、2 つのポイント セットから行インデックス情報を使用する方法がわかりません。OpenCV のソース コードを見ても、あまり理解できませんでした。(署名とマスク部分に関してはfindFundamental()
同様)で、彼らは使用しますfindHomography()
compressPoints()
、これは、入力として持っている 2 つのセット (ソース ポイントと宛先ポイント) を何らかの方法で 1 つに結合しているように見えます。マスクの性質を判断するためのテスト中に、2 セットの一致するポイントを試しました (標準手順に変換) cv::Keypoints
。cv::Point2f
各セットには 300 ポイントが含まれているため、合計で 600 ポイントになります。返されたマスクには 300 行が含まれています (このトピックでは値は重要ではありません)。
編集:これを書いているときに答えを発見しました(以下を参照)が、誰かがこの情報をできるだけ早くコンパクトな形式で必要とする場合に備えて、とにかくこの質問を投稿することにしました。RANSAC をサポートする OpenCV の関数の 1 つがまだ必要であることに注意してください。したがって、ポイントのセットはあるが、ホモグラフィや基礎行列を計算するつもりがない場合、これは明らかに方法ではありません。OpenCV の API で、この障害を回避するのに役立つ有用なものを見つけることができなかったので、使用する必要があります外部ライブラリ。