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

Traitement d'images Discussion :

Rotation d'image


Sujet :

Traitement d'images

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 100
    Points : 50
    Points
    50
    Par défaut Rotation d'image
    Bonjour,
    J'ai une image bitmap 24 bits sur laquelle je dois faire des traitements d'image.
    Je dois, entre autre, pouvoir faire pivoter l'image de 90, 180 et 270 degrés. Mais je ne trouve pas !
    Visiblement, je dois commencer par changer les indices des boucles for, du style :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    img->pic[i][j][k] = img_ori->pic[j][i][k];
    mais ça ne fonctionne pas.
    Je devais aussi faire une rotation miroir dont voici le code (qui fonctionne):
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    void miroir(picture *img, picture *img_ori)
    {
        int i, j, k;
     
        for(i=0; i<img_ori->hauteur; i++)
        {
            for(j=0; j<img_ori->largeur; j++)
            {
                for(k=0; k<3; k++)
                {
                    img->pic[i][j][k] = img_ori->pic[i][img_ori->largeur-j-1][k];
                }
            }
        }
        return;
    }

    Quelqu'un peut-il m'aider ?

    Merci.

    Bien à vous.

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par paesportcomputing Voir le message
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    img->pic[i][j][k] = img_ori->pic[j][i][k];
    Ca devrait marcher, donc il doit y avoir une erreur ailleurs.



    Citation Envoyé par paesportcomputing Voir le message
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    void miroir(picture *img, picture *img_ori)
    {
        int i, j, k;
     
        for(i=0; i<img_ori->hauteur; i++)
        {
            for(j=0; j<img_ori->largeur; j++)
            {
                for(k=0; k<3; k++)
                {
                    img->pic[i][j][k] = img_ori->pic[i][img_ori->largeur-j-1][k];
                }
            }
        }
        return;
    }
    Oui ça fonctionne, mais toutes les accolades des boucles for sont inutiles.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 100
    Points : 50
    Points
    50
    Par défaut
    Bonjour et merci pour ton aide,

    Je ne sais pas si ça devrait fonctionner comme ça mais chez moi, ça ne fonctionne pas.
    De plus, je dois pouvoir faire tourner l'image de 90, 180 et 270 degrés, donc, ce code ne suffit pas pour moi !

    Concernant le deuxième code que j'ai mis (les 3 boucles for), oui ça fonctionne, j'avais mis ce code pour illustrer comment je 'travaillais'.
    Il est utilisé pour faire un effet miroir.

    Bàt.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    En traitement d'images pour éviter les "trous" (effet de moirage) dans une rotation, on part de l'image FINALE et on cherche le pixel correspondant dans l'image INITIALE


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    pour i = 0 jusqu'à dimY finale
       pour j = 0 jusqu'à dimX finale
    
           calcul des (x,y) en fonction de (i,j) avec la rotation d'angle -Alpha
    
           pix (j,i) (image finale)  = pix (x, y)  (image intiale)
    
       fin pour
    fin pour
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 100
    Points : 50
    Points
    50
    Par défaut
    Bonjour et merci.

    Qu'entendez-vous par : calcul des (x,y) en fonction de (i,j) avec la rotation d'angle -Alpha ?
    Quel est le peut être le calcul ?

    Bàv.

    Marc

  6. #6
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    En traitement d'images pour éviter les "trous" (effet de moirage) dans une rotation, on part de l'image FINALE et on cherche le pixel correspondant dans l'image INITIALE


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    pour i = 0 jusqu'à dimY finale
       pour j = 0 jusqu'à dimX finale
    
           calcul des (x,y) en fonction de (i,j) avec la rotation d'angle -Alpha
    
           pix (j,i) (image finale)  = pix (x, y)  (image intiale)
    
       fin pour
    fin pour
    +1, mais là on parle de rotation à coup de 90°, donc il n'y aura aucune perte d'information.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 100
    Points : 50
    Points
    50
    Par défaut
    Oups, OK mais ça ne m'éclaircit pas !

    Qu'entendez-vous par : calcul des (x,y) en fonction de (i,j) avec la rotation d'angle -Alpha ?
    Quel est le peut être le calcul ?

    Bàv.

    Marc

  8. #8
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void rotation90()
    {
    ...
    }
     
    void rotation180()
    {
    rotation90();rotation90();
    }
     
    void rotation270()
    {
    rotation90();rotation90();rotation90();
    }
    Il ne reste plus qu'à définir rotation90().

    Non, ne me remercie pas.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  9. #9
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Ca devrait marcher, donc il doit y avoir une erreur ailleurs.
    Prends un exemple 2x2 (oublie la composante couleur) et fais tourner ton code à la main.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par paesportcomputing Voir le message
    Qu'entendez-vous par : calcul des (x,y) en fonction de (i,j) avec la rotation d'angle -Alpha ?
    Quel est le peut être le calcul ?
    On se demande bien quelles peuvent être les équations d'une rotation d'angle alpha centrée sur le point C(xc, yc) pour un point P de coordonnées (x,y) ......


    Si tu n'es pas capable de ça, je ne vois pas très bien ce que tu fais à faire du traitement d'image...


    Allez, un petit effort stp...


    Et en note :

    rotation 180 y => -y x => x
    et le reste à l'avenant pour les multiples de 90 (dont 270)
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  11. #11
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    A ta place, je passerais par les rotations complexes: z'=exp(i Alpha)z +z0

    Mais connais-tu la géométrie complexe? Et les nombres complexes?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  12. #12
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 100
    Points : 50
    Points
    50
    Par défaut
    Merci à tous,

    J'ai trouvé la solution sans passer par des calculs. J'avais 'simplement' fait une erreur dans le changement de taille de l'image !

    Bàv.

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

Discussions similaires

  1. rotation d'images
    Par philippe du web dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/05/2007, 16h01
  2. Rotation d'image dans un état
    Par Papapetch dans le forum IHM
    Réponses: 3
    Dernier message: 10/06/2006, 18h02
  3. Rotation d'image (matrice)
    Par AsmBoy dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 16/01/2006, 07h49
  4. Faire une rotation d'image
    Par sozie9372 dans le forum 2D
    Réponses: 6
    Dernier message: 30/11/2005, 22h40
  5. [Image]Rotation d'image
    Par psychomatt dans le forum 2D
    Réponses: 6
    Dernier message: 16/12/2004, 20h18

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