2012-06-06 17 views
6

Estoy trabajando en una tarea tratando de transformar un croquis 2D con pliegues plegables en una representación 3D completa. Líneas rojas serán valles y montañas azules/tapas. Me gustaría calcular las coordenadas transformadas/asignadas {P1 '... P8'}. No he encontrado ningún buen software que pueda hacer esto de forma automática, pero agradecería sugerencias.Plegado de una hoja de papel (Computer Vision)

Folding Pattern

  • un - ángulo
  • P plegable - coordinar
  • E - elemento
  • línea azul - montaña plegada
  • línea roja - plegado valle

Folded Con a1 = a2 = a3 = 90 ° (pi/2 rad) (ángulo de doblado) y flechas como normales surfare

que estoy usando Matlab pero estoy en busca de algoritmos generales para resolver este problema punto

Suponiendo P0 se fija en Origo y el elemento E1 no va a cambiar sus coordenadas, ¿cómo debería describir mejor la transformación? ¿Debo usar coordenadas homogéneas o no homogéneas, coordenadas polares?

Por ejemplo, el punto P8 depende de las otras coordenadas que dependen de los ángulos.

Supongo que podría usar algún tipo de matriz de adyacencia para los Puntos (Nodos) y/o una matriz que empareje cada elemento con sus Nodos. E.g: [E1 P0 P4 P5 P1; E2 P1 P5 P6 P2; ...]

La transformación para cada coordenada es transformación + rotación y la transformación depende de la coordenada/elemento. Pero se pone complicado con varios elementos conectados ...

¿Cómo puedo transformar perfectamente un "papel" 2D con patrones plegables en coordenadas 3D?

+0

¿Se le garantiza que el papel no se topará entre sí? Además, ¿cuál es el orden de plegado (la rotación NO es conmutativa)? – tskuzzy

Respuesta

1

puede recorrer cada doblez plegado y calcular la transformación de todos los píxeles que se encuentran a un lado del pliegue.

puede usar una matriz de transformación para calcular las coordenadas de los puntos doblados. echar un vistazo a the wikipedia article describing transformation matrix.

primero, traduzca todos los puntos para que el pliegue esté alineado con un eje, luego gire todos los puntos en un lado del pliegue de acuerdo con la dirección del pliegue. a continuación, puede invertir la primera traducción para que la figura vuelva a su posición original. Repita con el proceso con el siguiente pliegue, hasta que haya plegado por completo la figura.

usando matlab, el cálculo de matriz es bastante fácil de preformar.

+0

Sonido algo que tenía en mente! Estoy usando la fórmula de rotación de Rodrigues. Sin embargo, cuando el patrón de plegado se vuelve más complicado, necesito clasificar qué puntos doblar, creo. ¿Plegar a todos los demás sería un desastre? Echa un vistazo a esta foto. ¿Qué piensas? [link] http://i49.tinypic.com/2ewfozq.png) – POHU

+0

¡eck! ¡Qué patrón de plegado! para ese patrón, tendrás el problema de que el plegado mueve otros puntos que los que estás plegando. presionar claramente en la línea azul arrastrará algunos puntos a lo largo de las líneas rojas ... y eso es mucho más complicado de lo que describí. –

+0

Ha sí! Veo este tipo de problema como muy avanzado. ¿Crees que es posible en circunstancias razonables escribir un algoritmo que funcione para este tipo de patrón, pero también para un patrón arbitrario? Primer día en el trabajo, suerte que jeje ... – POHU

1

Puede utilizar técnicas utilizadas para describir robots con múltiples uniones rotacionales; de lo que su problema podría describirse como un problema forward kinematics.Otra lectura interesante podría ser this.

0

Simplemente desea aplicar una transformación lineal a cada punto en un lado de la línea.

La transformación es una rotación alrededor de un eje, cuya matriz de transformación es given by

enter image description here

Dado que el eje no está centrada sobre el origen, tendrá que aplicar primero una traducción al origen, a continuación, hacer la rotación, luego traducir de nuevo.

Cuestiones relacionadas