• Aucun résultat trouvé

Méthode de reconstruction 3D

3. Conception du système

3.5. Méthode de reconstruction 3D

Le montage expérimental décrit précédemment permet d’obtenir l’information de distance sur un plus grand champ de vue. La lentille de conversion rend inutilisable la calibration d’origine du système; la reconstruction faite par les méthodes habituelles, notamment par la suite de développement 2.0 (SDK, pour « Software Development Kit ») ou par la librairie Libfreenect 2, n’est alors pas valide. Dans notre cas, le SDK 2.0 fait le lien

50

entre la Kinect et l’application Matlab disponible sous la forme d’un paquet de support d’équipement nommé le « Image Acquisition Toolbox™ Support Package for Kinect® For Windows® Sensor » et disponible à partir de Matlab R2013a. Ce « add-on » requiert également le « Image acquisition Toolbox ». La méthode pour retrouver la reconstruction 3D du système est décrite dans les 3 sous-sections suivantes.

3.5.1. Récupérer l’information de sortie de la Kinect

Cette application Matlab permet d’enregistrer l’image RGB-D sous une résolution de 1920x1080. Chacun des pixels inclut une mesure de la distance ainsi que les paramètres de couleur. L’association des couleurs avec la distance est faite par une calibration un peu sur le même principe qu’une caméra stéréo, il est à noter qu’une interpolation doit être faite sur les mesures de distance puisque la résolution de la caméra infrarouge n’est que de 512x424. Puisque dans notre cas seulement la caméra infrarouge est modifiée, la mesure de couleur ne correspond alors pas et n’est pas pertinente. L’application Matlab permet également d’obtenir directement, sans interpolation, chacun des pixels de la caméra infrarouge avec sa mesure en Z sous la forme d’une matrice 512x424 (uint16) appelée « depthImage ». Un zéro dans cette matrice signifie une mesure qui a été rejetée par la Kinect et correspond donc soit à une mesure saturée ou une mesure ayant une trop faible illumination. Également, le SDK 2.0 permet une utilisation entre 0,5m et 8m (en z), la raison derrière cette limitation est inconnue. Il est possible qu’il s’agisse d’une limite arbitraire fournie par Microsoft, puisque les valeurs supérieures à 8m seraient peu illuminées et donc moins précises.

3.5.2. Calculer la distance radiale à la Kinect pour chaque pixel

Un dispositif ToF permet d’obtenir fondamentalement la valeur de la distance radiale entre un objet et la Kinect par l’aller-retour du signal. La coordonnée z est donc un calcul interne effectué par la Kinect; cette coordonnée est d’ailleurs de peu d’utilité dans notre cas considérant que les angles formés par un pixel sont altérés. Afin d’obtenir la distance radiale de chacun des pixels, on doit donc reproduire le calcul inverse effectué par la Kinect. La méthode utilisée par Libfreenect2 pour obtenir le nuage de points à partir de la matrice « depthImage » utilise une matrice de projection telle que présentée à la section « Calibration ». Puisqu’on a directement la valeur en z=d, l’équation 12 représente le système.

[

𝐟

𝐱

𝟎

𝐜

𝐱

𝟎

𝐟

𝐲

𝐜

𝐲

𝟎

𝟎

𝟏

] [

𝐱

𝐲

𝐳

] = [

𝐮𝐝

𝐯𝐝

𝐝

]

(12)

51 On obtient donc la distance radiale par :

𝛒

𝐮,𝐯

= √(

𝐮−𝐜𝐱 𝐟𝐱

)

𝟐

+ (

𝐯−𝐜𝐲 𝐟𝐲

)

𝟐

+ 𝐝

𝐮,𝐯 (13)

Cette méthode dépend toutefois des paramètres internes de la Kinect et ne considère pas la distorsion. La fonction « pcfromkinect » fournie par l’application Matlab permet d’obtenir un nuage de points x,y,z à partir de la matrice « depthImage ». Chacun des pixels est alors traité individuellement. L’application utilisant le SDK2.0 fait appel à une fonction cryptée nécessitant une connexion avec la Kinect utilisée pour obtenir ses paramètres internes. Les deux méthodes suggèrent un résultat très similaire en fonction des tests effectués. La première méthode est toutefois considérée une approximation puisque les paramètres d’une calibration externe doivent être utilisés. Le but ici n’étant pas d’obtenir la meilleure calibration, mais plutôt de reproduire fidèlement le calcul effectué par le SDK pour obtenir sa valeur z, la deuxième approche a été retenue. Une fois la fonction « pcfromkinect » appelée, le résultat est une matrice 512x424x3, où chaque dimension représente respectivement les valeurs x,y,z; la valeur ρ est donc obtenue simplement. Ce type de nuage de points est de type « organisé » puisque chacun des pixels est toujours associé avec sa coordonnée u,v. La matrice 512x424 résultante représente la distance radiale de chaque pixel.

