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

2D Java Discussion :

Parcourir les pixels d'une image


Sujet :

2D Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Points : 35
    Points
    35
    Par défaut Parcourir les pixels d'une image
    Bonjour,

    j'ai écrit ce code qui permet de parcourir les pixels d'une image en forme de spirale sur les 8 directions et la sauvegarder dans un tableau d'entier mais le code m'affiche toujours le même résultat 150.225 150.225 150.225 150.225
    Veuillez m'aider à corriger ce code SVP
    Merci
    Code : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    	public int[][] point(BufferedImage bufferedImage)
    	{  int width=300,height=450;
    	    int d = Math.min(height/2, width/2);
    	    int n = 10;
    	    int dn= d/n;
     
    	    int L=width/2;int l=height/2;
     
    	   int[][] points=new int[2][10000] ;
     
    	    for ( int i=0,k=1 ; i<(n*8+1) ; i++ ,k++)
    	    {  
    	    	points[0][i]  =L;
    	    	points[0][i+1]=L+(k*dn);
    	    	points[0][i+2]=L+(k*dn);
    	    	points[0][i+3]=L;
    	        points[0][i+4]=L+(k*(-dn));
    	        points[0][i+5]=L+(k*(-dn));
    	        points[0][i+6]=L+(k*(-dn));
    	    	points[0][i+7]=L;
    	    	points[0][i+8]=L+(k*dn);
     
    	    	points[1][i]  =l;
    	    	points[1][i+1]=l;
    	    	points[1][i+2]=l+(k*dn);
    	    	points[1][i+3]=l+(k*dn);
    	        points[1][i+4]=l+(k*dn);
    	        points[1][i+5]=l;
    	        points[1][i+6]=l+(k*(-dn));
    	    	points[1][i+7]=l+(k*(-dn));
    	    	points[1][i+8]=l+(k*(-dn));
    	    }
     
            for (int i=0,j=0;i<(n*8+1) ;i++,j++){ 
    	    System.out.println(points[0][i]+"."+points[1][j]);
            }
     
    	   return points;	     
    	}
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Bonjour,

    Je ne dois pas avoir tout compris au besoin, car le code présenté ne parcourt rien du tout.

    L'erreur est ici purement algorithmique.

    Première question : pourquoi utiliser deux variables dans les deux boucles for alors que ces deux variables sont toujours les mêmes? A part brouiller le code, je ne vois pas l'intérêt avec le code existant.

    Deuxième question : êtes vous passé en débug dans votre code pour voir ce qu'il faisait? Je pense qu'en le faisant, vous allez vite comprendre le problème.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    J'aimerais comparer deux images si sont identiques ou non sans parcourir toute l'image j'ai voulu un algorithme qui parcourt les pixels d'une image sous la forme d'un spirale comme l'exemple qui se trouve dans la pièce jointe. Qu'elles sont les variables qui sont les mêmes dans les deux boucles?
    Merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    i et k dans la première boucle.

    i et j dans la seconde.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    La première boucle pour remplir le tableau
    La deuxième boucle pour afficher
    Il faut des variables différentes
    Vous pouvez m'aider à corriger ce code car je n'ai pas trouvée où est exactement la faute ?
    Merci

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Je ne vois pas en quoi il faut deux variables par boucle. Surtout si elles se suivent.

    De plus, je ne peux pas corriger votre code car je ne comprends pas ce que vous cherchez à faire.

    Tout ce que je peux vous dire:

    1. C'est que pour les boucles vous pourriez écrire :

    Code : 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
    25
    26
    	    for ( int i=0; i<(n*8+1) ; i++)
    	    {  
    	    	points[0][i]  =L;
    	    	points[0][i+1]=L+(i*dn);
    	    	points[0][i+2]=L+(i*dn);
    	    	points[0][i+3]=L;
    	        points[0][i+4]=L+(i*(-dn));
    	        points[0][i+5]=L+(i*(-dn));
    	        points[0][i+6]=L+(i*(-dn));
    	    	points[0][i+7]=L;
    	    	points[0][i+8]=L+(i*dn);
     
    	    	points[1][i]  =l;
    	    	points[1][i+1]=l;
    	    	points[1][i+2]=l+(i*dn);
    	    	points[1][i+3]=l+(i*dn);
    	        points[1][i+4]=l+(i*dn);
    	        points[1][i+5]=l;
    	        points[1][i+6]=l+(i*(-dn));
    	    	points[1][i+7]=l+(i*(-dn));
    	    	points[1][i+8]=l+(i*(-dn));
    	    }
     
            for (int i=0;i<(n*8+1) ;i++){ 
    	    System.out.println(points[0][i]+"."+points[1][i]);
            }
    Ce code est strictement équivalent au votre. Avec une seule variable par boucle. Ce qui est bien plus lisible il me semble.

    2. Pour comprendre ce que fait votre code, si vous ne le voyez pas en relisant votre code, il vous faut passer en débug dans vos boucle et voir comment vos tableaux évoluent.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    -Représenter l'image comme étant un repère orthonormé
    -Se localiser au centre de l'image càd (L/2,l/2)
    -On commence se déplacer depuis (L/2,l/2)

    (L/2,l/2)+(dn,0)+(dn,dn)+(0,dn)+(-dn,dn)+(-dn,0)+(-dn,-dn)+(0,-dn)+(dn,-dn)
    (L/2 + dn ,l/2 + dn)+ (dn+dn,0+dn) +(dn+dn,dn+dn)+(0+dn,dn+dn)+(-dn+dn,dn+dn)+(-dn+dn,0+dn)......
    A chaque itération on ajoute dn aux abscisses et ordonnées à condition de ne pas dépasser longueur et largeur de l'image

  8. #8
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Points : 519
    Points
    519
    Billets dans le blog
    1
    Par défaut
    slt,
    Essaye plutôt ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void comparaison (BufferedImage img, BufferedImage img1) throws Exception {
        if (img.getWidth () != img1.getWidth () || img.getHeight () != img1.getHeight ()) 
       throw new Exception ("Images de tailles différentes");
       int c = l/2, c1 = L/2;
       for (i = 8;; i += 8) {
         //première itération x = c + i   y = c1
           int gray1 = RGB2GRAY (img.getColorModel ().getRed (img.getRGB (c + i, c1)), img.getColorModel ().getGreen (img.getRGB (c + i, c1)), img.getColorModel ().getBlue (img.getRGB (c + i, c1)));
        int compar = comparaison (gray1, gray2);
        décision (compar);
        //deuxième itération  x = c    y = c1 - i
       //troisième itération  x = c - i  y = c1
       //quatrième itération  x = c  y = c1 + i
       }
    }
    Parcours en spirale
    En supposant que l > L
    //RGB2GRAY: Conversion système RGB -> GRAY
    //Comparaison: Comparaison des deux niveau de gris
    Bon courage

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    @mohamine1989 : je ne suis pas certain que cela réponde au besoin initial.

    De plus, pourquoi passez vous par RGB2GRAY? Pourquoi ne pas directement comparer les Color?

    Et puis, le but n'est pas, il me semble, de faire le travail à sa place. Ici, mohamed11000 est face à un très simple problème algorithmique, lui donner une solution toute faite ne l'aidera pas à comprendre où est son erreur. Même si vous lui donnez une piste dans votre exemple.

  10. #10
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Points : 519
    Points
    519
    Billets dans le blog
    1
    Par défaut
    Oui, tout a fait, on peut comparer directement les couleurs, r-r, g-g, ou autre, mais la, dans l’énoncé initial, il a bien spécifié 155.255 ou je ne sait quoi. De plus, peut être il a besoin de calculer les niveaux de gris pour les utilisées ailleurs dans son programme (avec un parcours en spirale).
    Mais c'est vrai que je lui donner la solution toute faite a un simple problème algorithmique, une question pareil doit être dans le forum algorithmique pour des étudiants de première année, mais j'ai remarqué qu'il été complétement out, ça m’étonnerai qu'il aurait trouver la solution tous seul.
    Amicalement Moh

Discussions similaires

  1. rendre tranparent les pixels d'une image
    Par lisco dans le forum Qt
    Réponses: 3
    Dernier message: 13/05/2009, 17h06
  2. lire les pixels d'une image jpg
    Par shakoulé dans le forum C
    Réponses: 2
    Dernier message: 01/05/2009, 15h47
  3. [WD7.5] Compter les pixels d'une Image
    Par mlww dans le forum WinDev
    Réponses: 5
    Dernier message: 05/07/2007, 22h50
  4. parcourir les pixels d'une image
    Par nonosa dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 13/06/2007, 15h47
  5. Changer les pixels dans une image
    Par mimane_01 dans le forum Images
    Réponses: 1
    Dernier message: 15/02/2007, 13h12

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