Optimal time computation of the tangent of a discrete curve

publicité
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
Téléchargement