SVALABARD n'inclut pas de système d'interprétation de courbes (Bézier ou NURBS). Bien qu'il soit possible de dessiner tout type de traits et de surfaces, ceux-ci seront toujours représentés sous la forme de points et de segments. Rien ne garantit alors dans ce cas la justesse et la précision de l'interprétation ni, surtout, la possibilité d'obtenir une reconstruction 3D. Cette restriction est due aux limites actuelles du noyau mathématique de GINA qui ne permet que de reconstruire des objets polyédriques. Nous discuterons toutefois dans le chapitre suivant les possibilités d'évolution globales sur ce point.
|
Nous présentons dans cette section les principes et algorithmes que nous proposons, ainsi qu'un filtre de détection du contexte. Cet algorithme permet de filtrer les traits des différentes phases que nous avons proposées dans la section 3.3.3, et peut donc être utilisé dans un but de filtrage du dessin, mais aussi pour adapter l'interface à la phase courante de dessin (affichage de résultats ou propositions, démarrage de traitements, etc.).
Dès lors, nous avons inséré deux traitements supplémentaires, qui sont la détection du contexte de dessin et la fusion de segments. La détection du contexte, à partir des caractéristiques des traits et des segments construits, va permettre de ne conserver que les données des phases constructives. La fusion des segments va permettre de regrouper en un seul segment des traits repassés, révisés, rallongés. La figure 4.24 illustre donc la chaîne de traitement que nous proposons, ponctuées par le module de reconstruction 3D.
Les traitements sont séquentiels et suivent un paradigme de flot de données. Chaque filtre est un module réactif, qui reçoit des données en entrée et transmet au module suivant les données reçues et les traitements produits. Nous parlons de traitements en cascade. Cet ordre obéit à la logique de traitement des traits et à une structuration progressive du dessin. Il est toutefois possible d'insérer simplement de nouveaux traitements dans la séquence, ou d'en changer l'ordre (en respectant toutefois leurs entrées-sorties), grâce à la modularité et la flexibilité des outils logiciels utilisées pour l'implémentation (voir les boîtes à outils ICON [Dragicevic et Fekete1999,Dragicevic et Fekete2004,Dragicevic2004b] et MAGGLITE dans la partie II de ce mémoire). Cette modularité est une partie de l'originalité de notre approche du traitement du dessin, contrairement à nombre d'approche ou il est ardu de modifier la séquence de traitement.
En outre, cette architecture permet l'intégration des traitements dans la description des interactions et des comportements du système, décrits dans le même paradigme de flot de données (voir le détail dans le chapitre 7 et la section 8.4.3). Ainsi, les filtres sont appliqués en temps réel et intégrés aux interactions du système. Cela confère une plus grande adaptabilité aux données reçues contrairement aux méthodes dites paresseuses qui repoussent les traitements en fin de saisie.
Le premier filtre (cadre A de la figure 4.24) permet d'enregistrer les traits, collections de points, ainsi produits. Cet algorithme simple construit un trait en enregistrant les points qui suivent le déplacement de l'outil de dessin est utilisé. Pour chaque point, le système enregistre la position 2D, le temps et la pression (si le dispositif d'entrée le permet). L'algorithme effectue aussi un filtrage des points saisis, afin d'éliminer des points identiques ou trop proches dans un même trait. En effet, la fréquence d'échantillonnage4.5 de plus en plus élevée des périphériques d'entrée actuels entraîne la saisie de plusieurs points identiques, ou de points très proches qui ne seront ni significatifs visuellement, ni pour les algorithmes de traitement. Éliminer les points trop proche ne change donc pas l'aspect visuel des traits dessinés, et ne fausse pas les algorithmes de traitement (cela les rend même plus performants en terme de rapidité, sans perte de qualité de traitement). Ainsi, l'algorithme de création des traits propose un seuil réglable de filtrage, basé sur la distance entre deux points consécutifs.
Ce module de traitement réalise aussi un autre filtrage: celui des traits de construction. Nous avons constaté dans le chapitre 3 que les traits de construction n'étaient pas nombreux sur les dessins des sujets de notre étude. Toutefois, ils ne sont pas inexistants. Il est important de les détecter, car n'étant pas nécessaires au noyau fonctionnel du système, il n'est pas utile de leur appliquer tous les traitements. Ils doivent toutefois être propagés dans la séquence de filtrage, étant utilisés par l'algorithme de détection du contexte.
Cette détection est réalisée en regard de nos observations: ce sont de simples points (ou des traits de taille très réduite), ou des traits dont la pression est très faible. Ainsi, le filtre de création des traits permet de marquer les points seuls ainsi que les traits d'une taille ou d'une pression moyenne inférieures à des seuils. Nous avons réglés ces seuils de filtrage de manière expérimentale, à partir de notre propre expérience et des tests informels que nous avons réalisé avec quelques dessinateurs. Toutefois, ceux-ci sont facilement paramétrables et peuvent être adaptés à l'utilisateur.
On trouve beaucoup de ces méthodes de segmentation de traits, appelées aussi détection de coins, dans la
littérature (vingt et une d'entre elles sont recensées et comparées dans [Rosin1997]), adaptées à
différents cas d'utilisation (traitement d'images numérisées, traitement de vidéos, dessin temps
réel, etc.). Nous avons utilisé et adapté la méthode proposée par Tevfik SEZGIN
[Sezgin et al.2001], conçue pour le dessin en temps réel, qui combine les informations de vitesse et
de courbure pour extraire les points critiques. La prise en compte de ces deux caractéristiques
confère à cette méthode plus d'efficacité que celles basées uniquement sur l'une des deux, sans pour
autant en diminuer la performance.
L'algorithme calcule la courbure et la vitesse en chaque point du trait. Une première approximation
est composée à partir des deux points extrêmes du trait et du point de plus petite vitesse et de
plus grande courbure. Ensuite, deux segmentations de plus en plus précises sont composées en
ajoutant le point de plus petite vitesse pour l'une et celui de plus grande courbure pour
l'autre. La meilleure des deux solutions, en terme de distance au trait original, est conservée et
l'algorithme itère ainsi jusqu'à ce qu'un taux de précision fixé soit atteint.
Ce filtre reçoit donc un trait en entrée et produit en sortie un ou plusieurs segments, approximation du trait dessiné (il ne fait rien si le trait avait été marqué comme trait de construction). Il reste tout de même à éliminer certains segments ainsi construits, de façon à épurer le dessin pour ne garder que les données utiles à la reconstruction 3D.
Ce filtre (cadre C de la figure 4.24) identifie automatiquement le contexte (ou phase de dessin) à partir des segments reçus, de la phase courante et des données collectées dans l'évaluation présentée dans la section 3.3. Ces phases, au nombre de trois et que nous avons nommées construction, amélioration et style, sont identifiées par un algorithme basé sur les résultats de notre étude et des heuristiques simples.
À la réception du premier trait d'un dessin, l'algorithme initialise le système en contexte « constructif» (un dessin débute toujours par cette phase). Ensuite, chaque nouveau trait est analysé à sa réception de manière à évaluer la possibilité de passer dans l'une des trois phases à partir de la phase courante. Cette évaluation repose sur le calcul d'un score pour chaque phase potentielle. Ces scores sont tout d'abord initialisés à la probabilité de transition depuis la phase courante vers celles qu'ils représentent. Ces probabilités ont été calculées d'après les données de notre étude (table 4.2).
Ensuite, les scores sont pondérés par l'analyse des propriétés du trait reçu, du contexte courant et des propriétés du dessin. Tout d'abord, nous avons constaté qu'il n'y avait pas de gribouillage en phase constructive dans les dessins de notre étude. Ces traits sont donc détectés et le score des phases d'amélioration et de styles sont pondérées en conséquence. Ensuite, si le trait reçu est marqué comme trait de construction (par le premier filtre), le score de la phase de construction est augmenté.
L'algorithme prend alors en compte la position du trait reçu par rapports aux traits précédemment dessinés en phase de construction. Appelons «zone constructive» la boîte englobante des traits de la phase de construction qui ont déjà été dessiné. Un trait recoupant ou «à l'intérieur» de cette zone constructive sera d'une phase constructive ou d'amélioration (de par la définition même et la caractérisation de ces phases). Cela induit une augmentation des scores des phases de construction et d'amélioration.
Les différentes pondérations appliquées aux scores de bases des phases de dessin potentielles lors du tracé d'un nouveau trait sont représentées dans le tableau 4.3. Ces valeurs ont étés déterminées par le calcul des pourcentages de tels traits dans les différentes phases des dessins de notre étude. Nous les avons ensuite corrigées pour obtenir un comportement cohérent lors de l'application de l'algorithme sur les dessins de l'étude.
Enfin, l'algorithme analyse aussi les temps de pauses entre les traits afin d'appliquer les résultats que nous avons introduit sur l'augmentation des temps de pause lors d'un changement de phase. Le tableau 4.4 représente les pondérations des scores des différentes phases en fonction de la phase courante, pour des temps de pause considérés comme «longs». Ces valeurs sont proportionnelles aux moyennes calculées lors de notre étude, et de plus pondérées par le temps de pause. Bien sur, la notion de «long temps de pause» est subjective et ce seuil peut être configuré dans l'algorithme. Toutefois, les résultats de notre étude avaient mis en évidence des temps de pause variant de une à deux secondes lors des changements de phases. C'est pourquoi nous avons fixé ce seuil à deux secondes, par défaut.
Nous avons fixé ces différentes valeurs de pondération des scores de manière expérimentale, par l'analyse des dessins recueillis lors de notre étude. En appliquant l'algorithme sur ces dessins enregistrés, ainsi que sur de nouveaux dessins, nous avons pu ajuster ces valeurs expérimentales et ces heuristiques. Les résultats sont satisfaisants sur ces dessins exemples et sur de nouvelles réalisations en temps réel, mais nous n'avons toutefois pas encore évalué ses performances (en terme de «taux de réussite») dans des conditions réelles d'utilisation.
Notons enfin que cette méthode tire son efficacité de la combinaison de ces différentes heuristiques. En effet, l'utilisation conjointe des caractéristiques moyennes des traits et des phases de dessin (issues de l'étude préliminaire), ainsi que de quelques caractéristiques du dessinateur (temps de pause) permet de déterminer la phase courante. Il demeure toutefois des erreurs pouvant se révéler être une limitation évidente du système, occasionnant alors des interprétations erronées du dessin ainsi que des déroutes éventuelles de l'utilisateur. C'est pourquoi cette proposition d'algorithme reste un prototype, une preuve de faisabilité de la méthode, qui ne sera pas utilisée en l'état dans une évaluation globale du système. Il sera important, pour fiabiliser cette approche, d'étudier l'introduction de techniques de personnalisation et d'adaptation de l'algorithme à l'utilisateur et à son style de dessin (paramètres personnalisés et apprentissage).
Nous proposons donc pour la fusion des extrémités des segments, une adaptation au traitement temps réel de la méthode de Moshe SHPITALNI [Shpitalni et Lipson1997]. Cette méthode est une amélioration de la fusion des points par seuil fixe. Le principe est de calculer, pour chaque extrémité de segment, une zone de tolérance dont la taille correspond à l'incertitude sur la position du point. Cette zone est un cercle dont le rayon est fonction de la distance entre le point et tous les segments du dessin. Des extrémités doivent être fusionnées lorsque chacune est située dans la zone de tolérance de l'autre (voir figure 4.27). Le barycentre du groupe de points remplace donc les points et les segments sont mis à jour (voir l'algorithme A.3 en annexe A).
L'efficacité de cette méthode est due en grande partie aux zones de tolérance adaptables, qui prennent en compte la densité du voisinage de chaque point, et donc les aspects locaux du dessin. Originalement conçue pour un dessin terminé, notre adaptation pour le traitement temps réel se situe au niveau du calcul des zones, pondéré par la résolution (taille globale) du dessin, et donc évoluant au cours du temps. De plus, l'algorithme ignore les cas extrêmes (zones maximales) en début de dessin, et nécessite un nombre minimal de segments avant de regrouper des points pour ne pas occasionner de fusions indésirables.
Nous considérons deux types de critères à retenir pour analyser de telles situations et donc effectuer la fusion de segments: les critères positionnels et les critères relationnels. Nous considérerons dans la suite deux segments S1 et S2 pour lesquels nous voulons analyser les possibilités de fusion.
Dans le cas ou les segments sont dans la même zone de dessin, l'algorithme procède alors au calcul de l'intersection de leurs boîtes englobantes (voir figure 4.29(b)). Si l'aire de cette intersection est inférieure à un certain seuil, les segments sont potentiellement à fusionner. Dans le cas contraire, la distance entre les segments tout de même prise en compte pour déterminer un éventuel prolongement (voir figure 4.29). Précisons que nous définissons la distance entre deux segments par la plus petite des quatre distances de leurs extrémités respectives à l'autre segment. Un seuil de distance entre deux segment est fixé pour lequel les segments sont candidats à la fusion. Nous proposons des seuils déterminés de manière expérimentale mais paramétrables.
Il faut tout de même considérer le cas particulier des segments concourants, tout spécialement lors de dessin en perspective:
Si les deux segments S1 et S2 remplissent tous ces critères ils sont alors fusionnés en un seul, selon un principe simple: le segment résultant sera le plus long segment composé par combinaison des extrémités des segments originaux. Des quatre extrémités, les plus «à gauche» et «à droite» composent un premier segment, les plus «en bas» et «en haut» un autre. Le plus long des deux est conservé. Comme le montre la figure 4.31, nous parlons alors de composition lorsque le segment résultant est composé à partir de deux extrémités issues de segments différents et d'assimilation lorsque l'un des segments est conservé.
Nous avons vu le cas de l'étude de deux segments pour la fusion. L'algorithme global (voir l'algorithme A.4 dans l'annexe A) opère sur l'ensemble des segments résultants des traitements précédents. Ils les compare deux à deux et réalise les éventuelles fusion jusqu'à atteindre un point fixe sur l'ensemble des segments (plus de fusions) ou jusqu'à ce qu'un nouveau segment soit ajouté.
Ce filtre est utilisé ici dans un but de «nettoyage» du dessin, sans retour direct pour l'utilisateur (nous entendons ici sans être visible sur la feuille de dessin, mais les résultats des fusions sont toutefois visibles sur la feuille augmentée). Mais son comportement pourrait être raffiné, notamment au niveau de la détermination du segment résultant, afin de fournir des interactions avancées et novatrices dans un système de dessin vectoriel (prolongement ou déplacement naturel de segments, dans l'esprit de l'interaction pour la modification de courbes complexes proposée par Thomas BAUDEL dans «Ligne Claire» [Baudel1994]).
Ces données sont toutefois insuffisantes pour permettre au noyau de reconstruire un modèle 3D, celui-ci nécessitant des relations de plus haut niveau entre les éléments du dessin: parallélismes, orthogonalités et coplanarités. Bien que les outils interactifs que nous avons proposés pour saisir ces données soient à notre avis plus efficaces que des boîtes de dialogue ou un langage de script, cette démarche n'en reste pas moins contraignante pour décrire les relations existantes sur un dessin complexe, provoquant alors une rupture dans la démarche de conception. Il est alors indispensable d'inclure un mécanisme de détection de telles contraintes dans la séquence de filtrage/interprétation du dessin, avant le module de reconstruction 3D. Nous proposerons plusieurs approches possibles dans ce but dans le chapitre suivant. Il est toutefois important de souligner que la flexibilité qu'offre l'architecture modulaire des filtres de traitement du dessin que nous proposons permet d'en ajouter, ou d'en remplacer, mais aussi d'en prototyper de nouveaux sans avoir à modifier tout le processus de traitements.
Actuellement, le système fusionne a priori les parties du dessin tracées sur des calques différents. Dès lors, il n'y a qu'une seule interprétation du dessin, tous les calques sont « connectés» à une unique séquence de filtres. Cette approche soulève le problème de l'éventuel retrait d'un calque: les interprétations issues de ce calque ont été incorporées à l'interprétation du dessin et ne peuvent plus en être retirées. Cela entraîne alors une incohérence entre le dessin et son interprétation: les données interprétées persistent, même si le calque a été retiré.
Nous envisageons, pour remédier à cette incohérence, de permettre l'interprétation indépendante de chaque calque, ainsi, la fusion des interprétation s'effectuera a posteriori, en aval des interprétations, juste avant la reconstruction 3D (voir figure 4.33(b)). Il pourra ainsi y avoir une historique des interprétations, celles-ci étant construites à plusieurs niveaux. Cette démarche pose toutefois le problème de déterminer le niveau de dépendance des traits de chaque calque: les traits tracés sur un calque sont-ils nécessaires à l'interprétation de ceux d'un autre calque ? Nous sommes d'avis que cette interdépendance est forte, même si nous n'avons pas encore fouillé plus avant la question. Dans ce cas là, notre approche constituée d'une seule chaîne d'interpréteurs est la plus efficace, traitant le dessin d'emblée dans sa globalité, même si moins souple en terme de retour en arrière (suppression d'un calque).
stuf