Para algunos algoritmos de reconstrucción de volumen en los que estoy trabajando, necesito detectar un número arbitrario de patrones circulares en datos de puntos 3D (provenientes de un dispositivo LIDAR). Los patrones se pueden orientar arbitrariamente en el espacio y se supone que se encuentran (aunque no perfectamente) en planos 2D delgados. Aquí hay un ejemplo con dos círculos en el mismo plano (aunque recuerde que este es un espacio 3d):
Intenté muchos enfoques ... el más simple (pero el que mejor ha funcionado hasta ahora) es la agrupación basada en conjuntos disjuntos del gráfico vecino más cercano. Esto funciona razonablemente bien cuando los patrones están muy separados, pero no tanto con círculos como los del ejemplo, muy cerca uno del otro.
Intenté con K-means, pero no funciona bien: sospecho que la disposición de los puntos circulares podría no ser adecuada para ello. Además, tengo el problema adicional de no saber de antemano el valor de K.
Intenté enfoques más complicados, basados en la detección de ciclos en el gráfico vecino más cercano, pero lo que obtuve fue demasiado frágil o computacionalmente costoso.
También leí sobre muchos temas relacionados (transformación de Hough, etc.) pero nada parece aplicarse perfectamente en este contexto específico. Cualquier idea o inspiración sería apreciada.