Optimal time computation of the tangent of a discrete curve: application to the curvature Mathieu Isorce Master 2 Recherche: Géométrie algorithmique et discrète 25 janvier 2007 1 Introduction Le connaissance de la tangente d'une courbe discrete permet d'estimer la courbure d'une droite. Le projet "Stèle" du laboratoire ERIC et de la Maison de l'Orient Méditerranéen s'est intéressé à l'analyse automatique de prols de stèles funéraires. Le but était d'eectuer une classication en fonction des points caractéristiques (points à forte courbure) et ainsi d'associer à ces classes les datations et leurs situation géographique. Étant donné le nombre importants d'images de prols (courbes 2D) a étudier il a été nécessaire de développer un algorithme optimale en temps de calcul de la courbure en tout point de la courbe. Cette article présente donc un algorithme linéaire permettant de calculer la tangente d'un courbe discrète 8-connexe ouverte (qui ne s'intersecte pas). 2 Calcul de la tangente en un point de la courbe, algorithme de Vialard Anne Vialard a développé en 1996 un algorithme linéaire permettant de calculer la courbure en un point d'une courbe discrète. L'algorithme s'eectue en deux étapes. Premièrement il calcul la tangente discrete en un point puis estime la courbure en fonction des paramètres de la tangente. Une tangente discrète peut être dénit comme une droite arithmétique. La dénition que donne Réveillès étant la suivante : Dénition 1 : Un ensemble de points D ⊂ Z2 est une droite arithmétique si et seulement ∃(a, b, µ, ω) ∈ Z4 tels que ∀M = (x, y) ∈ D, µ ≤ ax − by < µ + ω ou pente de la droite, µ sa borne inférieure et ω son épaisseur. si a b étant la Dans l'article on considère ω = sup(|a|, |b|), c'est à dire les droites naïves, 8-connexe. De plus une courbe sera un ensemble de points c0 , ..., cn avec n ∈ N, tel que pour 0 ≤ i ≤ n, 0 ≤ j ≤ n, ci et cj sont 8-voisin si et seulement si |j-i| = 1. Pour pouvoir dénir une tangente il faut d'abord dénir un segment discret. Un segment discret est donc un sous-ensemble borné et connecté d'une droite arithmétique. 1 Pour tester si un ensemble de point est un segment discret, Vialard utilise l'alogorithme de Debled et Réveillès qui consiste à trouver le plus grand sous-ensemble à partir du premier point, formant un segment discret. L'algorithme permettant de calculer la tangente d'une courbe en un point se base sur une des dénitions d'une tangente discrete. La méthode considérée dans l'algorithme de Vialard est basée sur l'une d'elles. Pour déterminer la tangente en P, il sut d'ajouter des points de manière symétrique de chaque côté de P, en testant que le sous-ensemble formé est un segment discret, puis essayer d'agrandir le segment en ajoutant des points à droite ou s'il cela n'est pas possible, à gauche. La dénition de la tangente ne sera donc pas unique, symétrique et dépendra du sens de parcours de la droite, mais permet d'obtenir des résultats plus précis qu'avec une dénition symétrique de la tangente. Dénition 2 : La tangente en P=ci est un segment {ci−k ,...,ci ,...,ci+k+p } (respectivement {ci−k−q ,...,ci ,...,ci+k }) tel que ni {ci−k−1 ,...,ci ,...,ci+k+1 } ni {ci−k ,...,ci ,...,ci+k+p+1 } (respectivement {ci−k−q−1 ,...,ci ,...,ci+k }) ne sont des segments. Cet algorithme est linéaire, dépendant seulement de la taille de la tangente. Donc si on veut déterminer la tangente en chaque point, dans le pire des cas, si la courbe est une segment, on aura un algorithme quadratique (Chaque tangente faisant la longueur de la courbe). 3 Calcul de la tangente en tout point de la courbe L'algorithme de Fabien Feschet et Laure Latougne va donc prendre en compte les sous-ensembles de points ayant la même tangente. Il sura donc de calculer la tangente au points extremes de ces sous-ensembles. 3.1 La méthode Pour calculer la tangente en chaque point il faudra donc procéder ainsi : 1. On calcule la tangente au point P de la courbe avec l'algorithme de Vialard, au début de l'algorithme P est le premier point de la courbe. 2. Soit R le point délimitant la tangente à droite n'appartenant pas à la tangente. R existe sinon cela veut dire que l'on est à la n de la courbe. On parcourt à l'envers la courbe depuis R en testant tous les points pour savoir s'ils forment un segment avec R. On détermine le premier point L ne formant pas de segment. 3. Determiner le premier point M dont la tangente n'aura pas les même caractéristique que celle de P. M n'étant pas forcément le dernier point de la tangente en P. M est en fait le milieu de L et R. 4. Les tangentes en chaque point entre P et M (non inclus) ont donc les même caractéristiques (a,b). 5. On peut donc reprendre à la première étape de l'algorithme en remplaçant M par P. 2 Si R n'existe pas, les tangentes de tous les points restant auront donc les même caractéristiques. 3.2 Modication de l'algorithme Pour rendre l'algorithme plus ecace, au niveau de l'étape 2, il est possible de remplacer le parcours à l'envers de la courbe par un calcul incrémental. Considérons une itération i de l'algorithme. On a donc les points Pi , Ri , Mi , Li et Gi , étant l'homologue de Ri délimitant la tangente à gauche. On va donc chercher à calculer les points Pi+1 , Ri+1 , Mi+1 , Li+1 et Gi+1 . On sait déjà que le point Pi+1 sera l'ancien point Mi+1 . Lorsqu'on calcul la tangente au point Pi+1 , on obtient donc les nouveaux points, Mi+1 , Ri+1 et Gi+1 . En fait le point Li+1 pourra être calculé sans avoir à faire de parcours à l'envers de la courbe car Gi+1 est en fait l'ancien point Li . On sait donc que le point Gi+1 = Li sera à gauche de Li+1 . En conséquence, on peut donc procédé par itération en enlevant à chaque fois le point le plus a gauche de la tangente en Pi+1 et en testant si en ajoutant le point Ri+1 le sous-ensemble formé est un segment. 3.3 Complexité L'intérêt de ce procédé itératif pour calculer Li+1 est que l'on pourra calculer en même temps la tangente en Pi+1 , c'est à dire, déterminer Ri+1 et le point Li+1 . Pour déterminer le point Ri+1 , on va donc ajouter des points R̂i+1 (point test) à droite de Ri et vérier que l'ensemble ]Gi+1,R̂i+1 ] est un segment. En parallèle on peut déterminer le point Li+1 , en testant si ]L̂i+1 , R̂i+1 ] est un segment. Le fait de ne pas avoir encore déterminé le vrai point Ri+1 ne pose pas de problème en faisant la considération suivante. Si L̂i+1 = Li+1 et R̂i+1 6= Ri+1 , il serait possible passer à côté du point Li+1 si ]L̂i+1 = Li+1 , R̂i+1 ] n'est pas un segment. Or cela n'est pas possible car ]L̂i+1 = Li+1 , R̂i+1 ] ⊂]L̂i+1 = Li+1 , R̂i+1 = Ri+1 ] qui est un segment donc un sous-ensemble du segment, aussi. Il y a contradiction. On peut donc eectuer les deux calculs en même temps. La vérication d'un segment peut être fait en O(1) grâce à l'algorithme de Debled. Ainsi cette partie de l'algorithme sera en O(1). La complexité du calcul de la tangente en chaque point sera donc O(n). 4 Courbure et résultats Ensuite pour le calcul de la courbure, ils s'appuient sur l'estimation proposée par Worring et Smeulders. La courbure en un point peut être estimée à partir de l'angle entre la tangente en ce point et l'horizontale. Il est donc possible d'utiliser cette algorithme pour le calcul de la courbure en chaque point de la courbe et donc des prols de stèles funéraire. Cependant il est nécessaire d'eectuer un premier traitement an d'obtenir des courbes 8-connexes en ltrant les courbes pour les rendre plus mince et plus lisses. 3 5 Conclusion Fabien Feschet et Laure Latougne ont mis au point un algorithme de calcul de tangente en chaque point d'une courbe en temps linéaire par rapport au nombre de point de la courbe. Il permet donc aussi d'estimer la courbure en chaque point. L'application aux courbes fermée peut se faire en modiant légèrement l'algorithme mais ne change rien à sa complexité. Cependant il ne permet pas de traiter les autres courbes n'étant pas 8-connexe et nécessite un pré-traitement. Ils ont donc envisagé de pouvoir traiter des courbes dans le cas général. Si le point fort de cet algorithme est son optimalité en temps de calcul pour TOUS les points de la courbe, rien n'est précisé au niveau de la précision de la tangente qui est calculée avec cette dénition, on peut donc envisager de trouver des méthodes plus précises. Lachaud et al. propose en 2006 dans son article "Fast, Accurate and Convergent Tangent Estimation on Digital Contours" une estimation apparement plus précise. 4