La réponse dépend du contexte : si vous étudiez uniquement un petit nombre (limité) de segments, vous pourrez peut-être vous permettre une solution coûteuse en calcul. Cependant, il semble probable que vous souhaitiez incorporer ce calcul dans une sorte de recherche de bons points d'étiquette. Dans l'affirmative, il est très avantageux d'avoir une solution qui soit soit rapide sur le plan des calculs, soit permet une mise à jour rapide d'une solution lorsque le segment de ligne candidat varie légèrement.
Par exemple, supposons que vous ayez l'intention d'effectuer une recherche systématiquesur toute une composante connectée d'un contour, représentée par une séquence de points P (0), P (1), ..., P (n). Cela se ferait en initialisant un pointeur (index dans la séquence) s = 0 ("s" pour "start") et un autre pointeur f (pour "finish") pour être le plus petit index pour lequel la distance (P (f), P (s))> = 100, puis avancer s aussi longtemps que la distance (P (f), P (s + 1))> = 100. Cela produit une polyligne candidate (P (s), P (s + 1) ..., P (f-1), P (f)) pour l'évaluation. Après avoir évalué son "aptitude" à supporter une étiquette, vous incrémenteriez alors s de 1 (s = s + 1) et augmenteriez f à (disons) f 'et s à s' jusqu'à ce qu'une fois de plus une polyligne candidate dépassant le minimum une plage de 100 est produite, représentée par (P (s '), ... P (f), P (f + 1), ..., P (f')). Ce faisant, les sommets P (s) ... P (s ' Il est hautement souhaitable que la forme physique puisse être rapidement mise à jour en ne connaissant que les sommets supprimés et ajoutés. (Cette procédure de numérisation se poursuivrait jusqu'à s = n; comme d'habitude, f doit être autorisé à «boucler» de n à 0 dans le processus.)
Cette considération exclut de nombreuses mesures possibles de la condition physique ( sinuosité , tortuosité , etc.) qui autrement pourraient être attrayantes. Cela nous conduit à privilégier les mesures basées sur L2 , car elles peuvent généralement être mises à jour rapidement lorsque les données sous-jacentes changent légèrement. Une analogie avec l' analyse en composantes principales suggère que nous envisageons la mesure suivante (où petite est meilleure, comme demandé): utiliser la plus petite des deux valeurs propres de la matrice de covariancedes coordonnées du point. Géométriquement, il s'agit d'une mesure de la déviation latérale "typique" des sommets dans la section candidate de la polyligne. (Une interprétation est que sa racine carrée est le plus petit demi-axe de l'ellipse représentant les seconds moments d'inertie des sommets de la polyligne.) Il sera égal à zéro uniquement pour les ensembles de sommets colinéaires; sinon, il dépasse zéro. Il mesure une déviation latérale moyenne par rapport à la ligne de base de 100 pixels créée par le début et la fin d'une polyligne, et a ainsi une interprétation simple.
Parce que la matrice de covariance n'est que de 2 sur 2, les valeurs propres sont rapidement trouvées en résolvant une seule équation quadratique. De plus, la matrice de covariance est une somme des contributions de chacun des sommets d'une polyligne. Ainsi, il est rapidement mis à jour lorsque des points sont supprimés ou ajoutés, ce qui conduit à un algorithme O (n) pour un contour à n points: cela s'adaptera bien aux contours très détaillés envisagés dans l'application.
Voici un exemple du résultat de cet algorithme. Les points noirs sont des sommets d'un contour. La ligne rouge continue est le meilleur segment de polyligne candidat d'une longueur de bout en bout supérieure à 100 dans ce contour. (Le candidat visuellement évident en haut à droite n'est pas assez long.)