OpenCV: Comment obtenir la fenêtre des points à l'aide findHomography()/findFundamental() et RANSAC

OpenCV ne fournit pas de RANSAC fonction en soi, ou au moins sous une forme telle que vous pouvez simplement appeler et être fait avec elle (par exemple,cv::ransac(...)). Toutes les fonctions/méthodes qui sont en mesure d'utiliser RANSAC avoir un drapeau qui lui permet. Cependant, ce n'est pas toujours utile si vous voulez vraiment faire quelque chose d'autre avec le inliers RANSAC calcule après avoir estimé une homographie/matrice fondamentale par exemple créer une belle parcelle de terrain dans une Octave ou d'un logiciel similaire/bibliothèque de la points, appliquer des algorithmes supplémentaires sur la série de filtré les matchs etc.

Après la mise en correspondance de deux images, on obtient un vecteur de rencontres. Avec qui nous ont bien sûr, 2 ensembles de keypoints (un pour chaque image) qui ont été utilisés dans le processus d'appariement. À l'aide des allumettes et des keypoints, nous devons créer deux vecteurs de points (par exemple,cv::Point2f points) et de les transmettre à l' findHomography(). De cette et cette postes, j'ai découvert exactement comment l'inliers sont marqués à l'aide d'un masque, que l'on passe à cette fonction. Chaque ligne à l'intérieur du masque se rapporte à une fenêtre/de valeurs aberrantes. Cependant, je suis incapable de comprendre comment utiliser la ligne-informations d'index de mes deux ensembles de points. En regardant OpenCV du code source n'est pas trop loin. Dans findFundamental() (similaire à findHomography() quand il s'agit de sa signature et le masque de partie) qu'ils utilisent compressPoints(), qui semble d'une certaine manière de combiner les deux jeux que nous avons en entrée (source et destination) en un seul. Lors des tests afin de déterminer la nature du masque, j'ai essayé 2 ensembles de points appariés (converti cv::Keypoints à cv::Point2f - une procédure standard). Chaque ensemble contient 300 points au total, nous avons 600 points. Le retour de masque contient de 300 lignes (les valeurs ne sont pas importants pour ce sujet à la main).

EDIT: en écrivant cet article, j'ai découvert la réponse (voir ci-dessous), mais a décidé de poster cette question de toute façon dans le cas où quelqu'un a besoin de cette information dès que possible et sous forme compacte. Notez que nous avons encore besoin l'un de OpenCV la fonction de soutien de RANSAC. Donc, si vous avez un ensemble de points, mais pas l'intention de calcul de l'homographie ou de la matrice fondamentale, ce n'est évidemment pas le chemin et j'ose dire que j'ai été incapable de trouver quelque chose d'utile dans OpenCV de l'API qui peuvent aider à éviter cet obstacle, par conséquent, vous devez utiliser une bibliothèque externe.

OriginalL'auteur rbaleksandar | 2014-06-27