IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Moteurs 3D Discussion :

Manipulation de matrice de transformation


Sujet :

Moteurs 3D

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 2
    Points : 5
    Points
    5
    Par défaut Manipulation de matrice de transformation
    Bonjour

    Je souhaiterai manipuler des images de façon à extirper d'une image d'une autre grâce à une matrice de transformation.

    Nom : Capture-2.png
Affichages : 386
Taille : 526,2 Ko

    Voici ce que j'ai effectuer. Je place 4 points autour de la zone que je cherche à extraire sur l'image de gauche G. Et j'obtient l'image de droite D avec une matrice de transformation que j'ai passé dans le CSS avec la propriété suivante.

    matrix3d(1.5456325781948308,1.6561987730956724,0,0.0012239101773909712,-0.4663849104791486,2.218793881308064,0,0.0009095626603861196,0,0,1,0,12.247969030166722,-17.754955132517754,0,0.9951722722714726)

    Voici la matrice M de transformation 4x4

    [[1.5456325781948308, 1.6561987730956724, 0, 0.0012239101773909712],
    [-0.4663849104791486, 2.218793881308064, 0, 0.0009095626603861196],
    [0, 0, 1, 0],
    [12.247969030166722, -17.754955132517754, 0, 0.9951722722714726]]

    Je cherche à obtenir chaque coordonnée de pixel en passant par le calcul de l'image D vers l'image G.
    Exemple, je demande le pixel (0,0) sur l'image D alors j'obtient la coordonnée (53,193) sur l'image source G.

    Pour cela j'applique un calcul qui ne fonctionne visiblement pas. Soit P le point de l'image D et P' le point sur l'image G:

    M * P = P'

    P est définie tel que :

    [[x],
    [y],
    [0],
    [1]]

    Un exemple pour (x, y) = (0,0)

    [[1.5456325781948308, 1.6561987730956724, 0, 0.0012239101773909712],
    [-0.4663849104791486, 2.218793881308064, 0, 0.0009095626603861196],
    [0, 0, 1, 0],
    [12.247969030166722, -17.754955132517754, 0, 0.9951722722714726]]

    X

    [[0],
    [0],
    [0],
    [1]]

    =

    [[0.0012239101773909712],
    [0.0009095626603861196],
    [0],
    [0.9951722722714726]]

    Les deux première composante de P' ne me semble pas cohérente, le résultat est bien trop petit comparé à la position sur le screen.

    Pouvez vous m'aidez à trouver le calcul correcte permettant de faire la transformation d'une coordonnée de l'image D vers G s'il vous plait?

    Cordialement
    MatrixCuriosity

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 225
    Points : 10 174
    Points
    10 174
    Par défaut
    Normalement en 3D , on fait les transformations sur les points (et les textures coordonnées ) et après en dessine les pixels et pas le tout en même temps

    Après je ne connaît pas forcément les calculs en détails , vu que dans les deux cas j'ai juste regardé sur le net (plus exactement regardé les codes sources) qui me semble en général juste des multiplications de matrices.
    Ensuite c'est après qu'on dessine les pixels.
    Donc la question est que veux tu faire ? refaires ces calculs ou un résultat tout fait (des fonctions de matrice pour la projection) te va ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    J'ai trouvé ma réponse.

    L'idée était de faire une multiplication de ma matrice pour chaque pixel qui compose l'image final et de trouver sa coordonnées sur l'image de base. Effectivement il s'agit d'un simple calcul de texture 2D, et pas 3D dont on a pas besoin forcement de matrice 4x4 j'ai abandonner cette solution pour me concentrer sur une autre.

    J'ai suivi ce lien https://math.stackexchange.com/a/339033

    En réalité les étapes nécessaire à la fabrication de la matrice sont assez simple à partir de quatre points. La seul différence, c'est qu'il faudra inverser la matrice C qui se trouve dans ce guide, pour pouvoir calculer les coordonnées de l'image D vers G.

    Voila en espérant en avoir aider d'autre par la suite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter une matrice de transformation
    Par Ekinoks dans le forum OpenGL
    Réponses: 9
    Dernier message: 20/11/2006, 19h32
  2. Envoyer la matrice de transformation
    Par Ekinoks dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/11/2006, 10h10
  3. Moteur 2D: Pb de calcul de Matrice de transformation
    Par themadmax dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 29/06/2006, 11h22
  4. Fonctions manipulant des matrices
    Par panda31 dans le forum C
    Réponses: 24
    Dernier message: 14/06/2006, 10h28
  5. Manipulation de matrices.
    Par TeKa dans le forum C
    Réponses: 28
    Dernier message: 16/11/2005, 15h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo