Bonjour,
Je dois faire pivoter une image dans un graphe "surf", comment dois-je m'y prendre sur Matlab? En d'autres mots, mon image est inclinée et j'aimerais par exemple que ses côtés soient parallèles aux axes x et y.
Bonjour,
Je dois faire pivoter une image dans un graphe "surf", comment dois-je m'y prendre sur Matlab? En d'autres mots, mon image est inclinée et j'aimerais par exemple que ses côtés soient parallèles aux axes x et y.
Tu veux le faire "à la main" ou en ligne de commande ?
A la main : il y a un joli bouton normalement au-dessus du graphe (Rotate 3D)
En ligne de commande (plus précis mais il faut trouver les bons paramètres) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part help rotate
A la main ça me va car les paramètres ne seront pas constants d'une image à l'autre.
Mais Rotate 3D sert à modifier la vue de l'objet et ce n'est pas ce qui m'intéresse.
Pour une vue donnée, je dois bouger l'objet image sans bouger les axes. Ce serait bien de pouvoir prendre les coordonnées de deux points sur l'image et de les modifier manuellement et que le programme recalcule de nouvelles coordonnées pour tous les autres points de l'image. Je ne sais pas si c'est faisable ou s'il y a une autre méthode.
Dans ce cas, tu peux utiliser GINPUT pour récupérer les coordonnées de tes points et il te suffit ensuite de coder le calcul de rotation de ton image et de la réafficher correctement![]()
Aaaaaaaaaaah ! Je n'avais rien compris(je le sentais un peu à vrai dire).
Ce que tu cherches c'est peut-être IMROTATE alors ?
En effet Caro-Line IMROTATE me permet de faire ce que je veux mais maintenant je suis perdue dans la matrice résultat.
Ci-dessus c'est le code que j'ai fait et qui fonctionne. Mon problème maintenant est de me retrouver dans la matrice de résultat. J'aimerais enlever des points de la matrice RotationFig qui correspondent à une valeur inférieure à un z1 donné. Est-ce que quelqu'un peut m'aider à y voir plus clair?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 x = Cor3(:,1); y = Cor3(:,2); [x1,y1] = meshgrid (linspace (min(x)+0.001,max(x)-0.001,500), linspace ( min(y)+0.001, max(y)-0.001, 500)); % Pour pouvoir utiliser la fonction 'surf' z1 = griddata(x,y,Moy,x1,y1); Fig = [x1 y1 z1]; RotationFig = imrotate (Fig, 25);
Vu que personne ne répond, je vais poser une autre question:
x1, y1 et z1 sont des vecteurs colonne. La fonction IMROTATE transforme les vecteurs pour faire une image en pixels, ce que je ne veux pas. Y'a t'il une autre manière d'utiliser cette fonction pour garder 3 vecteurs après rotation?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Fig = [x1 y1 z1]; RotationFig = imrotate (Fig, 25);
Tu devrais chercher des informations sur ce qu'est une matrice de passage ou de transformation... (dans le forum algorithme par exemple)
Voir aussi la documentation : Transforming Objects
Merci Dut mais en fait j'ai oublié de clore ce sujet. J'ai complètement changé ma méthode de travail et je n'ai plus de problème à ce sujet.
Pour faire pivoter tous les points du graphe, il suffit de passer en coordonnées polaires avec CART2POL, de modifier l'angle et de repasser en coordonnées cartésiennes avec POL2CART. Je ne sais pas pourquoi je n'y ai pas pensé plus tôt!![]()
Partager