Detecta patrones circulares en datos de nube de puntos


10

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):

ingrese la descripción de la imagen aquí

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.


Una pregunta más simple: ¿cómo haría para detectar segmentos de línea en datos de dos dimensiones?
charles.y.zheng

"... como los de los ejemplos"? Que ejemplos ¿Puedes agregar un enlace?
onestop

La transformación de Hough es la opción obvia. Debería funcionar bien.
whuber

Mientras tanto, obtuve suficiente reputación para agregar el ejemplo de imagen al que me refería.
cjauvin

3
Este no es un problema de agrupamiento. En estadística, los "grupos" consisten en conjuntos de objetos que están más cerca uno del otro que otros objetos. La cercanía no captura la circularidad: es por eso que ni K-means ni ningún otro algoritmo de agrupamiento funcionará. Por esta razón, esta pregunta probablemente encaja mejor en el procesamiento de imágenes o en los sitios SIG, donde puede encontrar algunos expertos en este tema.
Whuber

Respuestas:


9

Una transformación Hough generalizada es exactamente lo que quieres. La dificultad es hacerlo de manera eficiente, porque el espacio de los círculos en 3D tiene seis dimensiones (tres para el centro, dos para orientar el plano, una para el radio). Esto parece descartar un cálculo directo.

Una posibilidad es acercarse sigilosamente al resultado a través de una secuencia de transformaciones de Hough más simples. Por ejemplo, podría comenzar con la transformación de Hough (habitual) para detectar subconjuntos planos: estos requieren solo una cuadrícula 3D para el cálculo. Para cada subconjunto plano detectado, corte los puntos originales a lo largo de ese plano y realice una transformación de Hough generalizada para la detección de círculos. Esto debería funcionar bien siempre que la imagen original no tenga muchos puntos coplanares (aparte de los formados por los círculos) que podrían ahogar la señal generada por los círculos.

Si los tamaños de los círculos tienen un límite superior predeterminado, potencialmente puede guardar una gran cantidad de cálculos: en lugar de mirar todos los pares o triples de puntos en la imagen original, puede enfocarse en pares o triples dentro de un vecindario acotado de cada punto.


Intentaría combinar todos los enfoques sugeridos: primer grupo basado solo en la distancia, como se discutió en el póster original, que le dará grupos que pueden consistir en múltiples círculos. Luego use Hough para detectar subconjuntos planos dentro de cada grupo. Luego, dentro de cada subconjunto plano, use nuevamente Hough para encontrar círculos. Si este último paso es costoso, es posible que pueda realizar un cortocircuito efectivo: intente algunos triples, adivine un círculo y vea si una fracción sustancial de los puntos en su subconjunto se encuentra muy cerca de ese círculo. Si es así, registre ese círculo y elimine todos esos puntos, luego continúe.
Erik P.

3
Esta última idea se llama RANSAC y probablemente podría usarse por sí misma, especialmente si el número de círculos por imagen es pequeño.
SheldonCooper

¡Gracias por las ideas iluminadoras! La transformación de Hough de varios pasos me parece la solución más poderosa y general, pero RANSAC realmente parece más fácil de implementar y puede ser suficiente en mi contexto. Sin embargo, un problema que noté rápidamente es el caso en el que tiene patrones de tamaños desequilibrados, lo que obviamente sesga el muestreo hacia objetos más grandes. ¿Alguna idea sobre este problema?
cjauvin

Una vez que detecte el círculo más grande, elimine todos los puntos que le pertenecen del muestreo.
SheldonCooper

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.