Comment obtenir le calibrage de caméra le plus précis?

16

Tout d'abord, j'espère que c'est la bonne carte Stack Exchange. Mes excuses si ce n'est pas le cas.

Je travaille sur quelque chose qui me demande de calibrer la caméra. J'ai réussi à implémenter le code pour le faire dans OpenCV (C ++). J'utilise les fonctions d'échiquier intégrées et un échiquier que j'ai imprimé.

Il existe de nombreux didacticiels sur Internet qui indiquent de donner plus d'une vue de l'échiquier et d'extraire les coins de chaque cadre.

Existe-t-il un ensemble optimal de vues à donner à la fonction pour obtenir le calibrage de caméra le plus précis? Qu'est-ce qui affecte la précision de l'étalonnage?

Par exemple, si je lui donne 5 images de la même vue sans bouger quoi que ce soit, cela donne des résultats directs lorsque j'essaie de dénaturer le flux de la webcam.

Pour info à tous ceux qui visitent: J'ai récemment découvert que vous pouvez obtenir un meilleur étalonnage de la caméra en utilisant une grille de cercles asymétriques et la fonction OpenCV respective.

guépard
la source

Réponses:

8

Vous devez prendre des images pour l'étalonnage à partir de différents points de vue et angles, avec la plus grande différence possible entre les angles (les trois angles d'Euler doivent varier), mais pour que le diamètre du motif soit toujours adapté au champ de vision de la caméra. Plus vous utilisez de vues, meilleur sera l'étalonnage. Cela est nécessaire car pendant l'étalonnage, vous détectez des paramètres de distance focale et de distorsion, donc pour les obtenir par la méthode la moins carrée, différents angles sont nécessaires. Si vous ne déplacez pas du tout la caméra, vous n'obtenez pas de nouvelles informations et l'étalonnage est inutile. Sachez que vous n'avez généralement besoin que de la distance focale, les paramètres de distorsion sont généralement négligeables même pour les caméras grand public, les caméras Web et les caméras de téléphone portable. Si vous connaissez déjà la distance focale d'après les spécifications de la caméra, vous n'aurez peut-être même pas besoin d'étalonnage.

Le coefficient de distorsion est plus présent dans les caméras "spéciales" comme le grand angle ou 360 °.

Voici l'entrée Wikipedia sur l' étalonnage . Et voici la distorsion non linéaire , qui est négligeable pour la plupart des caméras.

mirror2image
la source
Par angles Eulers, je suppose que vous voulez dire faire pivoter la caméra autour de l'échiquier (avec l'échiquier comme pivot) dans le x, y et déplacer la caméra vers et loin de l'échiquier dans le z? J'ai lu au sujet de quelqu'un qui a simplement imprimé des échiquiers transformés et gardé la caméra au même endroit. Par exemple: i.imgur.com/rYzV4.png et i.imgur.com/McG9z.png . L'utilisation de telles choses est-elle une mauvaise décision car elle peut ne pas représenter à quel point les choses seraient distrayantes dans la réalité?
Cheetah
Oui à propos de la caméra en mouvement. Oui encore à propos de rester en place.
mirror2image
@ mirror2image Vous voulez dire que dans les opérations pratiques, il vaut mieux changer d'angles différents. Mais cela signifie que différentes vues auront différents systèmes de coordination mondiale. Dois-je utiliser un système de coordination mondial partagé pour conserver les points d'objet dans le même système de coordination?
Richard
3

@Ben - le nombre de vues dépend de la caméra et de la précision finale requise.

