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 :

Algorithme de rotation


Sujet :

Traitement d'images

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Algorithme de rotation
    Bonjour,
    je débute en programmation et plus particulièrement en java.

    J'ai une image trouvée sur internet (peu importe la source) que je transforme en un tableau de pixel.
    Code java : 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
        public static int[] convertToPixels(Image img) {
            int width = img.getWidth(null);
            int height = img.getHeight(null);
            int[] pixel = new int[width * height];
     
            PixelGrabber pg = new PixelGrabber(img, 0, 0, width, height, pixel, 0, width);
            try {
                pg.grabPixels();
            } catch (InterruptedException e) {
                throw new IllegalStateException("Error: Interrupted Waiting for Pixels");
            }
            if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
                throw new IllegalStateException("Error: Image Fetch Aborted");
            }
            return pixel;
        }

    Cette méthode marche très bien. J'essaye actuellement d’effecteur une rotation sur ces pixels afin de pouvoir faire tourner l'image selon un angle choisis. J'utilise cette méthode :

    Code java : 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
    17
    18
    19
    20
    21
    22
    23
    24
        //Méthode pour la rotation des pixels d'une image
        public int[] rotate( double angle, int[] pixels, int width, int height ) {
            final double radians = Math.toRadians( angle );
            final double cos = Math.cos( radians );
            final double sin = Math.sin( radians );
            final int[ ] pixels2 = new int[ pixels.length ];
            for( int pixel = 0; pixel < pixels2.length; pixel++ ) {
                pixels2[pixel] = 0xFFFFFF;
            }
            for( int x = 0; x < width; x++ ) {
                for( int y = 0; y < height; y++ ) {
                    final int centerx = width / 2;
                    final int centery = height / 2;
                    final int m = x - centerx;
                    final int n = y - centery;
                    final int j = ( ( int ) ( m * cos + n * sin ) ) + centerx;
                    final int k = ( ( int ) ( n * cos - m * sin ) ) + centery;
                    if( j >= 0 && j < width && k >= 0 && k < height ){
                        pixels2[ ( y * width + x ) ] = pixels[ ( k * width + j ) ];
                    }
                }
            }
            return pixels2;
        }

    Premier problème : les bornes de l'image sont toujours définis par les width et height de l'image en entrée. Donc en sortie, je n'ai pas toute l'image à laquelle on a appliquer la rotation. J'aimerai savoir comment connaitre la taille de mon image en sortie après rotation. Il doit y avoir un moyen de connaitre les bornes min et max en x et y et d'y appliquer des calculs de cosinus et de sinus afin de connaître les futures bornes.

    Est ce quelqu'un à une idée ?

    Merci

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Tu fabriques une rotation sans centre ?

    Ta question est une question de trigonométrie. Qu'as-tu fait ? Un schéma ? Un calcul ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 591
    Points
    188 591
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Tu fabriques une rotation sans centre ?
    Pour une image, c'est loin d'être délirant (http://www.leptonica.com/rotation.html, par exemple). Conventionnellement, tout s'exprime à partir du centre de l'image.

    Maintenant, pour le problème, vraiment, faire un schéma qui montre l'image d'origine (un rectangle) et sa version tournée, les deux rectangles l'un sur l'autre, ça aidera beaucoup. Un petit coup de trigonométrie dans les triangles rectangles et l'affaire est faite (https://fr.wikipedia.org/wiki/Triang...ngle_rectangle).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  4. #4
    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 Nasaliah Voir le message
    je débute en programmation et plus particulièrement en java.

    J'ai une image trouvée sur internet (peu importe la source) que je transforme en un tableau de pixel.
    C'est inutile.
    Si tu utilises imagier ou jai pour lire une image, alors tu récupères une BufferedImage.
    Les BufferedImage ne sont en fait que des tableaux de dimension 1.
    Donc tu réinventes la roue.

    Sinon, en regardant dans la rubrique Contribuez, tu aurais trouvé ce code java pour la rotation d'images.
    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.

  5. #5
    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 Nasaliah Voir le message
    Bonjour,
    je débute en programmation et plus particulièrement en java.
    ...
    Est ce quelqu'un à une idée ?
    Et surtout, en ce qui concerne les images, pour faire des rotations il faut remplir "à l'envers" :

    une fois trouvé le centre et les 4 angles, prendre pixel par pixel dans l'image FINALE (celle tournée) et chercher le pixel correspondant dans l'image d'origine..


    Sinon, à cause des arrondis, tu auras ce qu'on appelle des effets de moiré :

    https://fr.wikipedia.org/wiki/Moir%C3%A9_%28physique%29
    https://en.wikipedia.org/wiki/Moir%C3%A9_pattern

    Il te faudra donc appliquer la rotation inverse...
    "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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/11/2012, 08h50
  2. Algorithme de rotation
    Par Mujin dans le forum Mathématiques
    Réponses: 0
    Dernier message: 16/02/2011, 15h09
  3. algorithme de rotation d'images 90°, 180°, 270° ?
    Par mobi_bil dans le forum Traitement d'images
    Réponses: 11
    Dernier message: 23/03/2009, 12h51
  4. algorithme de rotation
    Par mipou dans le forum C
    Réponses: 1
    Dernier message: 16/02/2009, 10h55
  5. Algorithme pour rotation image en C
    Par guigui01 dans le forum Traitement d'images
    Réponses: 6
    Dernier message: 22/04/2006, 14h41

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