2017-08-20 3 views
2

Je viens d'installer OpenCV 3.2.0 et je peux trouver de nombreux/la plupart des coins dans this image de this question en jouant avec le contraste puis en utilisant cv2.findChessboardCorners(left_gray, (6,5)) ou en utilisant cv2.goodFeaturesToTrack(gray_img,25,0.01,10) comme décrit dans the answer.Homographie? Méthode OpenCV pour gérer les coins d'échiquier manquants dans certaines vues?

Alors que findChessboardCorners soit retourne tous les 6 × 5 = 30 d'entre eux ou None, je peux voir que pour des images de qualité inférieure parfois pas tous les points vont être trouvés avec la méthodegoodFeaturesToTrack.

Mais quand je lis le documentation for cv2.calibrateCamera(), il semble que les points de l'objet doivent correspondre de façon univoque avec les points de l'image pour chaque vue. Si l'une des images a un point manquant, je devrais le trouver et le retirer de la liste des points de l'objet pour cette image.

Y at-il une méthode cv2 pour gérer automatiquement cela?

edit: Je me demande maintenant, est cv2.findHomography() en utilisant l'une des méthodes robustes ce que je cherche ici?

Bien sûr, si une ligne ou une colonne externe est manquante, il existe une ambiguïté insoluble, mais si quelques points internes sont manquants, un étalonnage devrait toujours être possible.

Je pourrais probablement essayer d'écrire quelque chose, et bien sûr rejeter toute vue avec le mauvais nombre de coins trouvés, mais s'il existe déjà un moyen de gérer les points manquants sans ambiguïté, je voudrais essayez-le d'abord. Le but serait d'automatiser le processus autant que possible sans sauter chaque image avec le mauvais nombre de points trouvés.

+0

@LamarLatrell peut vous aider à unobfuscate ma compréhension de OpenCV? :-) – uhoh

Répondre

1

Vous pouvez résoudre ce problème en modifiant légèrement le motif utilisé. Ce dont vous avez besoin ici, c'est de spécifier quels coins sont manquants. OpenCV a une solution simple pour cela: la carte ChArUco. Ci-dessous, j'ai joint un tutoriel sur l'utilisation de ce modèle.

http://docs.opencv.org/3.1.0/df/d4a/tutorial_charuco_detection.html

Avec l'utilisation de charuco vous pouvez spécifier quels angles sont détectés - automatiquement. Ensuite, vous pouvez ajuster les points de l'objet pour l'étalonnage.

Si vous utilisez python vous avez besoin wrapper de aruco bibliothèque:

https://github.com/opencv/opencv_contrib/pull/554/

https://github.com/fehlfarbe/python-aruco/

Et une réponse à l'aide charuco en python:

http://answers.opencv.org/question/98447/camera-calibration-using-charuco-and-python/?answer=98451#post-id-98451/


En bref, de la linked tutorial, le processus est le suivant:

Pour définir un CharucoBoard, il est nécessaire de générer le modèle en utilisant une définition, puis spécifiez la description de l'algorithme de détection ainsi:

  • Nombre de cases d'échiquier dans la direction X.
  • Nombre de carrés de l'échiquier dans la direction Y.
  • Longueur du côté carré.
  • Longueur du côté du marqueur.
  • Le dictionnaire des marqueurs.
  • Id de tous les marqueurs.

enter image description here

enter image description here

+0

OK, ce n'est pas le genre de chose à laquelle je pensais, mais cela semble certainement être une solution au problème du "coin manquant". Je vais essayer ce week-end, merci pour votre aide !! – uhoh