Documentation technique

Transcription

Documentation technique
Documentation
technique
Logiciel de reconstruction
de surface à l’aide
de caméras
Vadon Guillaume – Trlin Moreno
Rose Aurélie – Freydier Simon
Université Joseph Fourier, UFRIMA
2011
1./ Installation
Pour exécuter ce logiciel, il est nécessaire d’avoir, sur l’ordinateur, la bibliothèque
OpenCV en version 2.2, ainsi que le logiciel QT 4.
L’installation du dit logiciel peut donc se faire sous n’importe quel système
d’exploitation supportant OpenCV et Qt.
Toutefois, pour pouvoir le compiler, il est nécessaire de modifier le « Makefile »
afin de changer l’adresse des bibliothèques (en particulier OpenCV) puis de recompiler
le projet.
2./ commentaires
Si un utilisateur le désire, il lui est possible de générer une documentation de
type doxygen à partir des classes ThreadTraitement, camera, et radialSplines, qui
contiennent des commentaires prévus à cet effet dans les fichiers « .h » et « .hpp ». Les
classes liées à l’interface graphique ne disposent pas de cette possibilité, étant
normalement simple d’accès et de compréhension pour un utilisateur de Qt.
3./Description du code
Le code est structuré en 4 grandes parties :
 IHM
 ThreadTraitement
 Camera
 radialSpline
1. IHM
Le dossier IHM contient tous les fichiers relatifs à l’interface, et à la vérification
des données en entrée. On trouvera donc :
 Paramwindow : classe d’interface graphique correspondant à la fenêtre
principale.
 Tabcontent : classe d’interface graphique correspondant à un onglet « Caméra ».
Il s’agit d’un widget ajouté a paramwindow lors du clic sur le bouton « Ajouter
caméra ».
 Addcalibpointwindow : il s’agit d’une classe d’interface graphique
correspondant à la boite de dialogue d’ajout de point de calibration, qui apparait
lorsque l’utilisateur clique sur le bouton « Ajouter point calibration ».
 Removecalibpointwindow : il s’agit d’une classe d’interface graphique
correspondant à la boite de dialogue de suppression de point de calibration, qui
apparait lorsque l’utilisateur clique sur le bouton « Supprimer point de
calibration ».




Point2D : il s’agit d’une classe codant un point à 2 dimensions en double.
Point3D : il s’agit d’une classe codant un point à 3 dimensions en double.
Calibrationpair : il s’agit de la classe codant les points de calibration par
association entre un point 2d et un point 3d.
Utils : il s’agit d’une paire de fichiers pouvant être utilisés afin d’ajouter des
fonctions diverses.
2. ThreadTraitement
Cette classe contient l’ensemble du code directement lié au traitement des images
afin d’en extraire les positions des marqueurs et d’effectuer les correspondances entre
les marqueurs trouvés sur les différentes images à un temps t. On peut donc y trouver
les prétraitements, le matching, le tracking, ainsi que l’appel aux fonctions permettant la
triangulation et l’interpolation de la surface se trouvant respectivement dans « camera »
et « radialSpline ».
3. Camera [dossier Camera]
Il s’agit d’une classe template. Cette classe permet de modéliser le comportement
des caméras utilisées pour la capture des données. Elle contient donc les fonctions de
calibration, et de triangulation, ainsi que l’ensemble des attributs permettant d’accéder
aux fichiers images correspondant à la caméra modélisée.
4. radialSpline [dossier interpolation]
Il s’agit d’une classe template. Cette classe permet de définir une surface de type
spline radiale paramétrée par une fonction qui sera définie dans les fichiers
« fonctions.h » et « fonctions.cpp ».
4./ Note sur l’utilisation d’Eigen
Ce projet utilise la librairie de templates Eigen. Pour des raisons de
compatibilités, nous avons choisi d’inclure directement la librairie au code. Il est
néanmoins possible pour les personnes disposant préalablement de cette librairie de la
retirer du code. Il faut pour cela avoir Eigen d’installé sur la machine de compilation, et
modifier les fichiers faisant appel à Eigen en remplaçant les guillemets des « #include »
par « <…> ». Il sera peut être également nécessaire de modifier le makefile afin d’inclure
Eigen aux dépendances.
5./ Bugs connus
Le logiciel souffre malheureusement de plusieurs bugs non résolus.



Fuite mémoire : une fuite mémoire importante a été localisée dans la fonction
« ThreadTraitement ::preTraitements », avec l’utilisation de la fonction
« cvLoadImage ». La mémoire allouée par cette fonction ne semble jamais libérée,
mais l’utilisation des différents opérateurs et fonctions de libérations de mémoire
disponibles aboutissent à une erreur.
Autre fuite mémoire : Il semblerait que l’utilisation de vecteur de tableaux
(std ::vector<Type*>) provoque également une fuite mémoire, bien que les
pointeurs du vecteur soient libérés individuellement. Cette fuite mémoire
associée à la précédente empêche le traitement de plus de 10 images sur la
totalité des caméras, ce qui est fortement limitant.
Crash : Si les numéros des images lues ne commencent pas à 1 et ne se suivent
pas (par exemple 1,2,4,5…) la fonction cvLoadImage (même emplacement que la
1ère fuite mémoire) ne charge pas l’image et une erreur risque donc de planter le
programme.
6/Limitations connues
Le logiciel n’étant pas achevé, les limitations suivantes ont été répertoriées.





Disposition des caméras : le matching est codé tel que l’utilisation d’une prise
de vue d’une surface rectangulaire en diagonale rasante provoquera de
mauvaises associations, et donc probablement une erreur.
Projection : le logiciel est pour l’instant prévu pour fonctionner avec des images
issues de simulation avec une projection orthogonale. L’utilisation de prises de
vue avec une projection en perspective nécessitera de modifier le code du
tracking et des caméras.
Traitements fixes : les paramètres de traitements indiqués en gris ont été fixés à
l’optimale à partir des tests que nous avons effectués. Il pourrait néanmoins
s’avérer judicieux de permettre à l’utilisateur de les faire varier si il décide par
exemple de travailler sur des images de taille très différente, ou avec des pastilles
d’une taille différente.
Pastilles circulaires : le programme est prévu initialement pour des pastilles
circulaires. L’utilisation d’un autre type de pastille requiert une modification du
code de prétraitement (ThreadPretraitement) notamment pour le choix des
éléments structurants des opérateurs morphologiques, ainsi que leur taille.
Multi-threading : à l’heure actuelle, le programme s’exécute comme un seul
processus. Il serait judicieux de lancer le traitement (fonction
ThreadTraitement ::run) dans un nouveau processus car il peut être couteux en
temps, et bloque donc l’interface le temps de son exécution.