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 :

un traitement d'image en java


Sujet :

Traitement d'images

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Points : 41
    Points
    41
    Par défaut un traitement d'image en java
    Bonjour tout le monde;
    j'essaye dans le code java suivant d'afficher les niveaux de gris d'une image niveaux de gris mais les valeurs affichées sont négatives alors qu'elles devaient être entre 0 et 255
    quelqu'un peut m'aider?

    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
    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
     
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
     
     
     
    public class RegionGrowing {
    	static BufferedImage img=null;
    	public static  void main(String[] args)
    	   { 
    		RegionGrowing Region=new RegionGrowing();
           String name_file="c:\\ortrho25eparse.jpg";
    /*loading image*/
           JFrame f = new JFrame("Load Image Sample");
     
           f.addWindowListener(new WindowAdapter(){
                   public void windowClosing(WindowEvent e) {
                       System.exit(0);
                   }
               });
     
             f.add(new LoadImag(name_file));
     
           f.pack();
           f.setVisible(true);
     
    /////////** Finding starting points **/
     
    /* 1.Thresholding Image*/
           BufferedImage S=null;;
           try {
    		    S= ImageIO.read(new File(name_file));
     
    	       } catch (IOException e) { System.out.println("erreur de nom de file");}
           /** Lecture de tous les pixels : */
           int colonnes = S.getWidth();
           int lignes = S.getHeight();
           int[] rgbs = new int[colonnes*lignes]; /** on crée l'espace neccessaire */
            S.getRGB(0,0,colonnes,lignes,rgbs,0,colonnes);
     
           for(int i=0;i<lignes*colonnes;i++) {
        	  System.out.println(rgbs[i]);
         } 
     
     
     
     
     
     
     
     
    }
    /* loading image*/
    }
     
     
     class LoadImag extends Component{
    		private static final long serialVersionUID = 1L;
    		 BufferedImage img=null;
    		 int rgb[];int rgbs[]; int w;
    		public LoadImag(String name_file){
    		try {
    		    img = ImageIO.read(new File(name_file));
     
     
    		} catch (IOException e) { System.out.println("erreur de nom de file");
    		}
    		}
     
    		public void paint(Graphics g) {
    	        g.drawImage(img, 0, 0, null);
    	    }
     
    	    public Dimension getPreferredSize() {
    	        if (img == null) {
    	             return new Dimension(100,100);
    	        } else {
    	           return new Dimension(img.getWidth(null), img.getHeight(null));
    	       }
    	    }
     
     
    	}

  2. #2
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 219
    Points : 226
    Points
    226
    Par défaut
    Bonjour,

    Qu'entend-tu par afficher les niveaux de gris d'une image?

    Tu veux afficher l'image? son histogramme?

    Est-ce une image couleur que tu veux convertir en niveaux de gris?

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Les méthodes BufferedImage.getRGB() retournent une couleur au format sRGB.

    Si tu veux le niveau de gris, il va falloir utiliser des formules de conversion, par exemple:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int rgb2gray(int srgb) {
    	int r = (srgb >>16 ) & 0xFF;
    	int g = (srgb >> 8 ) & 0xFF;
    	int b = srgb & 0xFF;
    	return (int)(0.299*r + 0.587*g + 0.114*b);
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Tu peux convertir tes images en BufferedImage comme ça :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    ublic static ImageRGB convert(BufferedImage im) {
    		ImageRGB imageOut = new ImageRGB(im.getWidth(), im.getHeight());
     
    		for (int j = 0; j < im.getHeight(); j++)
    			for (int i = 0; i < im.getWidth(); i++) {
    				int rgb = im.getRGB(i, j);
    				Color couleur = new Color(rgb);
     
    				int r = couleur.getRed();
    				int g = couleur.getGreen();
    				int b = couleur.getBlue();
    				imageOut.setRedPixel(i, j, r);
    				imageOut.setGreenPixel(i, j, g);
    				imageOut.setBluePixel(i, j, b);
    			}
     
    		return imageOut;
    	}
     
    	public static BufferedImage convert(ImageRGB imageRGB) {
    		BufferedImage image = new BufferedImage(imageRGB.getWidth(), imageRGB
    				.getHeight(), BufferedImage.TYPE_INT_RGB);
     
    		for (int j = 0; j < imageRGB.getHeight(); j++)
    			for (int i = 0; i < imageRGB.getWidth(); i++) {
    				int fR = ColorConverter
    						.convertToInt(imageRGB.getRedPixel(i, j));
    				int fG = ColorConverter.convertToInt(imageRGB.getGreenPixel(i,
    						j));
    				int fB = ColorConverter.convertToInt(imageRGB
    						.getBluePixel(i, j));
    				Color color = new Color(fR, fG, fB);
    				image.setRGB(i, j, color.getRGB());
    			}
     
    		return image;
    	}
    }


    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
    public class ColorConverter {
    	public static byte convertToByte(float c) {
    		int tempo;
    		if(c<0) tempo = 0;
    			else if(c>255) tempo = 255;
    			else tempo = (int) c;
    		tempo  -= 128;
    		byte b = (byte) tempo;
    		return b;
    	}
     
    	public static int convertToInt(float c) {
    		int i = (int) c;
    		if(i<0) return 0;
    		else if(i> 255) return 255;
    		else return i;
    	}
     
    }
    Je ne répondrai à aucune question technique en privé

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Points : 41
    Points
    41
    Par défaut
    Merci de répondre mais l'image que je traite est en niveau de gris et non une image couleurs

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Bah c'est pareil sauf que chaque champ est égal. Il suffit alors de juste récupérer une composante (par exemple juste le rouge)
    Je ne répondrai à aucune question technique en privé

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Points : 41
    Points
    41
    Par défaut
    Merci mon problème est résolu j'ai appliqué le code ²de pseudocode mais je ne comprends pas pourquoi on ne peut pas afficher dirèctement les niveaux de gris d'une image noir et blanc sans passer par une conversion alors qu'en Matlab c'est faisable et c'est beaucoup plus simple!
    Et si on voulait manipuler les niveaux de gris d'une image et ensuite afficher le résultat que fait on?

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par inès83 Voir le message
    Merci mon problème est résolu j'ai appliqué le code ²de pseudocode mais je ne comprends pas pourquoi on ne peut pas afficher dirèctement les niveaux de gris d'une image noir et blanc sans passer par une conversion alors qu'en Matlab c'est faisable et c'est beaucoup plus simple!
    Les methodes getRGB() renvoient TOUJOURS la valeur du pixel au format sRGB, meme si l'image est binaire ou en niveaux de gris.

    Si tu est sûr que ton image est en niveaux de gris, tu peux aller directement lire la valeur du pixel dans le Raster.

    int[] valeur = im.getData().getPixel(x, y, (int[])null);

    cette methode te renvoie la valeur du pixel sous forme de tableau d'entier. Si les pixels de ton image sont codés sur 8 bits (=1 octet), alors ce tableau ne contient qu'une seule valeur (entre 0 et 255) qui représente le niveau de gris du pixel:

    int graylevel = valeur[0];

    Et si on voulait manipuler les niveaux de gris d'une image et ensuite afficher le résultat que fait on?
    voila la fonction inverse de celle que j'ai donnée:
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int gray2rgb(int gray) {
    	gray&=0xFF;
    	return (255<<24)+(gray<<16)+(gray<<8)+gray;
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Points : 41
    Points
    41
    Par défaut
    Merci PseudoCode c'est très gentil j'ai essayé le code et ça marche
    merci tout le monde

  10. #10
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 45
    Points : 32
    Points
    32
    Par défaut Transformer l'image en noir et blanc sans passer par niveau de gris
    salut tout le monde.
    je vous démande comment peut t on passer directément à transformer l'image en noir et blanc sans passer par le niveau de gris.
    merci d'avance.

  11. #11
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par ghazel16 Voir le message
    salut tout le monde.
    je vous démande comment peut t on passer directément à transformer l'image en noir et blanc sans passer par le niveau de gris.
    merci d'avance.
    Heu... je pense qu'on ne peut pas.

    Avec le Dithering, on peut remplacer un niveau de gris (luminosité) par un motif "noir et blanc". Mais je ne vois pas comment associer une "couleur" (teinte) à un tel motif.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  12. #12
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    salut.
    le Dithering ne resoudre pas mon problème, en effet le genre de mon problème est comme celui du filtre de photocopie qui va rendre la couleur gris un noir et la couleur blanc plus foncé.
    Alors comment peut t on rendre la photo lu par la CAM une photo avec des chiffres blans clairs sur un arrière plan noir foncé au lieu de gris.
    merci.

  13. #13
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Tu peux faire soit un filtre de contraste, soit un seuillage binaire.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

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

Discussions similaires

  1. traitement d'image en java
    Par rymamtic dans le forum 2D
    Réponses: 1
    Dernier message: 29/12/2009, 14h59
  2. traitement d'image en java
    Par softlook dans le forum Général Java
    Réponses: 4
    Dernier message: 04/12/2009, 11h51
  3. Traitement d'image en java
    Par fifi2 dans le forum Traitement d'images
    Réponses: 7
    Dernier message: 03/06/2009, 01h03
  4. le traitement d'image avec Java
    Par takfa2008 dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 27/01/2009, 09h01
  5. je dois implémenter des programmes en traitement d'image avec java.
    Par inès83 dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 22/02/2008, 12h55

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