Avec des objectifs de très haute qualité et à faible distorsion (SLR 35 mm haut de gamme), l'utilisation de nombreuses images d'échiquier pour cartographier les distorsions peut être instable, car les distorsions sont des fractions de pixel.
Vous avez encore besoin de plusieurs prises de vue avec la carte (ou l'appareil photo) tournée car le centre de l'image n'est normalement qu'à quelques pixels de la valeur nominale x / 2, y / 2 et change avec la mise au point. Et bien sûr, le zoom change tout.

Une fois que vous avez le centre de la puce de l'objectif et la distance focale (en X et Y), vous n'avez besoin que d'un seul échiquier dans la prise de vue pour vous donner la position de la caméra

Martin Beckett
la source
Je reçois toujours un très mauvais calibrage et je ne peux honnêtement pas comprendre pourquoi. J'ai un échiquier imprimé sur le mur et je déplace la caméra dans différentes positions, donc elle a des vues différentes sur l'échiquier, mais chaque fois que j'utilise la fonction de non-distorsion en opencv et qu'elle sort très bizarre et déformée par rapport à l'original. Mon appareil photo est un Microsoft LifeCam Studio 1080p.
Cheetah
@Ben Désactivez toute mise au point automatique. Sur les minuscules webcams à objectif, la distance focale et le centre de l'objectif changent avec la mise au point. Tournez-vous suffisamment pour qu'il s'adapte bien au centre? Des carrés sortent-ils dans les coins? Enfin, vérifiez que toutes les cibles ont tous les carrés détectés.
Martin Beckett
La mise au point automatique a déjà été désactivée. Définissez assez? J'essaie d'angles aussi extrêmes que possible pour ramasser les points. Je ne sais pas ce que vous entendez par "carrés sortant vers les coins", si vous voulez dire la fonction qui dessine les coins extraits sur l'image - alors oui. J'ai déjà aussi le contrôle pour voir que tous les coins ont été détectés. Je pense que mon problème PEUT résider avec ce à quoi j'ai réglé la distance focale initiale dans la matrice intrinsèque que je passe à la fonction d'étalonnage. J'ai essayé 1: 1, 16: 9 (ce que je pense que le rapport d'aspect de la webcam est) et j'ai également essayé RIEN (que vous pouvez faire)
Cheetah
@Martin Est-il possible de faire l'étalonnage en gardant la caméra en position de papeterie et en changeant l'orientation de l'échiquier sans changer la distance entre la caméra et l'échiquier ??
@Santosh - oui, c'est évidemment exactement équivalent. Vous devez vous assurer d'avoir couvert beaucoup d'angles différents
Martin Beckett
3

J'ai décidé de poster cette réponse ici car il y a quelque temps, cela est apparu comme le meilleur résultat dans Google et ses suggestions m'ont aidé. J'ai donc décidé de partager mon expérience aussi.

Après avoir passé d'innombrables heures à essayer d'obtenir le meilleur étalonnage stéréo sur un Kinect, j'ai partagé mes conseils et mes conclusions dans un article de blog ici .

Bien qu'il soit orienté vers l'étalonnage stéréo et plus spécifiquement Kinect, je pense que les conseils aideront toute personne qui essaie d'étalonner un appareil photo.

Aussi, au cas où je mourrais un jour ou oublierais de renouveler mon hébergement, voici un devis modifié de la poste:

  1. Assurez-vous que vous disposez du modèle d'étalonnage le plus large possible. Suivez ce que j'ai dit ci-dessus. Obtenez un joli motif imprimé professionnellement. Assurez-vous que chaque carré mesure au moins 8 cm x 8 cm. Assurez-vous également qu'un côté du modèle d'étalonnage a un nombre impair de carrés et que l'autre côté a un nombre pair de carrés (par exemple 9 × 6 ou 7 × 8). C'est important pour détecter correctement la pose de la cible. En outre, certaines boîtes à outils ne seront pas en mesure de détecter le motif dans lequel cette exigence n'est pas remplie. Comme mentionné précédemment, les motifs que j'ai utilisés qui conviennent à l'impression sur de grandes feuilles sont téléchargés ici (pour les carrés de 9 cm) et ici (pour les carrés de 10 cm).
  2. Assurez-vous que votre motif imprimé a suffisamment de bordure blanche autour, sinon il peut ne pas être facilement détecté par la plupart des boîtes à outils.
  3. Assurez-vous que le Kinect ne bouge pas. J'ai utilisé un support pour monter mon Kinect sur un trépied.
  4. Essayez d'obtenir autant d'images de la cible d'étalonnage que possible. Mon meilleur étalonnage a été obtenu en utilisant 300 images, à des distances aussi basses que 0,5 mètre jusqu'à 10 mètres de la caméra. Assurez-vous de faire pivoter le motif autour des axes X, Y et Z. Essayez également de «carreler» la vue avec des images prises à la même distance: par exemple, prendre une image, déplacer la cible vers la prochaine tuile dans le champ de vision, en prendre une autre et répéter jusqu'à ce que vous ayez «mosaïque» tout le courant champ de vision. L'objectif est de couvrir le champ de vision entier à chaque distance autant que possible.
  5. Si possible, utilisez l'application d'étalonnage stéréo de MATLAB. Il vous permet de vous débarrasser des valeurs aberrantes après chaque phase d'étalonnage.
