Recherche rapide de lignes approximatives dans des ensembles de points

12

Dans une classe particulière de détecteurs, nos données se présentent sous la forme de paires de points en deux dimensions, et nous voulons enchaîner ces points en lignes.

Les données sont bruyantes et regroupées dans un sens mais pas dans l'autre. Nous ne pouvons pas garantir un coup dans chaque bac, même lorsque chaque élément détecteur fonctionne, il peut donc y avoir des sauts.

Notre chaîne d'analyse actuelle ressemble à

  1. Ajustez les résultats pour l'étalonnage des éléments détecteurs individuels
  2. Rechercher des clusters
  3. Lignes d'ajustement grossières aux grappes
  4. Connectez des clusters en structures de type ligne plus longues
  5. ...

Cette question concerne l'étape (3).

Nous avons utilisé une transformation de Hough pour cette étape et cela fonctionne bien, mais lorsque nous essayons de passer du banc d'essai à la simulation d'un projet à grande échelle, cela devient trop lent.

Je cherche un moyen plus rapide.


Pour ceux qui pourraient s'intéresser au cas d'utilisation réel, voici une chambre de projection temporelle à l'argon liquide

dmckee --- chaton ex-modérateur
la source
1
Nous avons également fait une méthode récursive de Hough Transform pour le suivi de chemin à travers des chambres proportionnelles multifilaires au FermiLab. La thèse d'Erik Kangas contient tous les détails. Je pense que c'est toujours la meilleure façon de le faire.
Matt Knepley
1
Vouliez-vous dire "... paires sur point ..." ou "... paires de points ..." dans la première phrase?
Bill Barth

Réponses:

2

Il existe une version probabiliste de la transformation de Hough (PHT) qui est plus rapide. Comme décrit par Bradski & Kaehler dans leur livre OpenCV:

L'idée est que le pic sera de toute façon assez élevé, alors le toucher seulement une fraction de temps sera suffisant pour le trouver.

La bibliothèque OpenCV présente une implémentation pour le PHT.

Il existe d'autres alternatives. Il n'est pas difficile de créer une version distribuée de la transformation Hough. Il suffit de diviser votre ensemble de points en petits morceaux et d'utiliser le cadre MapReduce pour résumer tous les accumulateurs. Une autre idée consiste à effectuer une version grossière de la transformation de Hough en utilisant un espace de paramètres à faible résolution. Choisissez vos meilleurs candidats et exécutez une itération plus fine en utilisant un espace de paramètres présentant une résolution plus élevée. C'est peut - être l'idée derrière le FHT du Gandalf.

TH.
la source
1
Le PHT a été proposé dans: Matas, J. et Galambos, C. et Kittler, JV, Robust Detection of Lines Using the Progressive Probabilistic Hough Transform. CVIU 78 1, pp 119-137 (2000).
TH.
Le cours puis la procédure fine peuvent être généralisés en plusieurs étapes, ce que fait Gandalf.
dmckee --- chaton ex-modérateur
BTW - Depuis que j'ai posé cette question, un collègue a ajouté un module utilisant la version probabiliste progressive de la transformation à notre code. Cela est venu avec plusieurs changements associés, il est donc difficile de caractériser exactement quelle différence cela a fait, mais cela fait partie d'un package qui a considérablement accéléré quelques étapes de l'analyse. Je vais donc accepter cela comme le conseil "gagnant".
dmckee --- chaton ex-modérateur
5

Mon collègue a trouvé la Fast Hough Transform dans la bibliothèque de Gandalf , qui semble très prometteuse mais qui demande beaucoup de travail à intégrer, donc je cherche d'autres approches.

L'implémentation de Gandalf est intéressante: ils évaluent l'espace accumulateur de manière récursive comme s'il traversait un arbre quad ou oct. Les régions sans grande densité sont rejetées au fur et à mesure.

dmckee --- chaton ex-modérateur
la source