• Aucun résultat trouvé

Figure 2.9 – Une série de voxels dans une pile, avec un seul voxel mar- qué en gris foncé, comme présenté par M. Vossman dans Wikipédia.

Plusieurs méthodes ont été découvertes pour obtenir une reconstruction 3D d’objets que l’on observe à l’aide de caméras. La technique de recons- truction en trois dimensions utilisée dans mon système permet d’obtenir en temps réel un modèle 3D qui sera représenté à l’aide de voxels. Le mot voxel est une combinaison des mots volume et pixel, qui lui même est la combinaison de «picture» et élément. On peut observer quelques voxels à la figure 2.9. Comme nous allons le voir à la section 2.3.2, la technique que j’utilise tire profit du traitement en parallèle pour arriver à reconstruire les modèles dans des délais très courts. L’approche utilisée ne nécessite pas de stimuler l’environnement avec des patrons structurés de lumière et théoriquement pourrait fonctionner avec deux caméras, mais il est préférable d’utiliser au moins quatre caméras.

Nous déterminons à l’avance la zone que le système surveillera. Le système va quadriller la zone à surveiller au complet et vérifiera si chacun des

voxels de la grille doit faire partie du ou des modèles reconstruits. On peut voir à la figure2.11

l’allure de l’idée, ainsi qu’un bon positionnement des caméras. Si un animal se trouve dans la scène, chacun des pixels qui le représente dans les images des caméras devrait en théorie faire partie des pixels d’avant-plan. Il s’agit de vérifier pour chacun des voxels s’il correspond à un pixel d’avant-plan dans chacune des images. Afin d’y arriver, le système doit être calibré au départ. L’objectif de l’étape de calibration présentée à la section2.3.1est d’obtenir une matrice M pour chacune des caméras ce qui permet de faire la correspondance entre les coordonnées du monde réel et les coordonnées dans l’image des caméras. Ainsi, pour chaque caméra :

ˆ

où ˆu = [u, v, 1] sont les coordonnées des pixels des images de chaque caméra, M est une matrice de 3 lignes par 4 colonnes obtenue par la calibration du système et ˆX = [X, Y, Z, 1]T sont les coordonnées dans le monde réel. L’approche que nous avons utilisée pour construire nos modèles en 3D est fort simple une fois les caméras calibrées. On fixe d’abord la zone que l’on veut surveiller et l’on s’assure qu’on la voit dans chacune des caméras. On détermine ensuite la dimension des voxels. Ceci nous donne une grille d’emplacement possible pour nos voxels et on doit décider si chacun d’eux fait partie du modèle reconstruit. Afin de déterminer si un voxel fait partie ou non du modèle 3D, il s’agit de vérifier dans l’image de toutes les caméras, si le pixel correspondant à ce voxel a été attribué à un pixel d’avant-plan. Si le voxel correspond à des pixels d’avant-plan dans toutes les caméras, alors il fait partie du modèle reconstruit. La figure2.10 démontre ce processus.

Figure 2.10 – Reconstruction 3D

Afin de déterminer si un voxel doit être ajouté au modèle, on valide s’il est présent dans l’image de toutes les caméras, dont on a fait une soustraction de l’arrière-plan. On peut voir ici que le voxel grisé ne fera pas partie du modèle, car il correspond à des pixels qui n’ont pas été identifiés comme de l’avant-plan. Le voxel en rouge en fera partie, car il correspond à des pixels d’avant-plan dans l’image de chacune des caméras. L’équation (2.11) permet de faire le pont entre les coordonnées dans le repère du monde réel et celui de chaque caméra. Nous utilisons une matrice M par caméra, que nous avons obtenue lors de la calibration des caméras.

Afin que nos observations couvrent un territoire d’une plus grande dimension dans le moins de temps possible, on utilise une approche de type pyramidal. C’est une approche en deux passes. On fait une première recherche avec des voxels qui occupent plus de volume dans l’espace pour déterminer grossièrement l’endroit où se trouvent des objets d’intérêt, puis on reconstruit avec plus de détails (avec de plus petits voxels) les endroits où l’on a détecté la présence d’objets d’intérêt.

Figure 2.11 – Reconstruction 3D

Positionnement de quatre caméras afin d’obtenir une bonne reconstruction 3D et représentation de la grille de voxels candidats à faire partie des modèles reconstruits

