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 :

Histogramme Bilineaire d'une image


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut Histogramme Bilineaire d'une image
    Bonjour,

    enfaite j'essaye de faire un sorte d'histogramme de deux images voilà le code que j'utilise enfaite je suis bloquée, normalement il faut colorier cette grille par rapport aux valeurs du pixel des 2 images. On prend les 2 images et on les fusionnes on prends les 5 bits du points fort de chacune et la nouvelle valeur sera dans la même position précédente
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.awt.image.Raster;
     
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.*;
     
    import java.util.*;
     
     
       public class Histogrammebilineaire extends JPanel
       {
     
       BufferedImage monImage;
       BufferedImage monImage2;
           //public Histogrammebilineaire(){
     
        /*     try {
                   File input = new File("d:/bordd.JPG");
                   File input2 = new File("d:/bor.JPG");
                   monImage = ImageIO.read(input);
                   monImage2 = ImageIO.read(input);
                    
             
                   int max=0;
                   int nbpts=0;
                   int M=1;
           for (int i = 0; i < monImage.getHeight() ; i++) {
                  for (int j = 0 ; j < monImage.getWidth() ; j++) {
                    
                     for (int k = 0; k < monImage2.getHeight(); k++) {
                      for (int l = 0; l <monImage2.getWidth(); l++) {
                       int pixel = monImage.getRGB(j + k, i + l);
                       int gray = (pixel >> 16) & 0xff;
                        
                   if (max<M){
                       max=M;
                       nbpts++;
                   }
                        
                      }}}}      
       
               } catch (Exception e) {
           e.printStackTrace();
          }
         } */
     
          public static void Fenetre()
          {
     
             JFrame fenetre = new JFrame();
             fenetre.setSize(273, 295);
             fenetre.setTitle("Histogramme Bilinéaire");
             JPanel panneau = new Histogrammebilineaire();
             panneau.setBackground(Color.WHITE);
             fenetre.add(panneau);
             fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             fenetre.setVisible(true);
          }
     
          @Override
          public void paintComponent(Graphics g)
          {
              File input = new File("d:/bordd.JPG");
              File input2 = new File("d:/test.bmp");
     
     
              try {
                monImage = ImageIO.read(input);
                 monImage2 = ImageIO.read(input2);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
     
             super.paintComponent(g);
             int larg = getWidth();
             int haut = getHeight();
     
     
             int dim = 8; //dimension d'une case de la grille
     
             // La grille:
             for(int i = 0; i < dim*33; i +=dim)
             {
                g.drawLine(i,0,i, haut); // Les lignes verticales de la grille
                g.drawLine(0,i,larg, i); // Les lignes horizontales de la grille
               // System.out.println(i);
             }
     
             for(int j = 0; j < dim*32; j +=dim)
             { 
     
             // Remplir les cases:
                for(int i = 0; i < dim*32; i +=dim)
                {
     
                     for ( i = 0; i < monImage.getHeight() ; i++) {
                      for ( j = 0 ; j < monImage.getWidth() ; j++) {
     
                          for (int k = 0; k < monImage2.getHeight(); k++) {
                          for (int l = 0; l <monImage2.getWidth(); l++) {
     
                        int pixel = monImage.getRGB(j , i );
                        int pixel2= monImage2.getRGB(k , l);
                       int gray = (pixel >> 16) & 0xff;
                      int gray2 = (pixel2 >> 16) & 0xff;
     
                   g.setColor(Color.blue);   // couleur de remplissage
                   g.fillRect(gray, gray2, 8, 8); // remplissage (fill)
                   g.setColor(Color.green);  // couleur du panel
                }
             } }
     
                     }}}
     
     
          }
     
          public static void main (String [] arg)
          {
             Fenetre();
          }
       }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    int gray = (pixel >> 16) & 0xff; récupère la composant rouge de la couleur du pixel, pas les 5 bits de poids fort (cela dit ça n'aurait pas grand sens de prendre les 5 bits de poids fort, puisqu'il s'agirait de la composante alpha).

    Ensuite, pour affecter la couleur pour dessiner, il te faut convertir la valeur en couleur. De ce que je comprends, il te faut un niveau de gris, donc tu peux faire ça par g.setColor(new Color(valeur, valeur, valeur)) (affecter la même valeur pour les composantes rouge, verte et bleue). Il te faut donc une règle de combinaison des deux composantes gray et gray2 : la moyenne peut-être ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    Enfaite il me faut prendre 5 bits de poid fort de chaque image ! pouvez vous svp m'aider je suis vraiment bloquée et debutante

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Ce n'est certainement pas les 5 bits de poids fort de chaque image, mais les 5 bits de poids fort de chaque couleur de chaque pixel, non ?

    Ensuite, je viens de te répondre à ce sujet. Pour les combiner, tu peux faire la moyenne donc, par exemple comme ça :
    [code]int valeur = (gray+gray2)>>1;[code]

    En revanche, pour dessiner le point correspondant, ce n'est pas gray et gray2 à priori les coordonnées, ou si ? Soit il s'agit de coordonnées correspondant aux pixels d'origine, et c'est quelque chose qui dépend de i et j (comme tu dessines un rectangle de 8x8, à priori ça serait g.fillRect(i*8, j*8, 8, 8);.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    Merci beaucoup pour votre retour, alors j'ai essayé ce que vous m'avez dis mais ça marche pas la grille devient toute blanche et me donne une erreur de outside parametre
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    package STAGE;
     
       public class Histogrammebilineaire extends JPanel 
       { 
     
       BufferedImage monImage;
       BufferedImage monImage2;
    	   //public Histogrammebilineaire(){
     
    	/*	   try {
    			   File input = new File("d:/bordd.JPG");
    			   File input2 = new File("d:/bor.JPG");
    			   monImage = ImageIO.read(input);
    			   monImage2 = ImageIO.read(input);
     
     
    			   int max=0;
    			   int nbpts=0;
    			   int M=1;
    	   for (int i = 0; i < monImage.getHeight() ; i++) {
    			  for (int j = 0 ; j < monImage.getWidth() ; j++) {
     
    			     for (int k = 0; k < monImage2.getHeight(); k++) {
    			      for (int l = 0; l <monImage2.getWidth(); l++) {
    			       int pixel = monImage.getRGB(j + k, i + l);
    			       int gray = (pixel >> 16) & 0xff;
     
    			   if (max<M){
    				   max=M;
    				   nbpts++;
    			   }
     
    			      }}}}	     
      
    		   } catch (Exception e) {
    	   e.printStackTrace();
    	  }
    	 } */
     
          public static void Fenetre()
          { 
     
             JFrame fenetre = new JFrame(); 
             fenetre.setSize(273, 295); 
             fenetre.setTitle("Histogramme Bilinéaire"); 
             JPanel panneau = new Histogrammebilineaire(); 
             panneau.setBackground(Color.WHITE); 
             fenetre.add(panneau); 
             fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
             fenetre.setVisible(true); 
          } 
     
          @Override 
          public void paintComponent(Graphics g)
          { 
        	  File input = new File("d:/courbure.jpg");
        	  File input2 = new File("d:/test.bmp");
     
     
        	  try {
    			monImage = ImageIO.read(input);
    			 monImage2 = ImageIO.read(input2);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
             super.paintComponent(g); 
             int larg = getWidth(); 
             int haut = getHeight();
     
     
             int dim = 8; //dimension d'une case de la grille
     
             // La grille:
             for(int i = 0; i < dim*33; i +=dim)
             {
                g.drawLine(i,0,i, haut); // Les lignes verticales de la grille
                g.drawLine(0,i,larg, i); // Les lignes horizontales de la grille
               // System.out.println(i);
             }
     
             for(int j = 0; j < dim*32; j +=dim)
             {	
     
             // Remplir les cases:
                for(int i = 0; i < dim*32; i +=dim)
                {
                	 for ( i = 0; i < monImage.getHeight() ; i++) {
           			  for ( j = 0 ; j < monImage.getWidth() ; j++) {
     
     
     
           				for (i = 0; i < monImage2.getHeight(); i++) {
           			    for (j = 0; j <monImage2.getWidth(); j++) {
           				int pixel = monImage.getRGB(j , i );
           					int gray = (pixel >> 16) ;
           			    	int pixel2= monImage2.getRGB(j, i);
           				     int gray2 = (pixel2 >> 16) ;
           				  int valeur = (gray+gray2)>>1;
           				  g.setColor(new Color(valeur, valeur, valeur));
     
                   g.setColor(Color.blue);   // couleur de remplissage
                   g.fillRect(i*8, j*8, 8, 8); // remplissage (fill)
                   g.setColor(Color.green);  // couleur du panel
                }
             } }
     
                	 }}}
     
     
          }
     
          public static void main (String [] arg)
          { 
             Fenetre();
          }
       }

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Tu as supprimé de ton code le & 0xFF, du coup les valeurs des composantes rouges peuvent être hors scope en effet.

    Mais tu ne m'a pas répondu sur l'histoire du 5 bits de poids fort ! int gray = (pixel >> 16) & 0xFF; ne donne pas les 5 bits de poids fort, mais les 8 bits de 17 à 24.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. [2D/3D] [OpenGL] Histogramme 3D d'une image
    Par 686insomnia686 dans le forum Qt
    Réponses: 9
    Dernier message: 08/10/2013, 23h26
  2. [Débutant] histogramme logarithmique d'une image
    Par amal1410 dans le forum Images
    Réponses: 1
    Dernier message: 16/05/2013, 20h24
  3. histogramme vertical d'une image
    Par matrix2008 dans le forum Images
    Réponses: 5
    Dernier message: 13/12/2012, 10h49
  4. histogramme cumulé d'une image
    Par arsonlupo dans le forum Images
    Réponses: 1
    Dernier message: 02/06/2009, 20h01
  5. Réponses: 3
    Dernier message: 27/01/2005, 10h53

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