Sous-sections

A.5 Fusion des segments

La méthode originale de fusion des segments que nous avons proposé permet de nettoyer et structurer le dessin à main levée en combinant des traits (ou plutôt les segments qui en découlent) censés ne représenter qu'un seul segment géométrique. Nous avions montré l'utilité et les principes généraux de ce traitement dans la section 4.4.6.

A.5.1 Retour sur la méthode

L'opération consiste à examiner deux à deux les segments issus des traits du dessin afin de déterminer si ils remplissent les conditions justifiant leur fusion. Ces conditions sont déterminées par les mesures suivantes, issues de nos observations et études sur le dessin en perspective:
  1. des critères positionnels, concernant la position globale des deux segments dans le dessin (dans la même zone) et leur position relative déterminée par une estimation de la proximité des deux segments. Cette proximité est évaluée par l'intersection des boîtes englobantes et la distance séparant les deux segments.
  2. un critère relationnel qui est l'angle formé par les deux segments.
Ces mesures sont alors comparées à des seuils expérimentaux permettant d'établir les possibilités de fusion des segments.

Lorsque deux segments remplissent les conditions, ils sont fusionnés en un seul par composition ou assimilation (voir figure 4.31).

A.5.2 Algorithme

L'algorithme est une boucle itérant sur l'ensemble des segments du dessin jusqu'à atteindre un point fixe (plus de fusion) où jusqu'à ce qu'un nouveau segment soit ajouté (un trait a été dessiné).


\begin{algorithm}
% latex2html id marker 7730\caption[\svalabard . Fusion des ...
...uil global, les fusionner. Retourner à l'étape 1.
\end{enumerate}\end{algorithm}

Le choix des segments à analyser lors de chaque itération est guidé par la chronologie du dessin, c'est à dire que les segments sont étudiés du plus ancien au plus récent. Lorsque deux d'entre eux sont fusionnés, le segment résultant prend la place du plus ancien dans la chronologie. Cette approche se justifie par les résultats de notre étude qui ont montré que les traits (et donc les segments qui en découlent) sont tracés par groupes, dans une même phase. Ainsi, les fusions les plus nombreuses concernent des segments proches chronologiquement. Toutefois, des phases ultérieures de modification et de révision pourront aussi entraîner des fusions, c'est pourquoi chaque segment est tout de même comparé à tous les autres. Bien que pouvant paraître coûteuse au premier abord, cette comparaison est en fait relativement rapide, une majorité de candidats étant rapidement éliminés par le premier critère positionnel (appartenance à la même zone de dessin).

Bien que l'implémentation de cet algorithme soit réalisée à partir d'opération simples et optimisées par notre implémentation globale du système (boites englobantes et distances en cache, comparaisons, etc.), il convient d'anticiper d'éventuelles remarques quand à sa complexité. En effet, le principe de parcourir tous les segments pour les comparer à tous les autres conduit à réaliser des boucles imbriquées, donnant à notre algorithme une complexité d'ordre N2 (la taille de la donnée est le nombre de segments). Ce n'est toutefois pas une limite, étant donné que le nombre de segments manipulé pour chaque dessin reste tout de même dans des proportions très faibles. Nous en voulons pour preuve que le total des 24 dessins complets de notre étude formaient un corpus d'environ 10000 traits. Même si chacun d'eux est décomposé en deux segments, lors de la segmentation, nous atteignons une moyenne d'environ 900 segments par dessin, ce qui ne posera pas de problème de complexité algorithmique. De plus, le traitement de détection des phases permet déjà de filtrer un certain nombre de segments qui ne seront pas transmis à cet algorithme et enfin notre implémentation sous forme de processus indépendants garantit que l'algorithme ne bloquera pas l'interaction, même en cas de traitements lourds.

Un point d'étude plus intéressant concerne par contre le comportement «local» de cet algorithme, que nous avons déjà évoqué rapidement dans le chapitre 5, page [*]. En effet, la méthode proposée est basée sur des heuristiques qui qualifient bien les cas possibles et les singularités présents dans le domaine d'application de nos travaux. Mais, comme toute méthode de ce type, elle pose le problème du comportement de l'algorithme au voisinage très proche des seuils choisis. C'est pourquoi nous envisageons de combiner ces heuristiques à une étude plus globale du graphe 2D formé par les points et segments du dessin, une étude topologique.

Figure A.4: Fusion topologique de segments. Les segments détectés et connectés par les traitements précédents forment un graphe 2D du dessin. L'analyse de sa topologie, associée à nos heuristiques, pourrait permettre d'améliorer notre algorithme de fusion des segments.
\includegraphics[width=200pt]{topologie}

Nous avons commencé à explorer une telle méthode, et identifié déjà trois cas, représentés dans la figure A.4. Le cas A, par exemple, permet d'identifier des segments issus de traits que l'on pourrait qualifier de révision (graphes composés de seulement deux sommets et une arrête). Dés lors, nos heuristiques positionnelles peuvent être appliquées pour déterminer à quel segment le fusionner. Le cas B peut être identifié par une recherche de pendants (sommets de degré 1) dans le graphe global afin de les fusionner (en utilisant nos heuristiques) pour former des cycles élémentaires. Cette méthode repose toutefois sur l'hypothèse que le dessin final va être représenté par un graphe planaire où tout sommet est dans un cycle (chaque cycle étant une face). Bien que ce soit le cas à la fin du dessin de l'enveloppe du bâtiment, cette hypothèse n'est pas vérifiée en début de dessin (tous les traits de l'enveloppe n'ont pas été dessinés, les faces ne sont pas toutes entièrement formées).
Il faudra alors envisager de retarder l'interprétation, ou de la décomposer en étapes. Il parait concevable d'utiliser dans ce but le résultat de notre étude montrant que la majorité des traits principaux primaires (l'enveloppe de la forme) sont tracés lors de la première phase constructive. Lors de cette phase, seules des fusions de points seraient prises en compte afin de former un premier graphe qui pourrait être révisé par la suite par fusions de segments comme proposé précédemment. Bien que n'étant plus vraiment «temps réel», cette approche permettrait une vision plus globale de l'interprétation, pouvant éviter des choix trop hâtifs grâce à une considération plus globale du problème.

Toujours dans cette optique de considérer le problème d'un point de vue global, il nous semble important d'envisager la mise en place de mécanismes de retour arrière sur les traitements, afin de pouvoir remettre en question l'interprétation et la corriger. Nous avons observé que le comportement des filtres était déterministe, dans le sens où l'interprétation des mêmes traits dans les mêmes conditions (chronologie, machine utilisée et ressources disponibles) sera toujours la même. Par contre, rien ne garantit qu'effectuer un traitement avant l'autre donnera le même résultat (fusionner deux points avant deux segments, par exemple). C'est pourquoi il nous semble important, pour améliorer ces traitements et leur robustesse, d'étudier ces points et de mettre en place ces mécanismes de retour arrièreA.6.

stuf
2005-09-06