9

Tengo una lista de puntos. Cada punto es una coordenada x y y (ambas son números enteros). Ahora estoy tratando de encontrar patrones conocidos, como líneas, arcos o círculos, sabiendo que los puntos no están perfectamente en el patrón.¿Cómo encontrar patrones (líneas, círculos, ...) de una lista de puntos?

¿Cuál es la mejor manera de hacerlo? No tengo muchas pistas para comenzar.

Editar: los puntos están ordenados. El usuario está dibujando algo y el programa debería detectar los mejores patrones. Por ejemplo, si se dibuja un triángulo, debería detectar tres líneas.

+0

¿Todos los puntos forman un solo patrón? ¿O está buscando patrones múltiples en la misma lista de puntos? – Nosredna

+0

Estoy buscando varios patrones en la misma lista – Burkhard

+0

Acabo de leer su edición. El usuario está dibujando ¿Este dibujo de píxeles tiene una lista de píxeles? ¿O está dibujando este segmento de línea y tiene una lista de puntos finales? – Nosredna

Respuesta

9

echar un vistazo a Hough Transformation. lo que haces es: transformas tu imagen en un espacio "circular" y luego solo tienes que encontrar píxeles claros.

la búsqueda de píxeles de luz en una imagen es muy fácil, basta con aplicar una ley de corte.

el número de regiones de píxeles claros es el número de círculos. puedes reconstruir su posición original en tu imagen aplicando la función inversa.

+0

+1. Hough transform es la solución habitual para este problema. – erickson

+0

+1. Usé esto en el pasado para la detección de bolas con un láser SICK y funcionó muy bien. – rofrankel

+0

Además, puede usar una variación de la Transformada Hough para detectar líneas, triángulos, etc. Puede ser un poco complicado calcular los detalles, pero se puede hacer. – rofrankel

3

El reconocedor clásico es una red neuronal. Las redes neuronales funcionan "bien" y requieren un entrenamiento de alguna manera.

Las técnicas y principios matemáticos redes neuronales subyacentes pueden transferirse (con las modificaciones apropiadas) para la mayoría de los reconocedores He leído sobre; por ejemplo, cadenas de Markov, modelos bayesianos.

1

Mientras usted lo limita a las formas básicas, se podría calcular una 'dirección' promedio de la carrera actual y crear una secuencia de golpes '' de estos.

Es probable que sea más fácil de reconocer una forma basada en esa información:

  • un círculo tiene un bastante constante derivada segunda
  • un 'siete' tiene un golpe a la derecha, seguido por un golpe a la inferior izquierda
  • ...
1

te miro a la distancia de un punto P a cada uno de los otros puntos, que si P es el centro de una ci Entonces, obtendrás algunos efectos estadísticos muy distintos.

Es posible que pueda invertir esto y buscar puntos que tengan estas propiedades. Como primer paso, algo así como la desviación estándar de las distancias podría funcionar y para encontrar la ubicación podría tomar la derivada de eso con respecto a la ubicación e intentar minimizarla. Una vez que encuentre un mínimo, intente y encuentre un conjunto de> 3 puntos equidistantes de él.

espero que va a necesitar algo más que la desviación estándar, algo que está menos interesado en los valores atípicos y más interesado en la formación de grumos.

Además, esto no le servirá de mucho para las líneas.

1

Desde que está recibiendo píxeles, y vienen en orden, se puede empezar por el control de la pendiente entre, por ejemplo, cada 10 píxeles dibujado y ver cómo la pendiente está cambiando. Las discontinuidades le dan cierta información.

Cuestiones relacionadas