2

OpenCVfindHomographyメソッドを使用して最適な変換を計算する方法について混乱しています。

私がそれを使用する方法は次のとおりです。

cv::Mat h = cv::findHomography(src, dst, CV_RANSAC, 5.f);

何度実行しても、同じ変換行列が得られます。RANSAC はポイントのサブセットをランダムに選択してフィッティングを行うと考えていたのに、なぜ毎回同じ変換行列を返すのでしょうか? 乱数の初期化に関連していますか? この動作を実際にランダムにするにはどうすればよいですか?

次に、この設定で RANSAC の反復回数を調整するにはどうすればよいですか? 通常、反復回数はインライア比率などに基づいています。

4

2 に答える 2

3

findHomographyはすでに最適な変換を提供します。本当の問題は、 optimalの意味についてです。

たとえば、 ではRANSAC最大数のインライアを持つLMEDSモデルが得られ、 では最小の中央値誤差を持つモデルが得られます。

次の方法でデフォルトの動作を変更できます。

  • RANSAC設定による反復回数の変更maxIters(許可される最大回数は 2000 です)
  • ransacReprojThresholdインライアとアウトライアを検証するために使用される減少 (増加) (通常は 1 から 10 の間)。

ご質問について。

何度実行しても、同じ変換行列が得られます。

おそらく、あなたのポイントは、常に最適なモデルを見つけるのに十分です.

RANSAC はフィッティングを行うためにポイントのサブセットをランダムに選択することになっていると思いました

RANSAC (RANdom SAmple Consensus) は、最初にランダムなサブセットを選択し、これらのポイントで構築されたモデルが十分に優れているかどうかをチェックします。そうでない場合は、別のランダムなサブセットを選択します。

この動作を実際にランダムにするにはどうすればよいですか?

これが役立つシナリオは想像できませんが、 と から 4 つのポイントをランダムに選択しsrcgetPerspectiveTransformdstを使用できます。ポイントが完璧でない限り、サブセットごとに異なるマトリックスが得られます。

于 2015-08-16T16:01:35.473 に答える