3.5.3. Utiliser la calibration pour reprojeter chaque pixel dans un nuage de points

Le système est d’abord calibré, dans ce cas-ci en utilisant la boite à outils Matlab OcamCalib mentionnée précédemment. Le résultat de calibration du système modifié est présenté au tableau 3.1 et obtenu à partir d’une cible de type damier de 7x7 où chaque carreau est de 4cm x 4cm. La fonction de calibration est également présentée sous forme graphique à la figure 3.12. Les captures d’image retenues pour la calibration sont présentées dans la mosaïque de la figure 3.11. Toutes les images du set ont été prises à courte distance (<1m) puisque l’éclairage IR ne permettait pas une visibilité suffisante malgré la taille de la cible. Un éclairage continu indépendant dans le proche infrarouge ne peut pas être utilisé efficacement puisque la Kinect filtre la lumière ambiante. Même une seconde Kinect v2, qui ne serait pas synchronisée sur la même horloge, ne pourra servir d’éclairage d’appoint. Généralement, on voudrait calibrer le système à distance d’utilisation, bien que la documentation d’OcamCalib ne le spécifie pas. Ils suggèrent en fait d’approcher la cible de calibration le plus proche possible de la caméra, spécifiant que de 6 à 10 images devraient être suffisantes. Afin d’éviter au maximum la saturation, une distance d’environ 0,55m a été maintenue et des images ont été prises pour couvrir tout le champ de vue.

52

Figure 3.11 – Mosaïque présentant les 11 différentes captures utilisées pour la calibration par le logiciel OcamCalib. Ces 11 images couvrent tout le champ de vue de la Kinect v2 à courte portée avec le moins de redondance possible, telle que suggérée par [80]. Chaque intersection a pu être déterminée par la détection automatique [79].

Figure 3.12 – Résultats de la calibration par OcamCalib. Le graphique du haut montre la fonction de reprojection en fonction de la distance radiale ρ (en px). Le graphique du bas représente l’angle du rayon de sortie (en °) en fonction du même paramètre ρ (en px).

53

Tableau 3.1 – Paramètres obtenus par la calibration du nouveau système par Ocam Calib

Paramètres (px) a0 -264,54 a1 0 a2 1,3499e-03 a3 -6,3096e-06 a4 2,7387e-08 xc 200,12 yc 255,08 c* -1,0073e-05 d* -1,6048e-04 e* -7,1389e-04 Erreur** 0,48934

*Les paramètres c,d et e sont sans unités.

**Erreur de reprojection de chacun des points du damier, moyennée sur l’ensemble des prises de vue.

Les coefficients a0 à a4 sont ceux de la fonction f(r) de l’équation 11. Les paramètres xc et yc représentent la position du centre. Les paramètres c,d et e correspondent à la matrice de reprojection présentée à l’équation 10 dans la section 1.3.3.

En fonction de ces paramètres, la fonction intégrée « cam2world » permet de reprojeter directement chacun des pixels à un point d’une sphère unitaire. Puisque nous disposons alors de la distance radiale (section 3.5.1) ainsi que de la direction associée à chaque pixel, il est aisé de reproduire un nuage de points représentant la scène d’intérêt. L’opération est effectuée pixel par pixel au même titre que les opérations précédentes. Afin d’éviter la présence de pixels nuisibles, seulement une portion circulaire du senseur est considérée, représentée approximativement par le cercle pointillé de la figure 4.4. Le centre géométrique a été établi à l’étape d’assemblage (section 3.4) au plus proche possible expérimentalement du centre obtenu par Bouguet. Afin d’éliminer les pixels produits par l’obstruction, le centre expérimental a été ajusté à (254;200). Un léger déphasage dans l’axe horizontal est donc présent. Cette valeur correspond toutefois environ au centre obtenu par calibration (255,08; 200,12). Environ 16% des pixels du senseur sont éliminés lors de la procédure.

54

Documents relatifs