Rotation image (matrice) ?

albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008 - 20 déc. 2005 à 14:09
albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008 - 12 janv. 2006 à 21:52
Bonjour,





voilà, je suis sur un petit projet. Il consite a charger une image en .RAW (binaire) et de l'afficher sous diéfrente forme.





Donc, je charge cette image .RAW (128x128) je stock chaque octet dans un tableau de 128x128 (c est ma matrice)





Avec Gtk j'affiche donc mon ma matrice, et cella m'affiche mon image .raw





j'ai déja fait quelque truc, comme la symétrie (vertical,horizontal etc..)





mais je bloque sur la Rotation :S





je sais que pour faire une rotation il faut cette formule :





X' = cos(alpha) * X + (-sin(alpha) * Y);


X' = sin(alpha) * X + (cos(alpha) * Y);








mais je sais comment mettre ca en pratique .....





si quelqu'un peut me donner un coup de main?





merci
A voir également:

9 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
20 déc. 2005 à 17:45
Tu auras besoin d'une seconde matrice (c'est plus simple) pour stocker
le résultat. Sinon je vois pas ou est le pb, tu prends chaques pixel de
ton image, tu lui appliques la transformation, et tu stokes le point
final dans la matrice résultat. Le pb est qu'il va rester des points
blancs.



Donc peut etre qu'il vaut mieux prendre le pb dans le sens inverse. Tu
prends chaque pixel de la matrice résultat, tu regardes quels pixels
doit aller à cette place. Donc a partir de la formule, tu exprimes X et
Y en fonction et X' et Y'. En fait ca revient a faire la rotation dans
le sens inverse.



Bon en première approximation ca devrait aller. Pour avoir un meilleur
résultat, comme X et Y ne seront pas des entiers, tu peux faire une
interpolation linéaire.
0
albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008
20 déc. 2005 à 19:50
d'abord merci beacoup d'aovoir répondu,



J'ai pensé faire comme tu m'as dit , mais le probleme, c'est que quand
je calcul X' ou Y' je me retrouve avec des chiffre negatife :S



donc je comprend pas comment stocker ce nouveau pt dans ma matrice resultat



Dison que j'ai ma matrice 5 x 5 avec mon dessin (tres grossierement c ets jste pour s imaginer)





1 2 3 4 5

1 XOOXX

2 OXXOX

3 OXXOX

4 XOOXX

5 XXXXX



et Ma Matrice Resultat



1 2 3 4 5


1 XXXXX


2 XXXXX


3 XXXXX


4 XXXXX


5 XXXXX



Donc je prend mon pixel qui se trouve dans 1,1



X' = cos(90) * 1 + (-sin(90) * 1);

Y' = sin(90) * 1 + (cos(90) * 1);



X' = -1

Y' = 1



la comment je fait pour mettre ce point puisque il sera en -1 ?





merci
0
BunoCS Messages postés 15463 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 29 février 2024 103
21 déc. 2005 à 09:51
Attention... Avec les transformations géométriques, tu ne sais jamais si le point transformé appartient à l'image finale. Du coup, tu auras des zones "indéfinies". Le mieux c'est de partir des points de l'image résultat et d'appliquer la transformation inverse.

Dans ton cas, il faut vérifier si ton point calculé appartient bien à l'image

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
21 déc. 2005 à 10:20
Oui bruno, ce que j'avais dis en gros :), mais quand tu fais une
rotation ton image résultat doit etre plus grosse puisque justement
elle est tournée :). La hauteur de ton image doit etre égale à la
hauteur de l'ancienne plus 2 fois sin(angle_de_rotation) * longueur de
l'ancienne. Pour la nouvelle largeur je te laisse faire.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008
21 déc. 2005 à 19:07
aaaaaa



attand la je commance a plus rien comprendre :S



comment ca elle devien 2 fois plus grosse? je la tourne l'image je vois pas commetn elle peut grandire :S





et oui je sais si je fait comme j'avais moi en cherchant X' et Y' j'auai des blanc



mais pour trouve X je vais devoir faire la matrice inverse et la je sais pas comment on fait---
0
BunoCS Messages postés 15463 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 29 février 2024 103
21 déc. 2005 à 20:38
La matrice inverse d'une rotation d'angle alpha est tout simplement la matrice de rotation d'angle -alpha

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008
21 déc. 2005 à 21:04
ok,ok merci,



donc maintenant que j'ai les X et Y a paritr des X' et Y'



je fait un truc du style



mCosinus := Cos(-90.0);

mSinus := Sin(-90.0);



//Modif Matrice

loop de la hauteur de ma matrice //128x128

loop de la longeur de ma matrice //128x128



X := J*mCosinus + I*(-mSinus);

Y := J*Msinus + I*Mcosinus;



MatriceResultat(I,J):= MatriceImage(X,Y);



end loop;

end looP;



Mais la le probleme c est encore que j'aurai surement des X ou Y négatif :(

et donc je fait comment pour acceder a cette case negative? (j ai
essayé de faire la valeur absolu mais au final ma matrice resultat est
identique a l'original...)





merci
0
BunoCS Messages postés 15463 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 29 février 2024 103
22 déc. 2005 à 17:39
Laisse tomber les valeurs "incorrectes". Il faut un test:
- si coordonnées obtenues appartiennent à l'image alors prendre la couleur correspondante
- sinon, mettre en noir par exemple

Buno
0
albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008
12 janv. 2006 à 21:52
Oki,



bon voila j'ai reussi a faire ma rotation, et maitenant je comprend pourquoi il fallait agrandire la Matrice resultat :)

"

La hauteur de ton image doit etre égale à la hauteur de l'ancienne plus 2 fois sin(angle_de_rotation) * longueur de l'ancienne"



j'ai essayé, mais ca me donne beacoup trop haut



comment as-tu fait pour savoir de combien agrandir?





merci
0
Rejoignez-nous