2017-06-26 2 views
-1

J'ai le même rectangle dans une forme non transformée et dans une forme en perspective. Les deux, les coordonnées de la forme non transformée ainsi que de la forme de perspective sont dans le système de coordonnées non transformé. Y at-il un moyen de reconstruire la matrice de transformation qui conduit à cette transformation?Calculer la transformation qui est nécessaire pour transformer un rectangle en forme de perspective

Je pense qu'il devrait être possible de le faire en résolvant les 4 équations données par les 4 coins, mais je ne sais pas par où commencer. // Editer: Il semble que je sois victime d'un problème xy ici. Toutes les réponses sont basées dans un environnement 3D. Mais j'ai un rectangle sur une image + je connais les dimensions réelles de ce rectangle. Ce que je dois savoir est comment transformer d'autres points connus sur l'image en perspective

Répondre

1

Notez que vous avez 8 paires de paramètres correspondants (x et y pour chaque point), et devez calculer 8 paramètres de la matrice en utilisant 8 équations

//four pairs of such equaions: 
x' = (A * x + B * y + C)/(G * x + H * y + 1.0) 
y' = (D * x + E * y + F)/(G * x + H * y + 1.0) 

La théorie de la découverte de la matrice de transformation perspective est décrite dans Paul Heckbert article.

C++ mise en oeuvre pourrait être trouvée dans antigrain library (fichier agg_trans_perspective.h)

+0

Cela semble être la solution que je recherche. Cela fonctionnera aussi pour ma question éditée, non? Je vais l'essayer. Je vous remercie! – Fuzzyma

+0

Oui, cela fonctionne, quand vous avez deux plans, les coordonnées du quadrilatère dans le premier plan, et les coordonnées du quadrangle dans le deuxième plan. – MBo

+0

Wow - J'ai implémenté cette solution et ça marche! Merci beaucoup! – Fuzzyma

0

Une façon consiste à brancher les valeurs données dans la matrice de transformation. Cela a le mérite d'être facile et efficace, mais cela ne vous aidera pas à le comprendre.

Pour comprendre la transformation, tracez un diagramme avec l'écran vertical et en regardant de haut en bas. Dessine l'oeil. La ligne de l'œil à l'écran devrait être perpendiculaire. Puis dessinez un point, quelque part hors de l'écran. Puis tracez une ligne de l'œil au point, en passant par l'écran.

Il s'agit alors d'un exercice de trigonométrie de niveau secondaire pour déterminer la projection du point sur l'écran.

+0

Je suis conscient de ce qu'est une projection et comment elle peut être imaginée. Mais ce n'était pas ma question. J'avais besoin de savoir comment calculer la matrice – Fuzzyma