2.3.1 Calibration

La matrice M de l’équation (2.11) qui fait le lien entre les coordonnées du monde et les coordonnées dans les images des caméras peut être trouvée à l’aide de différentes techniques de calibration qui sont bien connues, comme celles qui sont présentées dans Kwon; Zhang

(2000). La détermination de cette matrice est un domaine de recherche en soi qui est encore actuellement actif. Je vais maintenant présenter l’approche utilisée dans mon projet. Je l’ai choisie en fonction de sa simplicité.

Déterminer la matrice M correspond à trouver la valeur de chacune de ses composantes. C’est une matrice de dimension 3 par 4. Nous avons ainsi 11 inconnues, car nous pouvons choisir n’importe laquelle valeur pour une des composantes de la matrice M, à cause du facteur d’échelle. En effet, lorsque l’on connait la matrice M, il suffit de multiplier la matrice M pour que la composante que nous avons choisi de fixer soit égale à la constante voulue. Dans ce cas, les coordonnées du monde réel dans l’équation (2.11) seraient encore valides. Même si les valeurs du vecteur les contenant changeaient, lors de la normalisation de ce vecteur permettant d’obtenir le dernier composant égal à 1, les coordonnées redeviendront les mêmes.

Afin de pouvoir calculer la matrice de calibration M pour chaque caméra, nous filmons une cible de calibration lorsque nos caméras sont installées, car nous avons besoin de connaitre les coordonnées réelles de six points dans une image. En effet, en observant que :

ˆ

est l’équivalent de [u, v, 1] = M       X Y Z 1      

on peut poser deux équations par points,

ui= (M1∗ ˆXi)/(M3∗ ˆXi) (2.12)

et

vi = (M2∗ ˆXi)/(M3∗ ˆXi), (2.13)

où i = 1,2...n (nombre de points) et Mx correspond à la xième ligne de la matrice M.

On peut reformuler l’équation (2.12) de la manière suivante :

(−ui∗ M3+ M1) ∗ ˆXi= 0, (2.14)

ainsi que l’équation (2.13) comme cela

(−vi∗ M3+ M2) ∗ ˆXi = 0. (2.15)

À l’aide des coordonnées de six points, nous obtenons un ensemble d’équations suffisant pour déterminer chacune de nos inconnues de la matrice M. On peut utiliser la méthode de résolution d’équations que l’on préfère, tout en évitant la solution triviale où nos inconnues égalent 0. Je suggère d’utiliser une décomposition en valeur singulière (SVD) comme présentée dans Press et collab.(2007). Je recommande aussi d’utiliser plus de six points, même si cela nous donne un système d’équations surcontraint, car cela permet de réduire l’impact de nos erreurs de mesure. Pour y parvenir, nous reformulons les équations (2.14) et (2.15) pour poser :

A  M11M12M13M14M21...M33M34 T = 0 (2.16) où A =         ˆ XT 1 OT −u1Xˆ1T OT Xˆ1T −v11T ... ˆ XT n OT −unXˆnT OT XˆnT −vnnT        

et OT = [0, 0, 0, 0].

On peut remarquer que cette reformulation se présente comme un système d’équations de forme Ax = 0, dont nous trouvons la solution en utilisant le plus petit vecteur propre corres- pondant à la plus petite valeur propre dans la décomposition en valeur singulière pour obtenir M. [M11M12M13M14M21...M34]T correspond à la dernière colonne de la matrice V dans la

décomposition.

Il est possible d’arrêter la procédure de calibration ici, car nous avons une matrice M par caméra qui observe notre scène et qui nous permet de faire le pont entre le système de coor- données du monde réel et celui des caméras. C’est ce que nous avons fait lors de nos expériences lors de ces travaux de recherche. Cependant, il nous a été suggéré d’effectuer une étape sup- plémentaire afin d’améliorer de beaucoup le résultat de cette approche. En effet, l’approche de calibration présentée précédemment s’est résumée à la minimisation d’erreurs algébriques lors de la solution d’un système d’équations linéaires homogène. Or, nous pourrions de plus minimiser les erreurs géométriques de cette approche. Comme proposé dans Sonka et collab.

