bounjour
comment faire une rotation d'une image a partir de son centre dans matlab
merci
Version imprimable
bounjour
comment faire une rotation d'une image a partir de son centre dans matlab
merci
Salut,
si tu as accès à la toolbox traitement d'images :
Code:help imrotate
bounjour
j'ai vue le help imrotate
mais c'est pas specifie comment faire la rotation a partir d'un point voulue
En même temps, tu avais dit que tu voulais faire la rotation en fonction du centre de l'image...
Je pense que tu peux facilement le faire en mettant le point voulue au centre de ton image et ensuite tu utilises imrotate. Pour cela il suffit d'ajouter des lignes et/ou des colonnes de zéros à ta matrice image. Par contre la difficulté c'est de savoir ou rajouter ces lignes et colonnes (en haut, en bas, à droite à gauche) en fonction du nouveau centre...
bounjour
comment mettre le point voulu au centre de l'image dans matlab
Un exemple :
Si ton image de départ est :
et que tu veux effectuer une rotation avec comme centre le point de coordonnées (1,2). Pour le placer au centre de l'image, il faut ajouter 2 lignes et 2 colonnes au début de la matrice :Code:
1
2
3
4
5
6
7 >> A = [1:5;6:10;11:15] A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Ensuite tu peux utiliser imrotate pour faire la rotation.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 Anew = A; %on ajoute 2 lignes : Anew = [zeros(2,size(Anew,2));Anew]; % on ajoute 2 colonnes : Anew = [zeros(size(Anew,1),2) Anew] Anew = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 0 0 6 7 8 9 10 0 0 11 12 13 14 15
Le nombre de lignes et de colonnes à ajouter dépend de la position de ton point par rapport au centre de ta matrice.
bounjour
j'ai essayer le code propose avec une image 256*256 mais pour mon programme je voudrais une autre methode
voila pour une image 256*256 je represente cette image sur un espace plus grand comme indiquee
en variant l'angle de rotation u,je voudrais que la rotation se fasse du centre de l'image afin de s'assurer que lorsque j'applique la transformation inverse l'image returne a son originCode:
1
2
3
4
5
6
7
8 I=imread('cameraman.tif') Trotatio=[cos(u) sin(u) 0; -sin(u) cos(u) 0; 0 0 1;]; Ttranslatio=[1 0 0; 0 1 0; tx ty 1;]; T2=Trotatio*Ttranslatio; tfor = maketform('affine', T2); A = imtransform(I,tfor,'bilinear','XData',[-60 316],'YData',[-60 316]) imshow(A)
salut,
essaie d'utiliser la composition de transformations suivantes :
Ça te permet de spécifier une rotation par un angle u autour du centre donne par tx et ty. La transformation inverse est donnée par inv(transfo).Code:
1
2
3
4 t1 = [1 0 0; 0 1 0; -tx -ty 1;]; rot = [cos(u) sin(u) 0; -sin(u) cos(u) 0; 0 0 1;]; t2 = [1 0 0; 0 1 0; tx ty 1;]; transfo = t2*rot*t1;
A+
bounjour
voila j'ai essayer le code mais c'est pas ce que je voudrais
je doit faire de recalage d'image par transformation rigid donc rotation et translation en 2d
pour assurer que l'optimiseure de recalage trouve la bonne transformation je doit verifier que la transformation apllique a une image par exemple u=15 tx= 13 ty=13 , en aplliquent la transformation inverse u=-15
tx=-13
ty=-13
je trouve l'origine de l'image
avec les code presente l'image n'est pas capture dans l'espace de matlab d'ou l'orsque on applique la transformlation inverse l'image est incomplete
salut,
je pense que ton probleme vient du fait que tu utilise un espace de reference qui est celui de l'image d'origine. Tu peux specifier a la fonction imtransform quelles sont les coordonnees des pixels d'entree en utilisant les parametres nommes 'UData' et 'VData'. Tu peux aussi specifier dans quelle plage tu veux calculer ton image resultat.
Sinon, le code que je t'ai donne plus haut correspond a une rotation autour d'un centre donne. Pour la rotation dans le sens inverse, il faut juste changer le signe de l'angle. Pour une transformation rigide, il faut multiplier les matrices de transformation associees.
A+