J'ai besoin de trouver un algorithme ou une méthode qui puisse détecter des latitude
longitude
points aberrants dans une trajectoire pendant le post-traitement , qui peut ensuite être corrigé (ramené dans le chemin de la trajectoire en fonction de ses voisins).
À titre d'exemple du type de points aberrants que je voudrais détecter et corriger, j'ai joint une image démontrant:
J'ai essayé d'utiliser un filtre de Kalman non parfumé pour lisser le mieux possible les données, mais cela ne semble pas fonctionner suffisamment efficacement pour les valeurs extrêmes plus extrêmes (données brutes en bleu, données lissées en rouge):
Mon UKF n'est peut-être pas calibré correctement (mais je suis assez certain qu'il l'est).
Les trajectoires sont celles des marcheurs, des coureurs, des cyclistes - des mouvements à propulsion humaine qui peuvent démarrer et s'arrêter, mais pas changer radicalement de vitesse ou de position aussi rapidement ou soudainement.
Une solution qui ne repose pas sur des données de synchronisation (et uniquement sur des données de position) serait extrêmement utile (car les données en cours de traitement ne contiennent pas toujours des données de synchronisation). Cependant, je suis conscient de l'improbabilité de ce type de solution, donc je suis tout aussi heureux d'avoir une solution!
Idéalement, la solution détecterait la valeur aberrante afin qu'elle puisse être corrigée, résultant en une trajectoire corrigée:
Ressources que j'ai passées en revue:
Smooth GPS data
- /programming/1134579/smooth-gps-dataCommon GPS and Geospatial Tracking Challenges and Solutions
- http://www.toptal.com/gis/adventures-in-gps-track-analytics-a-geospatial-primer (la solution semble perdre la précision des données)Quel algorithme dois-je utiliser pour supprimer les valeurs aberrantes dans les données de trace?
Algorithme que j'utilise.
Comme on peut le voir, cela pourrait prendre un virage serré.
J'ai une implémentation ArcGIS python de l'algorithme ci-dessus, il utilise le module networkx. Faites-moi savoir si cela vous intéresse et je mettrai à jour ma réponse avec le script
MISE À JOUR:
la source
Une idée est de créer un script qui répertorie les angles (et peut-être aussi la longueur) de chaque segment de votre chemin. Vous pouvez maintenant comparer les valeurs de chaque segment avec ses voisins directs (et éventuellement les seconds voisins également pour augmenter la précision) et sélectionner tous les points où les valeurs dépassent une valeur de seuil donnée. Enfin, supprimez simplement les points de votre chemin.
la source
La méthode Median-5 mérite également d'être étudiée.
Chaque coordonnée x (ou y) est définie sur la médiane des 5 valeurs x (ou y) qui l'entourent en séquence (c'est-à-dire elle-même, les deux valeurs précédentes et les deux valeurs suivantes).
par exemple x3 = médiane (x1, x2, x3, x4, x5) y3 = médiane (y1, y2, y3, y4, y5) etc.
La méthode est rapide et est également facile à utiliser sur les données en streaming.
la source
Il y a de bonnes données dans cette question / réponses.
Bien que tout dépende de la façon dont vos points sont regroupés sur ce qui fonctionnera / ne fonctionnera pas. Vous devrez être prudent sur les points étalés mais pas aberrants.
la source
Vous pouvez importer vos données dans Excel ou utiliser des pandas et des drapeaux et / ou supprimer toutes les distances du point précédent qui dépassent un certain seuil de distance irréaliste.
la source