Comment vérifier l'exactitude du calibrage d'une webcam?

je suis totalement nouveau dans les techniques de calibration des caméras... J'utilise la technique de l'échiquier OpenCV... Je suis à l'aide d'une webcam de Quantum...

Voici mes observations et de mesures..

  1. j'ai gardé chaque côté carré d'Échecs = 3,5 cm. C'est un échiquier 7 x 5 avec 6 x 4 les angles internes. Je prends au total 10 images dans différentes vues / poses à une distance de 1 à 1,5 m de la webcam.
  2. je suis en suivant le code C Learning OpenCV par Bradski pour l'étalonnage. mon code pour le calibrage est

    cvCalibrateCamera2(object_points,image_points,point_counts,cvSize(640,480),intrinsic_matrix,distortion_coeffs,NULL,NULL,CV_CALIB_FIX_ASPECT_RATIO);
    
  3. avant d'appeler cette fonction je fais le premier et le deuxième élément le long de la diagonale de la matrice intrinsèque comme un pour garder le rapport des longueurs focales constant et en utilisant CV_CALIB_FIX_ASPECT_RATIO

  4. Avec la distance de l'échiquier à l' fx et fy changent avec fx:fy presque égal à 1. il y a cx et cy valeurs dans l'ordre de 200 à 400. fx et fy sont de l'ordre de 300 à 700 lorsque je change la distance.

  5. actuellement j'ai mis tous les coefficients de distorsion à zéro parce que je n'ai pas eu de bon résultat incluant les coefficients de distorsion. Mon image originale était plus belle que celle qui n'était pas déformée!!

est-ce que je fais l'étalonnage correctement?. Devrais-je utiliser une autre option que CV_CALIB_FIX_ASPECT_RATIO?. Si oui, lequel?

44
demandé sur Francesco Callari 2012-10-09 11:25:19

2 réponses

Hmm, vous cherchez "beau " ou"précis"?

l'étalonnage de la caméra est l'un des très rares sujets de la vision par ordinateur où la précision peut être directement quantifiée en termes physiques, et vérifiée par une expérience physique. Et la leçon habituelle est que (a) vos nombres sont tout aussi bons que l'effort (et l'argent) que vous y mettez, et (b) l'exactitude réelle (par opposition à imaginé) est chère, donc vous devriez comprendre à l'avance ce que votre application exige vraiment dans le façon de précision.

si vous regardez les spécifications géométriques de combinaisons de lentilles/capteurs, même très bon marché (dans la gamme des mégapixels et au-dessus), il devient évident que la précision d'étalonnage de sous-sous-mm est théoriquement réalisable dans un volume de table de l'espace. Il suffit de calculer (à partir de la feuille de spécifications du capteur de votre caméra) l'angle solide porté par un pixel - vous serez ébloui par la résolution spatiale que vous avez à portée de main de votre portefeuille. Toutefois, la réalisation effective Ce qui est proche de cette précision théorique demande du travail.

