Sous-sections

A.4 Fusion des points

Étant donné les relatives imprécisions du dessin à main levée, associées à la précision des dispositifs numériques qui en permettent la saisie, il est rare que les extrémités de traits voulus concourants par le dessinateur coïncident exactement. Ainsi, pour la structuration et l'analyse du dessin, il est nécessaire d'opérer à la fusion des extrémités des segments détectés.

A.4.1 Retour sur la méthode

Comme nous l'avons exposé dans la section 4.4.5, nous avons implémenté la méthode proposée par Moshe SHPITALNI dans [Shpitalni et Lipson1997]. Elle présente l'avantage d'introduire des seuils de fusion adaptatifs aux éléments dessinés, contrairement aux approches précédentes qui utilisaient des seuils fixes pour la fusion de points considérés comme proches.

Ce seuil de tolérance, zone circulaire autour du point, va permettre de déterminer que deux points sont candidats à la fusion lorsqu'ils appartiennent chacun à la zone de l'autre. Ces zones sont calculées de la manière suivante:

  1. tout d'abord, une taille maximale est définie pour chaque point, comme étant le tiers de la longueur du plus petit segment auquel il appartient (cette valeur expérimentale, fixée à la moitié de la longueur dans la méthode originale, permet d'assurer que les seuils de fusion ne grandirons pas dans des proportions trop incohérentes). Nous pouvons donc définir la valeur:

    Tmax = min{ls0, ls1,..., lsn}/3

    avec lsi les longueurs des segments dont le point est une extrémité.
  2. pour chaque point, la zone de tolérance est calculée comme étant la moyenne des distances du point à tous les segments du dessin. Pour les segments dont le point est une extrémité, le tiers de la longueur du segment est utilisée. Nous avons donc:

    Formule A..4   Calcul de la zone de tolérance en un point.

    Tp = min{Tmax,$\displaystyle {\frac{{1}}{{\vert S\vert}}}$$\displaystyle \sum_{{s\in S}}^{}$d (p, s)}

    avec d (p, s) la distance du point p au segment s ou ls/2 si p est une extrémité de s.

Ainsi, plus il y a de segments dans le voisinage du point, plus la taille de la zone de tolérance à la fusion va diminuer, permettant alors de prendre en compte la densité de traits dans son voisinage.

Conçue à l'origine pour le traitement de dessins terminés, notre réalisation de cet algorithme en montre aussi la pertinence pour l'analyse de dessin en temps réel, moyennant quelques adaptations:

  1. La prise en compte de l'évolution du dessin: il faut un minimum de points dessinés avant que la méthode ne rentre en action et les seuils de tolérance de fusion sont aussi dépendants de la résolution du dessin (le calcul de la moyenne des distances du point aux segments est pondéré par le rapport entre la taille de la feuille et la taille courante du dessin, permettant de prendre en compte le fait que le dessin va encore grandir et prendre plus d'espace au cours du temps). Nous pouvons donc reprendre la formule A.4:

    Formule A..5   Calcul de la zone de tolérance en un point avec adaptation à la résolution du dessin.

    Tp = min{Tmax,$\displaystyle {\frac{{1}}{{\vert S\vert*(A_f/A_d)}}}$$\displaystyle \sum_{{s\in S}}^{}$d (p, s)}

    Af est l'aire de la feuille de dessin et Ad l'aire du rectangle englobant le dessin.

  2. La mise à jour des zones de tolérance et des fusions tout au long du dessin et lors des opérations de traitement sur les traits (ajout, fusion et retraits de segments).

Dès lors, deux points p1 et p2 seront fusionnés si:

Proposition A..1   Conditions de fusion de deux points p1 et p2.

d (p1, p2)≤Tp1 etd (p1, p2)≤Tp2

A.4.2 Algorithme

L'algorithme est alors simplement:
\begin{algorithm}
% latex2html id marker 7690\caption[\svalabard . Fusion des ...
...JourTolerance}(point)
\ENDFOR
\end{algorithmic} {\bf fin proc}
\end{algorithm}

L'opération miseAJourTolerance(point) effectue le calcul du seuil de tolérance pour un point donné, en utilisant la formule A.5.
L'opération formeGroupes(points) permet de former des groupes de points respectant les conditions de fusion de la proposition A.1.
Enfin, l'opération calculBarycentre(groupe) renvoie le barycentre d'un groupe de points, utilisé pour remplacer les points dans l'opération remplace(groupe, barycentre) (cette opération va alors mettre à jour les segments dont les extrémités ont été remplacées et les plans dont les points ont été supprimés).

Cet algorithme est exécuté dans le flot de traitements à chaque fois qu'un nouveau segment est reçu et donc ajouté (ainsi que ses deux extrémités). Mais il est aussi invoqué en dehors de la cascade de filtres, lors de la fusion de segments (le traitement suivant). En effet, la fusion de segments occasionne des changements dans le calcul des seuils de tolérance de fusion des points. Le processus de fusion des segments utilise donc le mécanisme de communication directe par le superviseur pour déclencher la fusion des points si besoin, comme nous l'avons expliqué au début de cette annexe.

stuf
2005-09-06