Détecter les motifs circulaires dans les données de nuages ​​de points

10

Pour un algorithme de reconstruction de volume sur lequel je travaille, je dois détecter un nombre arbitraire de motifs circulaires dans des données de points 3D (provenant d'un appareil LIDAR). Les motifs peuvent être arbitrairement orientés dans l'espace et être supposés se situer (bien que pas parfaitement) dans des plans 2d minces. Voici un exemple avec deux cercles dans le même plan (mais rappelez-vous qu'il s'agit d'un espace 3D):

entrez la description de l'image ici

J'ai essayé de nombreuses approches .. la plus simple (mais celle qui fonctionne le mieux jusqu'à présent) est le clustering basé sur des ensembles disjoints du graphe du plus proche voisin. Cela fonctionne assez bien lorsque les motifs sont éloignés, mais moins avec des cercles comme ceux de l'exemple, très proches les uns des autres.

J'ai essayé K-means, mais ça ne marche pas bien: je soupçonne que la disposition des points circulaires pourrait ne pas être bien adaptée pour cela. De plus, j'ai le problème supplémentaire de ne pas connaître à l'avance la valeur de K.

J'ai essayé des approches plus compliquées, basées sur la détection de cycles dans le graphique du voisin le plus proche, mais ce que j'ai obtenu était soit trop fragile, soit coûteux en calcul.

J'ai également lu beaucoup de sujets connexes (transformation de Hough, etc.) mais rien ne semble s'appliquer parfaitement dans ce contexte spécifique. Toute idée ou inspiration serait appréciée.

cjauvin
la source
Une question plus simple: comment procéder pour détecter des segments de ligne dans une donnée bidimensionnelle?
charles.y.zheng
"..comme ceux des exemples"? Quels exemples? Pouvez-vous ajouter un lien?
2011
La transformation de Hough est le choix évident. Cela devrait bien fonctionner.
whuber
J'ai juste eu assez de réputation entre-temps pour ajouter l'exemple d'image dont je parlais.
cjauvin
3
Ce n'est pas un problème de clustering. En statistiques, les "clusters" sont constitués d'ensembles d'objets qui sont mutuellement plus proches les uns des autres que les autres objets. La proximité ne capture pas la circularité: c'est pourquoi ni K-means ni aucun autre algorithme de clustering ne fonctionnera. Pour cette raison, cette question s'intègre probablement mieux dans les sites de traitement d'images ou SIG, où vous pouvez trouver des experts sur cette question.
whuber

Réponses:

9

Une transformation de Hough généralisée est exactement ce que vous voulez. La difficulté est de le faire efficacement, car l'espace des cercles en 3D a six dimensions (trois pour le centre, deux pour orienter le plan, une pour le rayon). Cela semble exclure un calcul direct.

Une possibilité consiste à se faufiler sur le résultat à travers une séquence de transformations de Hough plus simples. Par exemple, vous pouvez commencer par la transformation de Hough (habituelle) pour détecter les sous-ensembles plans: ceux-ci ne nécessitent qu'une grille 3D pour le calcul. Pour chaque sous-ensemble plan détecté, coupez les points d'origine le long de ce plan et effectuez une transformation de Hough généralisée pour la détection de cercle. Cela devrait bien fonctionner à condition que l'image d'origine ne comporte pas beaucoup de points coplanaires (autres que ceux formés par les cercles) qui pourraient noyer le signal généré par les cercles.

Si les tailles de cercle ont une limite supérieure prédéterminée, vous pouvez potentiellement économiser beaucoup de calculs: plutôt que de regarder toutes les paires ou triplets de points dans l'image d'origine, vous pouvez vous concentrer sur les paires ou triplets dans un voisinage délimité de chaque point.

whuber
la source
J'essaierais de combiner toutes les approches suggérées: premier cluster basé uniquement sur la distance, comme l'a expliqué l'affiche originale, qui vous donnera des clusters qui peuvent être constitués de plusieurs cercles. Utilisez ensuite Hough pour détecter des sous-ensembles planaires au sein de chaque cluster. Ensuite, dans chaque sous-ensemble plan, utilisez à nouveau Hough pour trouver des cercles. Si cette dernière étape est coûteuse, vous pourrez peut-être effectuer un court-circuit efficace: essayez quelques triplets, devinez un cercle et voyez si une fraction substantielle des points de votre sous-ensemble se trouve très près de ce cercle. Si oui, enregistrez ce cercle et supprimez tous ces points, puis continuez.
Erik P.
3
Cette dernière idée est appelée RANSAC et pourrait probablement être utilisée seule, surtout si le nombre de cercles par image est petit.
SheldonCooper
Merci pour les idées éclairantes! La transformation de Hough en plusieurs étapes me semble la solution la plus puissante et la plus générale, mais RANSAC semble vraiment plus facile à implémenter et peut être juste suffisant dans mon contexte. Un problème que j'ai rapidement remarqué avec cela est le cas où vous avez des modèles de tailles déséquilibrées, ce qui biaise évidemment l'échantillonnage vers des objets plus gros. Des réflexions sur ce problème?
cjauvin
Une fois que vous avez détecté le plus grand cercle, supprimez tous les points qui lui appartiennent de l'échantillonnage.
SheldonCooper
0

number

sdgaw erzswer
la source