M2X
la source
3

Voici une liste des «meilleures pratiques» pour l'étalonnage des caméras que j'ai initialement publiées ici: https://calib.io/blogs/knowledge-base/calibration-best-practices

  • Choisissez la bonne cible d'étalonnage de taille. Assez grand pour contraindre correctement les paramètres. De préférence, il devrait couvrir env. la moitié de la surface totale vue fronto-parallèle dans les images de la caméra.
  • Effectuez l'étalonnage à la distance de travail approximative (WD) de votre application finale. La caméra doit être mise au point à cette distance et la mise au point doit être inchangée après l'étalonnage.
  • La cible doit avoir un nombre élevé de fonctionnalités. L'utilisation de motifs fins est préférable. Cependant, à un certain point, la robustesse de la détection en souffre. Notre recommandation est d'utiliser des décomptes fins pour les caméras supérieures à 3 MPx et si l'éclairage est contrôlé et bon.
  • Collectez des images de différentes zones et inclinaisons. Déplacez la cible pour couvrir entièrement la zone d'image et visez une couverture uniforme. La distorsion de l'objectif peut être correctement déterminée à partir d'images fronto-parallèles uniquement, mais l'estimation de la distance focale dépend de l'observation du raccourcissement. Incluez les deux images frontoparallèles et les images prises avec la carte inclinée jusqu'à +/- 45 degrés dans les deux directions horizontale et verticale. Incliner davantage n'est généralement pas une bonne idée car la précision de localisation des fonctionnalités en souffre.
  • Utilisez un bon éclairage. Ceci est souvent ignoré, mais extrêmement important. La cible d'étalonnage doit de préférence être éclairée de manière diffuse au moyen d'un éclairage photographique contrôlé. Les sources ponctuelles puissantes donnent lieu à un éclairage inégal, ce qui peut entraîner l'échec de la détection et ne pas utiliser très bien la plage dynamique de la caméra. Les ombres peuvent faire de même.
  • Ayez suffisamment d'observations. Normalement, l'étalonnage doit être effectué sur au moins 6 observations (images) d'une cible d'étalonnage. Si une caméra d'ordre supérieur ou un modèle de distorsion est utilisé, davantage d'observations sont bénéfiques.
  • Envisagez d'utiliser des cibles codées de manière unique telles que les cartes CharuCo. Ceux-ci vous permettent de recueillir des observations à partir des bords mêmes du capteur de la caméra et de l'objectif, et donc de contraindre très bien les paramètres de distorsion. En outre, ils vous permettent de collecter des données même lorsque des points de fonctionnalité uniques ne remplissent pas les autres conditions.
  • L'étalonnage n'est aussi précis que la cible d'étalonnage utilisée. Utilisez des cibles imprimées au laser uniquement pour valider et tester.
  • Montage correct de la cible d'étalonnage et de la caméra. Afin de minimiser la distorsion et de s'incliner dans des cibles plus grandes, montez-les verticalement ou à plat sur un support rigide. Pensez plutôt à déplacer la caméra dans ces cas. Utilisez un trépied de qualité et évitez de toucher l'appareil photo pendant les acquisitions.
  • Supprimez les mauvaises observations. Inspectez soigneusement les erreurs de reprojection. À la fois par vue et par fonctionnalité. Si l'un d'eux apparaît comme aberrant, excluez-le et recalibrez.

Un outil en ligne pour générer des PDF pour les cibles d'étalonnage se trouve ici: https://calib.io/pages/camera-calibration-pattern-generator

Jakob
la source
Bonjour, bienvenue sur DSP SE. Les réponses auto-promotionnelles ne sont généralement pas les bienvenues ici. Veuillez envisager d'en faire une réponse de meilleure qualité.
jojek