¿Alguien sabe de algún algoritmo estándar para determinar una matriz de transformación afín basada en un conjunto de puntos conocidos en dos sistemas de coordenadas?Algoritmo de transformación afín
Respuesta
Las transformaciones de Affine están dadas por matrices de 2x3. Realizamos una transformación afín M tomando nuestra entrada 2D (xy), llevándola a un vector 3D (xy 1), y luego multiplicando (a la izquierda) por M.
Así que si tenemos tres puntos (x1) y1) (x2 y2) (x3 y3) mapeo de (U1 V1) (u2 v2) (U3 v3) entonces tenemos
[x1 x2 x3] [u1 u2 u3]
M [y1 y2 y3] = [v1 v2 v3].
[ 1 1 1]
, usted puede obtener M simplemente multiplicando a la derecha por la inversa de
[x1 x2 x3]
[y1 y2 y3]
[ 1 1 1].
Una matriz de 2x3 multiplicada a la derecha por una matriz de 3x3 nos da los 2x3 que queremos. (En realidad, no es necesario el inverso completo, pero si la matriz inversa está disponible, es fácil de usar.)
Se adapta fácilmente a otras dimensiones. Si tiene más de 3 puntos, es posible que desee un ajuste de mínimos cuadrados. Tendrás que volver a preguntar por eso, pero es un poco más difícil.
¿Qué tal la traducción? – jeff
La última columna de M da la traducción. Puede leer M como un mapa lineal (dado por la matriz de 2x2 a la izquierda) seguido de la traducción por la última columna. Pero no tienes que pensar en eso como dos transformaciones separadas. Para transformar un punto 2D, añada un 1 para convertirlo en un punto 3D y luego multiplique por M. El resultado es un vector 2D con partes lineales y de traducción aplicadas de una vez. – sigfpe
oh, está bien. Gracias ! – jeff
- 1. Convierta la matriz de transformación Affine 2D a la matriz de transformación afín 3D
- 2. ¿Dónde está la diferencia entre una "transformación" y una "transformación afín"?
- 3. Transformación afín de un paso para la rotación alrededor de un punto?
- 4. Algoritmo más rápido disponible para la transformación de distancia
- 5. Transformación entre dos conjuntos de puntos
- 6. transformación xsl
- 7. Variables de transformación Web.config
- 8. Python - lista de transformación
- 9. Transformación de imagen Java
- 10. Triangulación y transformación lineal directa
- 11. Multiplicar los tipos de transformación y matriz en Eigen
- 12. transformación de perspectiva con GD
- 13. Transformación de imágenes en OpenCV
- 14. transformación de datos con SQL
- 15. Transformación Lisp a C++
- 16. Scala transformación función
- 17. Transformación CSS3 no funciona
- 18. Transformación operacional en Meteor.js?
- 19. OpenGL ES 2.0 Algoritmos de transformación de vértices
- 20. ¿Implementación real de la transformación del eje medial?
- 21. Representación de matriz de transformación de radón
- 22. Trabajar con Web.Release.config (transformación Web.config)
- 23. transformación actual aplicada por lienzo
- 24. Transformación CSS3: rotar; en IE9
- 25. ¿Qué es una transformación AST?
- 26. Agregar un término afín a función de objetivo de regresión logística/SVM lineal
- 27. Obtenga la transformación de escalado de CGAffineTransform
- 28. Filtrado y transformación de listas de Python
- 29. imágenes de transformación de 4 puntos
- 30. Error en la transformación de web.config cuando no existe ningún valor para una transformación
Si recuerdo mis días en la universidad, ¿no debería ser capaz de hacer esto al configurar un conjunto de ecuaciones y resolver la transformación? Por cierto, ¿es esta tu tarea? – WhirlWind
¿No es esta una pregunta más para http://mathoverflow.net? – BalusC
@WhirlWind No, esta no es mi tarea. He encontrado una solución yo mismo, sin embargo, parece un poco "hacky" y no parece manejar algunos casos muy bien. He estado buscando un algoritmo estándar, pero hasta ahora no ha tenido éxito. Me preguntaba si alguien aquí sabe de uno. @BalusC ¿Lo es? ¿Debería preguntar allí en su lugar? Lo siento :) Soy un poco nuevo aquí. –