(2008) à la page 566, il s’agit en fait de prendre le résultat de notre calibration, afin de décom- poser les matrices M, pour en extraire les composantes extrinsèques et intrinsèques du modèle de la caméra. Comme on connait l’emplacement réel de plusieurs points dans la scène et dans les caméras, on peut ensuite modifier les valeurs de chacune de leurs composantes de manière itérative et vérifier l’effet sur la position des points obtenue avec ceux connus, afin de minimiser les erreurs le plus possible. Il s’agit ici d’optimiser la valeur de ces composantes, par exemple avec un algorithme de descente de gradients, comme celui proposé par Levenberg-Marquardt et dont l’implémentation est décrite dansPress et collab. (2007), afin d’obtenir de meilleures matrices de calibration.

Une fois la calibration terminée, nous avons une matrice M par caméra qui observe notre scène. Ces matrices et l’équation ˆu = M ˆX nous permettent de connaitre à quel endroit n’importe lequel voxel de notre environnement devrait être dans l’image de nos caméras (et s’il y est). Il s’agit ensuite de décider quelle zone on veut observer dans l’environnement et quelle taille on veut que nos voxels soient. Afin de reconstruire nos modèles, on regarde pour chaque voxel, si le pixel qui lui correspond est présent dans l’image de toute nos caméras après l’étape de soustraction d’arrière-plan. Ce traitement se parallélise très bien, car les choix d’ajouter ou non un voxel à notre modèle peuvent tous se faire en même temps, car ils ne dépendent pas du résultat du traitement de leurs voisins.

2.3.2 Temps réel et parallélisme

Tout comme l’approche de segmentation que nous avons présentée précédemment, notre ap- proche de reconstruction 3D se parallélise très bien. C’est d’ailleurs ce qui lui permet de s’exécuter en temps réel. On peut affirmer qu’un système s’exécute en temps réel lorsque ce

système délivre des résultats dans de courts délais et qu’il n’accumule pas de retard sur les données qu’il doit traiter. Notre système de reconstruction 3D s’exécute à la vitesse à laquelle il acquiert les images des caméras.

Afin d’y arriver, nous devons utiliser des unités de traitement ayant plusieurs noeuds de calculs, comme les cartes graphiques des ordinateurs ou des périphériques désignés pour cela. En général, pour un cout d’achat similaire, les noeuds de calculs d’un processeur d’ordinateur exécutent beaucoup plus d’opérations par seconde que ceux des cartes graphiques. Cependant, il y a généralement vraiment beaucoup plus de noeuds de calculs dans les cartes graphiques. Ceci implique que l’on a avantage à exécuter sur le processeur un algorithme qui nécessite un traitement séquentiel. Les algorithmes qui font plusieurs opérations similaires en parallèle devraient en théorie s’exécuter plus rapidement sur les cartes graphiques. Lors de l’utilisation d’une carte graphique pour exécuter une approche parallélisée, il faut faire attention au goulot d’étranglement correspondant au temps que cela prend pour transférer les données entre la mémoire de la carte graphique et celle du processeur. Il faut aussi faire attention à éviter les branchements conditionnels dans nos algorithmes, car les noeuds de calcul doivent tous faire les mêmes opérations. Un autre goulot d’étranglement à faire attention lorsque l’on parallélise une approche est d’avoir des blocages en écriture sur la mémoire parce que les noeuds de calcul doivent écrire des informations au même endroit en mémoire. On peut aussi optimiser notre traitement en fonction de la gestion des différentes caches de mémoire.

Pour nous aider à comprendre l’intérêt de paralléliser une approche, on peut comparer le nombre de calculs que l’on peut faire en une seconde à l’aide du processeur d’un ordinateur avec le nombre de calculs que l’on peut faire sur une carte graphique de cout similaire durant le même laps de temps. Avec un processeur de 4 coeurs dont la fréquence est de 3 GHz, on peut théoriquement faire 12 milliards de calculs par seconde, car nous possédons 4 coeurs * 3 gigas (milliards) hertz (d’oscillations par seconde). Le nombre de calculs que l’on peut faire sur une carte graphique dont la fréquence est de 0.9 GHz, mais qui possède 1500 coeurs, est de 0.9 ∗ 109∗ 1500 = 1350 milliards de calculs par seconde. Les coeurs de la carte graphique doivent cependant tous faire une opération du même type (par exemple une addition) durant une oscillation, mais chaque opération peut donner des résultats différents, car tous les coeurs peuvent utiliser des données différentes. Le nombre d’opérations total que l’on peut exécuter sur une carte graphique dans un temps donné est donc généralement plus grand que sur un processeur, lorsque l’on peut faire simultanément plusieurs fois les mêmes opérations. Ceci améliore de beaucoup le rapport entre le cout du matériel sur lequel le système s’exécute et le temps nécessaire pour effectuer tous les calculs.

