5 votes

Calcul de la similarité entre des lignes tracées

J'ai besoin d'un algorithme pour calculer, numériquement, le degré de similitude entre deux lignes dessinées. Les lignes sont tracées à l'aide d'une souris et sont stockées sous forme d'un ensemble de coordonnées cartésiennes avant d'être filtrées et lissées à l'aide d'algorithmes distincts.

Par exemple, dans le schéma suivant : diagram

Les lignes A et B sont clairement similaires, mais B et C ne le sont pas. L'algorithme doit en tenir compte. En outre, la "direction" de la ligne, indiquée par les points de départ et d'arrivée, est importante. Un tel algorithme existe-t-il déjà ?

2voto

bhups Points 6257

Une approche naïve peut consister à prendre la somme des distances entre les points correspondants sur les deux lignes, en supposant que les deux lignes ont presque la même longueur et que le nombre de points sur les lignes est approximativement le même et équidistant.
Traduire la ligne 2 de façon à ce que son point de départ soit le même que celui de la ligne 1.
2. calculer la somme des distances entre les points correspondants entre la ligne 1 et la ligne 2.
3. Si la distance moyenne (c'est-à-dire SUM/NUMBER_OF_POINTS) est inférieure au THRESHOLD, les lignes sont similaires, sinon elles sont différentes.
Cela peut être étendu à des lignes de support de tailles différentes. Dans ce cas, il suffit d'agrandir la ligne la plus petite pour qu'elle corresponde à la ligne la plus longue, puis le reste peut être similaire à l'approche ci-dessus.
Outre le calcul de la distance, vous pouvez calculer la différence des pentes des lignes et si la différence des pentes en un point (ou en quelques points, vous devez faire des expériences pour cela) est trop élevée (supérieure à un certain seuil), alors elles ne sont pas similaires.

2voto

Gulzar Points 620

Cette réponse est extrêmement tardive, mais je la publie pour que d'autres, comme moi, la trouvent par hasard en cherchant.

Je crois que le distance de Fréchet pourrait être la mesure que vous recherchez, notamment parce que la direction importe.

On peut s'y prendre de plusieurs façons, l'une d'elles serait d'échantillonner les points dessinés à un certain taux d'échantillonnage, et de calculer la distance euclidienne entre chaque deux échantillons à un moment donné, puis de prendre le maximum.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X