2012-04-07 13 views
3

は、関数org.opencv.Calib3d.findHomography(..)は、同次変換行列を返します。取得5点Android用のOpenCVで

Mat homography = Calib3d.findHomography(points1, points2, Calib3d.RANSAC, 0.5); 

RANSACが実際にAndroidのOpenCVのAPIから使用してポイントを返す方法があります:たとえば、これが唯一のホモグラフィを返しますか?

答えて

8

更新

私は実際にあなたのインライア(OpenCVの2.4.2)を与えることができ、それはOpenCVのに新たに追加だか、私はそれを見逃しているかどうかを確認してください、しかしfindHomography()機能していません。最後のパラメータmaskは、デフォルトで空ですが、RANSACによって作成されたインライアのインデックスに1または255が入ります。 (テクニカルドキュメントにおける呼ばインライア)ホモグラフィを推定するためにRANSACによって使用

Mat findHomography(InputArray srcPoints, InputArray dstPoints, 
    int method=0, double ransacReprojThreshold=3, OutputArray mask=noArray()) 
//                ^
//                | 

オールド答え

点を直接抽出することができません。それらは内部的に計算されますが、リストは削除されます。

それらを抽出する方法は、findHomography関数(および対応するRANSAC機能)を変更することです。しかし、これは醜いです。

もう、きれいな方法は、ホモグラフィ番目の入力試合で何点ペアをテストすることです:

ポイントにホモグラフィを適用する(私はこれは関数名であると思います)projectPoints(points1, homography, points1_dest)を使用しています。 cv::distance(points1_dest, points2)を使用して、どれがポイント2でペアに十分近いかを確認します。距離はmin_distance^2より小さいか等しい必要があります。あなたの場合、0.5*0.5 = 0.25

+0

これはすばらしい回避策です。 –

+0

RANSACコードを直接変更する場合、使用するポイントを保存する場所はどこですか?それがループ内にあるかどうか if(goodCount> MAX(maxGoodCount、modelPoints-1)){} ??? この時点で、ms1とms2の値を保存しますか? –

関連する問題