voici quelques recommandations (tirées de l'expérience personnelle) pour obtenir une bonne expérience de calibration avec de l'équipement d'origine locale.

  1. si votre méthode utilise une cible plate ("damier" ou similaire), fabriquez-en une bonne. Choisissez un support très plat (pour la taille que vous mentionnez verre de 5 mm d'épaisseur ou plus est excellente, bien que évidemment fragile). Vérifier sa planéité contre un autre bord (ou, mieux, un faisceau laser). Imprimez le motif sur du papier épais qui ne s'étirera pas trop facilement. Après l'impression sur le dos avant le collage et de vérifier que les côtés carrés sont en effet très près orthogonale. Les imprimantes à jet d'encre ou à laser bon marché ne sont pas conçues pour une précision géométrique rigoureuse, ne leur faites pas confiance aveuglément. La meilleure pratique consiste à utiliser un atelier d'impression professionnel (même un Kinko fera un bien meilleur travail que la plupart des imprimantes à domicile). Puis attachez le modèle très soigneusement à la marche arrière, en utilisant de la colle vaporisée et en essuyant lentement avec un chiffon doux pour éviter les bulles et les étirements. Attendre un jour ou plus pour que la colle durcisse et que le stress colle-papier atteigne son état stable à long terme. Enfin mesure les positions des coins avec un bon étrier et une loupe. Vous pouvez vous en tirer avec un seul nombre pour la taille" moyenne " carrée, mais il doit être une moyenne de mesures réelles, Pas de espoirs-n-prières. La meilleure pratique consiste à utiliser un tableau de mesure position.

  2. surveillez les changements de température et d'humidité: le papier absorbe l'eau de l'air, le support se dilate et se contracte. Il est étonnant de voir combien d'articles vous pouvez trouver qui rapportent des précisions de calibration sous-millimétrique sans citer les conditions d'environnement (ou la réponse cible à ces conditions). Inutile de dire que ce sont surtout des conneries. Le coefficient de dilatation du verre à température plus basse que celui de la tôle courante est une autre raison de préférer le premier comme un support.

  3. Inutile de dire, vous devez vous désactiver l'auto-focalisation la caractéristique de votre caméra, si elle en a une: la mise au point déplace physiquement un ou plusieurs morceaux de verre à l'intérieur de votre objectif, changeant ainsi (légèrement) le champ de vision et (généralement par beaucoup) la distorsion de l'objectif et le point principal.

  4. placez la caméra sur un support stable qui ne vibre pas facilement. Focalisation (et F-arrêter la lentille, si elle a un iris) comme il est nécessaire pour le application (pas l'étalonnage - la procédure d'étalonnage et la cible doivent être conçues pour les besoins de l'application, et non l'inverse). Ne même pas penser de toucher la caméra ou l'objectif après coup. Dans la mesure du possible, évitez les lentilles "complexes", comme les lentilles de zoom ou les lentilles à très grand angle. Les lentilles Fisheye ou anamorphiques nécessitent des modèles beaucoup plus complexes que ceux offerts par stock OpenCV.

  5. Prenez beaucoup de mesures et de photos. Vous voulez des centaines de mesures (coins) par image, et des dizaines d'images. Lorsque des données qui la concerne, plus on est de fous. Un damier 10x10 est le minimum absolu je considère. Je travaillais normalement à 20x20.

  6. étalonner le volume de calibration lors de la prise de photos. Idéalement, vous voulez que vos mesures soient uniformément réparties dans le volume d'espace avec lequel vous travaillerez. Plus important encore, assurez-vous de incliner la cible de façon significative par rapport à la axe focal sur certaines photos-pour calibrer la distance focale, vous avez besoin de "voir" une véritable perspective préfigurant. Pour obtenir de meilleurs résultats, utilisez un gabarit mécanique reproductible pour déplacer la cible. Un bon est un axe tourne-disque, ce qui vous donnera un excellent modèle précédent pour le mouvement de la cible.

  7. minimisez les vibrations et le flou de mouvement associé lors de la prise de photos.

  8. utilisez un bon éclairage. Vraiment. C'est incroyable de voir combien de fois j' voir les gens réalisent tard dans le jeu que vous avez besoin de photons pour calibrer n'importe quelle caméra :-) utilisez l'éclairage ambiant diffus, et le rebondir des cartes blanches sur les deux côtés du champ de vision.

  9. Regardez ce que fait votre code d'extraction de coin. Dessinez les positions de coin détectées sur le dessus des images (dans Matlab ou Octave, par exemple), et jugez de leur qualité. Enlever les valeurs aberrantes tôt en utilisant des seuils serrés est mieux que de faire confiance au robustifier dans votre ajustement de faisceau code.

  10. Limiter votre modèle si vous le pouvez. Par exemple, n'essayez pas d'estimer le point principal si vous n'avez pas une bonne raison de croire que votre objectif est considérablement décentré W. R. t l'image, il suffit de la fixer au centre de l'image à votre première tentative. L'emplacement du point principal est habituellement mal observé, parce qu'il est intrinsèquement confus le centre de la distorsion non-linéaire et par le composant parallèle à l'image plan de la cible-à-caméra de traduction. Il nécessite un soigneusement conçu procédure qui donne trois ou plusieurs points de fuite de la scène et une très bonne Bracket de la distorsion non linéaire. De même, sauf si vous avez des raisons de soupçonner que l'axe focal de l'objectif est vraiment incliné W. R. T. le plan du capteur, fixe à zéro le (1,2) composant de la matrice de la caméra. En général, utilisez le modèle le plus simple qui satisfait vos mesures et votre application a besoin (c'est le rasoir D'Ockam pour vous).

  11. lorsque vous avez une solution d'étalonnage de votre optimiseur avec une erreur RMS assez faible (quelques dixièmes d'un pixel, typiquement, Voir Aussi la réponse de Josh ci-dessous), tracer le motif XY des erreurs résiduelles (predicted_xy-measured_xy pour chaque coin dans toutes les images) et voir si c'est un aller-ish nuage centré en (0, 0). "Touffes" de valeurs aberrantes ou de non-rondeur du nuage de résidus crient des cloches d'alarme que quelque chose est très mal - probablement des valeurs aberrantes, ou un modèle de distorsion de la lentille inapproprié.

  12. prendre des images supplémentaires pour vérifier la précision de la solution - utilisez-les pour vérifier que la distorsion de la lentille est effectivement enlevée, et que l'homographie planaire prédite par le modèle calibré correspond en fait à celle récupérée des coins mesurés.

96
répondu Francesco Callari 2018-05-18 04:59:04

C'est une réponse plutôt tardive, mais pour les personnes venant de Google:

La bonne façon de vérifier la précision de l'étalonnage est de utilisez l'erreur de reprojection fournie par OpenCV. Je ne sais pas pourquoi cela n'a été mentionné nulle part dans la réponse ou les commentaires, vous n'avez pas besoin de le calculer à la main - c'est la valeur de retour de calibrateCamera. En Python, c'est la première valeur de retour (suivie de la matrice de la caméra, etc.).

l'erreur de reprojection est le RMS erreur entre où les points seraient projetés en utilisant les coefficients intrinsèques et où ils sont dans l'image réelle. typiquement, vous devriez vous attendre à une erreur RMS de moins de 0.5 px - je peux habituellement obtenir environ 0,1 px avec des caméras de vision industrielle. L'erreur de reprojection est utilisée dans de nombreux documents de vision informatique, il n'y a pas de façon beaucoup plus facile ou plus précise pour déterminer la qualité de votre étalonnage.

Sauf si vous avez un système stéréo, vous ne pouvez travailler où quelque chose est dans l'espace 3D jusqu'à un rayon, plutôt que d'un point. Cependant, comme on peut déterminer la pose de chaque image de calibration planaire, il est possible de déterminer où chaque coin de l'échiquier devrait tomber sur le capteur d'image. Le processus de calibrage (plus ou moins) tente de déterminer où tombent ces rayons et minimise l'erreur sur toutes les différentes images de calibrage. Dans le papier original de Zhang, et les évaluations subséquentes, environ 10-15 images semblent être suffisantes; à ce point le l'erreur ne diminue pas significativement avec l'ajout d'autres images.

D'autres progiciels comme Matlab vous donneront des estimations d'erreurs pour chaque intrinsèque, par exemple la distance focale, le centre de projection. J'ai été incapable de faire cracher cette information à OpenCV, mais peut-être qu'elle est là quelque part. Le calibrage des caméras est maintenant natif dans Matlab 2014a, mais vous pouvez toujours obtenir la boîte à outils de calibrage des caméras qui est extrêmement populaire avec la vision d'ordinateur utilisateur.

http://www.vision.caltech.edu/bouguetj/calib_doc/

inspection Visuelle est nécessaire, mais pas suffisante lorsque vous traitez avec vos résultats. La chose la plus simple à considérer est que les lignes droites dans le monde deviennent droites dans vos images non déformées. Au-delà, il est impossible d'être vraiment sûr si vos appareils sont étalonnés bien juste en regardant les images de sortie.

La routine fournie par Francesco est bon, le suivre. J'utilise un plateau comme avion, avec le motif imprimé sur du papier poster. Assurez - vous que les images sont bien exposées-évitez la réflexion spéculaire! J'utilise un modèle 8x6 standard, j'ai essayé des modèles plus denses mais je n'ai pas vu une telle amélioration de la précision que cela fait une différence.

je pense que cette réponse devrait être suffisante pour la plupart des gens qui veulent calibrer une caméra - de façon réaliste à moins que vous essayez de calibrer quelque chose d'exotique comme un Fisheye ou vous êtes pour des raisons éducatives, OpenCV / Matlab est tout ce dont vous avez besoin. La méthode de Zhang est considérée comme assez bonne pour que pratiquement tout le monde dans la recherche sur la vision informatique l'utilise, et la plupart d'entre eux soit utiliser la boîte à outils de Bouguet ou OpenCV.

29
répondu Josh 2015-07-09 14:44:09