From 1bf468f46ebaac326af00d73b6cb9dc2653ca0c6 Mon Sep 17 00:00:00 2001 From: Tri-Thien Truong Date: Wed, 12 Feb 2020 15:55:32 +0100 Subject: [PATCH] =?UTF-8?q?Rapport=20it=C3=A9ration=203=20-=20fin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iteration_3/Rapport_iteration_3.tex | 77 ++++---- .../iteration_3/gantt_project/Sprint4.gan | 164 ++++++++++++++++++ .../img/sprint_iteration_4_diagramme.PNG | Bin 0 -> 5110 bytes .../img/sprint_iteration_4_tableau.PNG | Bin 0 -> 23014 bytes 4 files changed, 202 insertions(+), 39 deletions(-) create mode 100644 doc/rapports_iterations/iteration_3/gantt_project/Sprint4.gan create mode 100644 doc/rapports_iterations/iteration_3/img/sprint_iteration_4_diagramme.PNG create mode 100644 doc/rapports_iterations/iteration_3/img/sprint_iteration_4_tableau.PNG diff --git a/doc/rapports_iterations/iteration_3/Rapport_iteration_3.tex b/doc/rapports_iterations/iteration_3/Rapport_iteration_3.tex index adb7909..9048232 100644 --- a/doc/rapports_iterations/iteration_3/Rapport_iteration_3.tex +++ b/doc/rapports_iterations/iteration_3/Rapport_iteration_3.tex @@ -138,13 +138,6 @@ Le premier point était important par le fait que l'utilisateur final voudra une Le second point concernait plus l'utilisation du plugin par l'entreprise de façon générale, par rapport à leur fonctionnement. En effet, en situation réelle, l'entreprise possède plusieurs nuages de points d'un même lieu, avec des scans venant de stations positionnées à différents endroits. Le multi-scans permettra donc de faciliter le filtrage, puisque l'on veut dans la plupart des cas, filtrer tous les nuages du points correspondant à un lieu. -\section{Risques éliminés durant l'itération} -Durant cette itération, nous avons pu éliminer certains risques. En effet, le fait d'utiliser uniquement les outils de CloudCompare nous permet d'éviter d'être dépendant de la bibliothèque PCL. \newline - -Bien sûr, il sera peut-être possible dans le futur, que nous aurions besoin d'utiliser cette bibliothèque pour certaines fonctions (par exemple, l'algorithme permettant de supprimer les points isolés). Mais pour l'instant, traiter les nuages de points avec le code que nous fournis CloudCompare nous suffit, et nous apporte un gain de temps non négligeable. \newline - -Nous avions aussi des interrogations par rapport à notre méthode d'implémentation de notre plugin. En effet, le fait d'avoir notre propre plugin est une amélioration très importante quant à notre projet, puisque nous avons uniquement des fichiers qui servent au fonctionnement de notre plugin. L'implémentation est donc beaucoup plus aisée. - \begin{figure}[!hbtp] \caption{\label{} Nouvelle interface filtrage RGB} \includegraphics[width=0.65\textwidth]{./img/new_ui.png} @@ -152,6 +145,13 @@ Nous avions aussi des interrogations par rapport à notre méthode d'implémenta Nous pouvons observer le point picking représenté par un bouton à gauche des champs RGB. Il est donc maintenant possible de saisir manuellement les valeurs, ou de cliquer sur le nouveau bouton, qui active le mode point picking de CloudCompare. L'utilisateur peut donc ensuite cliquer sur un point du nuage. Après son clic, s'il a bien cliqué sur un point, les champs RGB se remplissent automatiquement avec les valeurs RGB du point correspondant. Il peut toujours noter sa marge d'erreur, pour définir sa plage de points, et valider avec le bouton OK. +\section{Risques éliminés durant l'itération} +Durant cette itération, nous avons pu éliminer certains risques. En effet, le fait d'utiliser uniquement les outils de CloudCompare nous permet d'éviter d'être dépendant de la bibliothèque PCL. \newline + +Bien sûr, il sera peut-être possible dans le futur, que nous aurions besoin d'utiliser cette bibliothèque pour certaines fonctions (par exemple, l'algorithme permettant de supprimer les points isolés). Mais pour l'instant, traiter les nuages de points avec le code que nous fournis CloudCompare nous suffit, et nous apporte un gain de temps non négligeable. \newline + +Nous avions aussi des interrogations par rapport à notre méthode d'implémentation de notre plugin. En effet, le fait d'avoir notre propre plugin est une amélioration très importante quant à notre projet, puisque nous avons uniquement des fichiers qui servent au fonctionnement de notre plugin. L'implémentation est donc beaucoup plus aisée. + \section{Feedback} Suite à notre présentation du sprint review, nous avons pu avoir des retours client. Tout d'abord, des retours sur l'interface utilisateur, bien qu'améliorée, elle reste perfectible. Le système de marge d'erreur est à revoir, il est en effet peu parlant pour un utilisateur et peu pertinent suivant les cas d'utilisations. Si les valeurs sont faibles, "la marge" en sera impactée et réduite. Au lieu, d'avoir cette marge, il serait mieux de choisir/sélectionner deux points dans le nuage, l'un serait la borne "basse" et l'autre la borne "haute". On choisirait ainsi, l'espace de couleur qu'on choisit de segmenter. @@ -172,62 +172,61 @@ Nous avons gardé les mêmes méthodes de travail, en essayant de se répartir l \section{Objectifs de la prochaine itération} -Durant cette itération, nous avons pu grandement mettre en ordre notre projet. Nous avons donc maintenant notre propre plugin. Il faut maintenant terminer ce qui était en cours, prendre en compte les retours du client, et continuer les tâches prévues du cahier des charges. - -Les tâches prévues sont donc les suivantes : +Durant cette itération, nous avons pu grandement mettre en ordre notre projet. Nous avons donc maintenant notre propre plugin. Il faut maintenant terminer ce qui était en cours, prendre en compte les retours du client, et continuer les tâches prévues du cahier des charges. Les tâches prévues sont donc les suivantes : \begin{itemize} \item Intégration de fausses couleurs + \item Revoir la marge d'erreur du filtrage RGB \item Terminer la nouvelle méthode de segmentation - \item + \item Toon mapping \newline \end{itemize} -\begin{comment} +Pour la prochaine itération, il nous faudra prévoir la préparation pour notre deuxième soutenance, qui présentera nos premières solutions sur ce projet. Nous aurons une semaine de vacances, qui nous serviront justement à avancer sur le Ptrans. + +\begin{figure}[!hbtp] + \caption{\label{} Diagramme de Gantt détaillé - Sprint 4} + \includegraphics[width=1\textwidth]{./img/sprint_iteration_4_tableau.PNG} + \raisebox{-1\height} + {\includegraphics[width=1\textwidth]{./img/sprint_iteration_4_diagramme.PNG}} +\end{figure} \section{Résumé} \subsection{Tâches principales réalisées dans l'itération} \noindent\begin{tabu} to \textwidth {p{0.18\textwidth}X[c2]X[c]X[c4]}\toprule \thead{Tâche}&\thead{Responsable}&\thead{Statut}&\thead{Commentaire}\\\toprule -Plugin pour CloudCompare -& Mathieu +Refactoring du code / exportation sur un nouveau Plugin +& Ronan, Mathieu, Tri-Thien & Achevé -& Plugin CloudCompare possible, ou développer une interface à la main. Le choix est de faire un plugin CloudCompare.\\\midrule -Bibliothèques pour le traitement de nuages de points -& Ronan, Tri-Thien -& Achevé -& PCL semble la bibliothèque principale à utiliser, par sa simplicité et toutes les fonctionnalités qu'elle peut nous fournir.\\\midrule -Choix du langage +& Fin de QPCL, plugin à part et indépendant.\\\midrule +Amélioration de la sélection de points dans le nuage +& Ronan +& En cours +& Continuer l'algo pour avoir une meilleure sélection des points.\\\midrule +Amélioration du filtrage RGB & Tri-Thien & Achevé -& C++ ou Python. Le choix est le C++ pour faciliter l'implémentation du code avec CloudCompare. \\\midrule -Architecture du code source -& Ronan, Tri-Thien, Mathieu -& Achevé -& Organisation avec un package pour le plugin CloudCompare, et un autre pour nos algorithmes.\\\midrule -Espaces colorimétriques +& Modification entre 2 points à 1 point \\\midrule +Conversion LAB & Mathieu & Achevé -& Le format RGB est le plus répandu, mais l'option du CIELab semble être intéressant.\\\midrule -Algorithmes de segmentation -& Ronan, Tri-Thien, Mathieu +& Comparaison de performances avec RGB\\\midrule +Point picking +& Tri-Thien & Achevé -& Méthode pour segmenter selon une couleur (et un seuil d'erreur). Autre alternative : classification des points et régions puis raffinement\\\midrule -Recherche sur les méthodes de fausses couleurs +& Amélioration de l'interface pour cliquer sur un point, au lieu d'écrire manuellement les valeurs.\\\midrule +Multi-scans & Ronan & Achevé -& Correspondre une valeur en intensité en RGB (ou autre). Création d'une palette de couleurs.\\\bottomrule \\ +& Sélection de plusieurs scans pour tous les filtrer en même temps.\\\bottomrule \\ \end{tabu} \subsection{Tâches principales à réaliser pour la prochaine itération} \begin{itemize} - \item Plugin CloudCompare - \item Développer la sélection de points selon une couleur définie - \item Développer une solution pour extraire des points dans le nuage - \item Mettre le code en commun. + \item Intégration de fausses couleurs + \item Revoir la marge d'erreur du filtrage RGB + \item Terminer la nouvelle méthode de segmentation + \item Toon mapping \end{itemize} - -\end{comment} - \begin{thebibliography}{3} \bibitem{B01} Qingming Zhan, Yubin Liang, Yinghui Xiao, \textit{Color-based segmentation of point clouds}, 2009 diff --git a/doc/rapports_iterations/iteration_3/gantt_project/Sprint4.gan b/doc/rapports_iterations/iteration_3/gantt_project/Sprint4.gan new file mode 100644 index 0000000..9eab0b1 --- /dev/null +++ b/doc/rapports_iterations/iteration_3/gantt_project/Sprint4.gan @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rapports_iterations/iteration_3/img/sprint_iteration_4_diagramme.PNG b/doc/rapports_iterations/iteration_3/img/sprint_iteration_4_diagramme.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6b7fde6c5b3f1e51a23144301f71c12657d1fbfe GIT binary patch literal 5110 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 cnPwkZ!Td#}U;iuouMXfo5BrRjDB% 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 literal 0 HcmV?d00001