Su primer pensamiento puede estar tratando de encontrar la rotación que mapea un objeto a otro, pero este es un tema muy complejo ... ¡y en realidad no es necesario! No estás preguntando cuál es la mejor forma de unir los dos, solo preguntas si son iguales o no.
Caracterice su modelo por una lista de todas las distancias intermedias. Ordene la lista por esa distancia. Ahora compare la lista para cada objeto. Deben ser idénticos, ya que las distancias intermedias no se ven afectadas por la traslación o la rotación.
tres cuestiones:
1) ¿Qué pasa si el número de puntos es grande, eso es una gran lista de pares (N * (N-1)/2). En este caso, puede optar por quedarse solo con los más largos, o incluso mejor, conservar los 1 o 2 más largos para cada vértice, de modo que cada parte de su modelo tenga alguna contribución.La eliminación de información como esta sin embargo cambia el problema para que sea probabilístico y no determinista.
2) Esto solo usa vértices para definir la forma, no los bordes. Esto puede estar bien (y en la práctica lo será), pero si espera tener figuras con vértices idénticos pero bordes de conexión diferentes. Si es así, primero prueba la similitud de vértices. Si eso pasa, asigne una etiqueta única a cada vértice utilizando esa distancia ordenada. El borde más largo tiene dos vértices. Para cada uno de ESOS vértices, encuentre el vértice con el borde más largo (restante). Rotula el primer vértice 0 y el siguiente vértice 1. Repite para otros vértices en orden, y tendrás etiquetas asignadas que son independientes del desplazamiento y la rotación. Ahora puede comparar las topologías de borde exactamente (compruebe que para cada borde en el objeto 1 entre dos vértices, hay un borde correspondiente entre los mismos dos vértices en el objeto 2) Nota: esto comienza a volverse realmente complejo si tiene múltiples distancias de punto de intersección idénticas y por lo tanto necesita comparaciones de desempate para hacer las asignaciones estables y únicas.
3) Existe la posibilidad de que dos figuras tengan poblaciones idénticas de longitud de borde, pero no son idénticas ... esto es cierto cuando un objeto es la imagen especular del otro. ¡Esto es bastante molesto de detectar! Una forma de hacerlo es usar cuatro puntos no coplanarios (quizás los que están etiquetados como 0 a 3 del paso anterior) y comparar la "destreza" del sistema de coordenadas que definen. Si la destreza no coincide, los objetos son imágenes espejo.
Tenga en cuenta que la lista de distancias le permite rechazar fácilmente objetos no idénticos. También le permite agregar aceptación "difusa" al permitir una cierta cantidad de error en los pedidos. Quizás tomar la diferencia de raíz cuadrada entre las dos listas como una "medida de similitud" funcionaría bien.
Editar: Parece que su problema es una nube de puntos sin bordes. ¡Entonces el molesto problema de la correspondencia de bordes (n. ° 2) ni siquiera se aplica y se puede ignorar! Sin embargo, debes tener cuidado con el problema de la imagen especular n. ° 3.
Conozco algunas formas de fuerza bruta para hacer esto, quiero ver si hay una manera más fácil también. – stevedbrown
Problema interesante. La forma en que resolvería el problema si solo estuviera buscando conjuntos idénticos sería encontrar los dos puntos más distantes y hacer que el eje x, luego encontrar el punto más distante de ese eje y hacer lo normal desde el eje x que apunta el eje y. Pero eso podría fallar fácilmente para conjuntos "similares". – Nosredna
@Nosredna: este tipo de normalización es la misma que encontré en un artículo sobre la visión del robot. La única diferencia es que se evalúa para cada par de puntos porque puede tener oclusiones. Una vez que se normaliza y obtiene todos los pares, puede cuantificar y evaluar la similitud, con una técnica de "conteo de votos" para acordar si todo coincide adecuadamente. –