Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
articles:calibration_d_une_lentille_avec_matlab [2017/07/23 21:35]
pfagan ↷ Nom de la page changé de articles:matlab_-_calibration_de_lentille à articles:calibration_d_une_lentille_avec_matlab
articles:calibration_d_une_lentille_avec_matlab [2019/10/26 21:08] (Version actuelle)
Ligne 1: Ligne 1:
 ===== Calibration d'une lentille avec MATLAB ===== ===== Calibration d'une lentille avec MATLAB =====
- 
-FIXME //Images ajoutées bientôt...//​ 
- 
 Pour faire de la reconnaissance d'​image,​ et du positionnement d'​objet,​ il est important de connaître précisément les caractéristiques de la caméra utilisé. On classe traditionnellement les caractéristiques d'une caméra en deux catégories : Pour faire de la reconnaissance d'​image,​ et du positionnement d'​objet,​ il est important de connaître précisément les caractéristiques de la caméra utilisé. On classe traditionnellement les caractéristiques d'une caméra en deux catégories :
  
Ligne 29: Ligne 26:
 Recommencez de la même façon pour toutes les photos. Recommencez de la même façon pour toutes les photos.
  
-selection_4_coins param_carres kcestime +{{:​articles:​calibration_lentille_matlab:​selection_4_coins.jpg?400| Sélection des angles de l'échiquier.}}
- Une fois toutes les photos analysés, on peut lancer une 'Calibration',​ on obtient un résultat sous cette forme :+
  
-Focal Lengthfc = [ 394.94237 394.18680 ] ± [ 1.15438 1.14270 ] +{{:articles:​calibration_lentille_matlab:​param_carres.jpg?400| Paramétrisation des carrés.}}
  
-Principal pointcc = [ 312.63224 239.86603 ] ± [ 0.69252 0.85117 ] +{{:articles:​calibration_lentille_matlab:​kcestime.jpg?400| Estimation des paramètres de la lentille.}}
  
-Skewalpha_c = [ 0.00000 ] ± [ 0.00000 ] => angle of pixel axes = 90.00000 ± 0.00000 degrees ​+ Une fois toutes les photos analysés, on peut lancer une '​Calibration',​ on obtient un résultat sous cette forme :
  
 +Focal Length: fc = [ 394.94237 394.18680 ] ± [ 1.15438 1.14270 ] \\
 +Principal point: cc = [ 312.63224 239.86603 ] ± [ 0.69252 0.85117 ] \\
 +Skew: alpha_c = [ 0.00000 ] ± [ 0.00000 ] => angle of pixel axes = 90.00000 ± 0.00000 degrees \\
 Distortion: kc = [ -0.32502 0.09907 0.00121 0.00206 0.00000 ]  Distortion: kc = [ -0.32502 0.09907 0.00121 0.00206 0.00000 ] 
-± [ 0.00225 0.00180 0.00042 0.00023 0.00000 ]  +± [ 0.00225 0.00180 0.00042 0.00023 0.00000 ] \\ 
- +Pixel error: err = [ 0.37011 0.34880 ] \\
-Pixel error: err = [ 0.37011 0.34880 ]+
  
-On peut ensuite affiner le résultat en rélancant ​une détection automatique des coins ('​Recomp. Corners'​) et en supprimant éventuellement les photos donnant des résultats imprécis ('​Analyse error' et '​Add/​Suppress images'​)+On peut ensuite affiner le résultat en relançant ​une détection automatique des coins ('​Recomp. Corners'​) et en supprimant éventuellement les photos donnant des résultats imprécis ('​Analyse error' et '​Add/​Suppress images'​)
  
 ==== Exploitation des résultats ==== ==== Exploitation des résultats ====
Ligne 49: Ligne 47:
 A ce stade, on peut par exemple effectuer un calcul de dé-distorsion d'​image,​ le résultat est intéressant,​ notamment lorsque la déformée de la lentille est importante. Cependant pour faire du traitement de vidéo, il est inutile de redresser toutes les images (à part pour faire de la reconnaissance de forme, ce qui n'est pas vraiment notre cas). On préfère employer une technique bien plus simple, qui consiste à projeter uniquement les rayons réels en partant des pixels intéressants de l'​image. On détermine par exemple le barycentre d'une forme qui pourrait bien être une balle, on peut alors déterminer le vecteur directeur indiquant la direction qu'​aurait emprunté le rayon de lumière émis par la balle, on est donc capable de pointer la direction de la balle depuis l'​origine de la caméra. Il suffit alors de connaitre une contrainte sur la position de la balle (balle contenue dans un plan) ou d'​avoir un second vecteur directeur pour pouvoir déterminer sa position relativement à la caméra. A ce stade, on peut par exemple effectuer un calcul de dé-distorsion d'​image,​ le résultat est intéressant,​ notamment lorsque la déformée de la lentille est importante. Cependant pour faire du traitement de vidéo, il est inutile de redresser toutes les images (à part pour faire de la reconnaissance de forme, ce qui n'est pas vraiment notre cas). On préfère employer une technique bien plus simple, qui consiste à projeter uniquement les rayons réels en partant des pixels intéressants de l'​image. On détermine par exemple le barycentre d'une forme qui pourrait bien être une balle, on peut alors déterminer le vecteur directeur indiquant la direction qu'​aurait emprunté le rayon de lumière émis par la balle, on est donc capable de pointer la direction de la balle depuis l'​origine de la caméra. Il suffit alors de connaitre une contrainte sur la position de la balle (balle contenue dans un plan) ou d'​avoir un second vecteur directeur pour pouvoir déterminer sa position relativement à la caméra.
  
- ​frame_006 framerect006+{{:​articles:​calibration_lentille_matlab:​imageoriginale.jpg?​400| Image originale obtenue avec la lentille.}}
    
 +{{:​articles:​calibration_lentille_matlab:​imagecorrigee.jpg?​400| Image corrigée grâce à MATLAB.}}
  
 Cependant le calcul de ce vecteur n'est pas trivial, notamment lorsque l'on programme sans librairie mathématique comme celle de matlab. Pour simplifier le travail et optimiser le processus, on utilise donc le petit script suivant pour précalculer les vecteurs correspondants à chaque pixel. Le script crée un fichier binaire qu'il suffira de charger en RAM dans le programme de traitement vidéo. Cependant le calcul de ce vecteur n'est pas trivial, notamment lorsque l'on programme sans librairie mathématique comme celle de matlab. Pour simplifier le travail et optimiser le processus, on utilise donc le petit script suivant pour précalculer les vecteurs correspondants à chaque pixel. Le script crée un fichier binaire qu'il suffira de charger en RAM dans le programme de traitement vidéo.
Ligne 115: Ligne 114:
 </​code>​ </​code>​
  
-On peut de la même façon reprojeter un point dans l'​espace sur l'​image obtenu de la caméra. Cette méthode est intéressante pour le calcul d'​horizon artificiel et pour certaines optimisations dans la détection, voir http://​www.vision.caltech.edu/​bouguetj/​calib_doc/​htmls/​parameters.html pour plus d'​informations.+On peut de la même façon reprojeter un point dans l'​espace sur l'​image obtenu de la caméra. Cette méthode est intéressante pour le calcul d'​horizon artificiel et pour certaines optimisations dans la détection, voir [[http://​www.vision.caltech.edu/​bouguetj/​calib_doc/​htmls/​parameters.html]] pour plus d'​informations.