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):
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.
la source
Réponses:
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.
la source
la source