Estoy tratando de detectar automáticamente el eje de rotación en una nube de puntos 3d.Detectando el eje de rotación desde una nube de puntos
En otras palabras, si tomé una pequeña nube de puntos 3d, elegí un único eje de rotación y realicé varias copias de los puntos en diferentes ángulos de rotación, y luego obtuve una nube de puntos más grande.
La entrada a mi algoritmo es la nube de puntos más grande, y la salida deseada es el eje único de simetría. Y eventualmente voy a calcular las correspondencias entre puntos que son rotaciones entre sí.
El tamaño de la nube de puntos más grande es del orden de 100K puntos, y se desconoce el número de copias de rotación realizadas.
Los ángulos de rotación en mi caso tienen deltas constantes, pero no necesariamente abarcan 360 grados. Por ejemplo, podría tener 0, 20, 40, 60. O podría tener 0, 90, 180, 270. Pero no tendré 0, 13, 78, 212 (o si lo hago, no me importa para detectarlo).
Esto parece un problema de visión artificial, pero tengo problemas para encontrar la forma de encontrar el eje con precisión. La entrada generalmente estará muy limpia, cerca de la precisión de flotación.
No tengo la nube de puntos más pequeña original que se rotó/copió para hacer la nube de puntos más grande. Sé que los datos son sintéticos con muy poco ruido (en general, es el resultado de otro programa).
No podemos calcular fácilmente el número posible de puntos en la nube más pequeña, porque justo a lo largo del eje los puntos no están duplicados, desafortunadamente. Si supiéramos qué puntos están a lo largo del eje, podríamos encontrar posibles factores, pero ya habríamos resuelto el problema.
-
Gracias a todos por sus sugerencias. Parece que mi último algoritmo intentará crear grupos de puntos coincidentes utilizando una métrica k-nn. Cada camarilla dará un eje. Entonces puedo usar RANSAC para ajustar un eje a los resultados de todas las camarillas.
¿Tiene la nube de puntos inicial (pequeña) como referencia o no? Si no, este problema es probablemente indecidible con alguna certeza real. –
No tengo una respuesta completa, pero una heurística inicial es que la densidad del punto sería mayor cerca del eje. – tloflin
No es para muchas nubes de puntos. Los puntos dispuestos en el borde de un círculo plano girado alrededor del centro del círculo no presentarían ningún agrupamiento alrededor del eje. Lo mismo ocurre cuando la mayoría de los puntos no son simétricos con respecto al eje o están lejos del eje de rotación real. –