La parallélisation de notre algorithme de détection se fait en deux modules distincts. Soit un module de soustraction d’arrière-plan et un module de reconstruction 3D.

la valeur d’intensité des pixels à des fonctions gaussiennes) et ne dépend pas du résultat de la segmentation des voisins, on peut ainsi l’exécuter en parallèle. Dans un monde idéal, on aurait pu l’implémenter de manière matérielle. Par exemple des cartes de circuits logiques programmables (FPGA), afin d’obtenir directement des images dont l’arrière-plan aurait été retiré. Dans le cadre de notre projet, nous avons plutôt procédé avec une approche logicielle et nous avons utilisé CUDA pour faire cette tâche. À chaque image analysée, on monte dans la mémoire des cartes graphiques le modèle de l’arrière-plan et l’image à traiter. Ensuite, chaque noeud de calcul effectue son traitement séparément et statue si le pixel qu’il analyse fait partie de l’avant-plan. Il doit aussi mettre à jour le modèle de l’arrière-plan. Ceci a dû être fait pour chacune des caméras. Cela fait beaucoup de transferts de données entre les cartes graphiques et la RAM de l’ordinateur et c’est souvent le goulot d’étranglement lorsque l’on tente de paralléliser une approche. Cela aurait pu être évité avec une approche matérielle. Dans le module qui implémente l’algorithme de reconstructions 3D, les tests de présence d’un objet d’intérêt pour chaque voxel peuvent aussi tous se faire de manière simultanée. Il s’agit ici de monter dans la mémoire des GPUs les images résultant de l’étape de soustraction d’arrière- plan. On doit monter en mémoire les matrices de calibration M qui font le pont entre les coordonnées du monde et ceux de chacune des caméras. On doit aussi passer les coordonnées de la grille de voxels à vérifier. Chaque noeud de calcul aura à vérifier, comme dans la figure2.10, si le voxel doit faire partie ou non du modèle. Il est préférable de choisir les dimensions de nos grilles de voxels de façon à utiliser tous les noeuds de calcul disponibles. La détection et la reconstruction 3D des objets se sont faites en deux passes dans notre système. Une première passe avec des voxels beaucoup plus larges pour détecter la présence des objets d’intérêt et pour connaitre leurs coordonnées. Une deuxième passe sur tous les objets détectés, avec une grille de voxels située à leurs coordonnées et contenant des voxels beaucoup plus petits. Il est à noter que l’on n’est pas obligé de changer le contenu de la mémoire des GPUs lors de la deuxième passe. Comme chaque noeud de calcul n’a qu’une comparaison par caméra par passe à faire, le traitement est ainsi très rapide.

Chapitre 3

Identification des êtres vivants du

règne animal

3.1

Obtention des caractéristiques des animaux

Plusieurs critères peuvent être utilisés pour identifier les animaux présents dans une scène, par exemple leurs dimensions, leur forme géométrique, leurs couleurs, leurs textures, leur vitesse maximale de déplacement, les sons qu’ils émettent, leurs modes et leurs patrons de dépla- cement. L’approche présentée ici utilise seulement leurs dimensions et leur forme, mais rien n’empêcherait de la complémenter avec d’autres sources d’informations. Un groupe de re- cherche à Princeton (Dobkin et collab.) tient à jour une comparaison intéressante de plusieurs approches pour comparer des objets en 3D (Shilane et collab.). Afin d’analyser la forme des animaux, mon approche s’est inspirée des travaux de plusieurs chercheurs. À ma connaissance, je propose une approche novatrice, qui repose principalement sur la décomposition en harmo- niques sphériques et qui utilise des concepts apparentés aux approches de type «sac de mots» (Fehr et collab.(2009)) et de «signatures squelettiques» (Biasotti et collab. (2008)).

Documents relatifs