Analyse en composantes principales, changement de base et rotation

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
Karanga
Messages: 2
Enregistré le: 20 Oct 2011, 11:12

Analyse en composantes principales, changement de base et rotation

par Karanga » 20 Oct 2011, 12:11

Bonjour,

Je travaille actuellement sur un projet sous matlab dans lequel je cherche a appliquer une certaine rotation a un volume 3D binaire.
La nature de cette rotation doit dépendre de la forme de mon nuage de point dans cette image binaire.
En effet, plutôt que d'indiquer une rotation (alpha, beta, gamma) autour des axes (x,y,z) de mon image, je souhaite indiquer une rotation (alpha, beta, gamma) autour des 3 axes principaux du nuage de point et déterminer la rotation équivalente à exprimer dans le repère standard de l'image.

Pour donner un exemple. J'ai un patatoïde binaire, je détermine ses axes principaux, je calcule la matrice de rotation que je souhaiterais lui appliquer dans sa base, je calcule ensuite la matrice de rotation équivalente dans le repère (x,y,z) de l'image et je l'utilise dans ma fonction de rotation à appliquer sur l'image entière.

Voici les actions que j'ai effectuées pour cela :
1/ Centrer et normaliser mon nuage de points
2/ Calculer la matrice de corrélation
3/ Extraire les valeurs et vecteurs propres de cette matrice (obtention de la nouvelle base)
4/ Générer la matrice de rotation (alpha, beta, gamma) Mrot
5/ Générer la matrice de rotation équivalente dans la base (x,y,z) de mon image. Pour cela je multiplie Mrot par la matrice des valeurs propre et la matrice inverse des vecteurs propres (changement de base)
6/ J'applique la rotation sur mon image avec cette nouvelle matrice de rotation

Mes questions sont les suivantes :
- Cette démarche vous semble-t-elle correcte ? Si non, pourriez-vous m'éclairer sur ce qui ne va pas ?
- Je ne pense pas avoir pris en compte le centrage et la normalisation de mon nuage de points dans mon retour à la base xyz. Si c'est le cas, comment (et quand !) dois-je rétablir cela ?
- Avec ce que je viens de faire, je n'obtiens pas de bons résultats. Ma matrice de rotation finale a des coefficient quasi nuls et me fait du coup obtenir une image vide. J'en déduis que je ne calcule pas correctement ma nouvelle matrice de rotation. Qu'est ce qui cloche ?
Voici un exemple de résultat avec un nuage de points auquel je souhaite appliquer une rotation de 90 degrés autour de chacun de ses 3 axes principaux

Matrice de corrélations =

0.0007 -0.0001 -0.0003
-0.0001 0.0013 -0.0005
-0.0003 -0.0005 0.0008

eigenVectors =

0.6348 0.7707 0.0547
0.3939 -0.3838 0.8352
0.6647 -0.5087 -0.5472


eigenValues =

0.0002 0 0
0 0.0009 0
0 0 0.0016


rotationMatrix =

0.0000 1.0000 0.0000 0
1.0000 0.0000 -0.0000 0
-0.0000 0.0000 -1.0000 0
0 0 0 1.0000


rotationMatrix2 =

0.0004 -0.0004 0.0008 0
0.0001 0.0002 0.0000 0
-0.0011 0.0008 0.0009 0
0 0 0 1.0000

Avec :
rotationMatrix2 = rotationMatrix(1:3,1:3) * eigenValues * inv(eigenVectors);
rotationMatrix2 = [rotationMatrix2 [0;0;0] ; 0 0 0 1 ]

Merci d'avance pour votre aide !
Cordialement,
Pierre



Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 13:39

par Dlzlogic » 20 Oct 2011, 15:47

Bonjour,
Ceci est un problème très intéressant, mais Matlab, je connais pas.

Je l'ai résolu une première fois, mais le contexte était assez restrictif.
On disposat d'une série de point 3D à un instant t0 et la même série à un instant t1. La disposition de ces points était régulière 5x5 et la surface qu'ils définissaient était à peu près plane. Le but de l'opération était de mesurer les déformations par rapport au pseudo-plan d'origine. Les deux systèmes d'axe, temps t0 et t1, était indépendants et sans liens possible.
Voila la méthode que j'ai adoptée : j'ai pris un système d'axe (x,y,z) standard, c'est à dire XOY horizontal, Z vertical, et tout ça orthogonal. Chacun des 25 points au temps t0 avait donc une image dans le maillage 5x5 régulier et horizontal. Le système de transformation comporte 12 inconnues. Pour simplifier, j'ai adopté un "plan moyen", pas trop bête.
J'ai fait le même opération pour la série au temps t1, il en résulte que dans le système de référence, j'avais 2 séries de ponts comparables 2 à 2.

Je l'ai abordé aussi sous un autre aspect : Soit un nuage de points en 3D. On sait que ces points définissent une surface qui, en tout point, est strictement continue et monotone. Le but étant de trouver une fonction f(x,y,z), telle que l'on puisse écrire x=g(y,z) et y=h(x,z) et z=k(x,y). En d'autres termes, quelque soient un point connu par 2 coordonnées, déterminer la troisième. Contrairement au
cas précédent, et sous certaines conditions de possibilité, cette méthode est tout à fait générale.

Je n'ai pas vraiment répondu à votre question, mais les mathématiques théoriques sont trop loin pour moi, mais je pense que votre problème est réalisable, mais il faudra que je relise tout avec une très grande attention.

Karanga
Messages: 2
Enregistré le: 20 Oct 2011, 11:12

par Karanga » 20 Oct 2011, 17:54

Oui c'est vrai que ce type de problème est très intéressant et divertissant !
Je me permets de répondre vite car je crois avoir trouvé mon problème grâce à des amis qui m'ont fait remarquer que je n'effectuais pas un changement de base correct sur ma matrice de rotation !

Il s'agissait de déterminer la nouvelle matrice de rotation Mrot de la manière suivante :
Mrot' = B' Mrot B
avec B la matrice des vecteurs propres.

Mes résultats semblent dorénavant cohérents, il me reste à les vérifier.

Merci quand même pour votre aide !

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 66 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite