Para un algoritmo de reconstrucción de volúmenes en el que estoy trabajando, necesito detectar un número arbitrario de patrones circulares en datos de puntos 3D (procedentes de un dispositivo LIDAR). Los patrones pueden estar orientados 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 recuerda que este es un espacio 3d):
He probado muchos enfoques el más sencillo (pero el que mejor funciona hasta ahora) es la agrupación basada en conjuntos disjuntos del gráfico del 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 cercanos entre sí.
Probé con K-means, pero no lo hace bien: Sospecho que la disposición de puntos circulares no se adapta bien a ella. 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 del vecino más cercano, pero lo que obtuve era demasiado frágil o caro desde el punto de vista computacional.
También he leído sobre un montón de temas relacionados (transformada de Hough, etc) pero nada parece aplicarse perfectamente en este contexto específico. Cualquier idea o inspiración sería apreciada.