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 :

Binariser une image selon ses canaux RGB


Sujet :

Traitement d'images

  1. #1
    Candidat au Club
    Homme Profil pro
    Activités Scientifiques et Techniques
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Activités Scientifiques et Techniques

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Binariser une image selon ses canaux RGB
    Bonjour à tous,

    J'ai posté il y a quelques jours mon problème sur le forum imageJ mais je me suis peut être trompé de forum. Je réitère donc ici ma requête.
    Je recherche de l’aide sur la programmation avec Image J. J’utilise ce logiciel pour analyser des photos de végétations, qui ont une forte dominante vert.
    2 types d’informations m’intéressent dans mes images :
    • Les niveaux des canaux RGB : Cela je sais faire.
    • Le taux de couverture, c'est-à-dire un rapport entre ce qui peut être considéré comme de la végétation et ce qui n’en est pas.
    Je cherche à faire une macro qui puisse:
    - analyser les images au niveau de chaque pixel,
    - transformer (binariser) mon image selon un test conditionnel
    - récupérer les informations dans un tableau
    - afficher la nouvelle image (que j’enregistrerai dans un nouveau dossier).
    Je précise que les images que je traite font entre 5 et 9 M pixels ! (s’il le faut j’essayerai de poster une photo)

    Le test conditionnel se fait sur la comparaison des niveaux RGB.
    Je veux avoir le % de pixel avec la condition Canal Vert > Canal Rouge.

    Voici en gros la trame de ce que j’aimerais écrire sous forme de macro :

    1) Choisir un dossier « input » (où se trouveront les images originales)
    2) Choisir un dossier « output » (où je stockerai l’image binarisée)
    3) Pour chaque IMAGE
    4)Pour chaque pixel (donc du pixel 1 au 9 millionième pixel) (boucle WHILE ?)
    a. Récupérer les données RGB du pixel
    b. Boucle SI canal Vert > canal Rouge
    i. ALORS binariser en NOIR le pixel (ce qui revient à seuiller avec ce test)
    ii. SINON binariser en BLANC
    c. Fin boucle SI
    5) Fin boucle WHILE (sur une image)
    6) Compter le nombre de pixel noirs
    7) Fin boucle WHILE (sur toutes les images)
    8) Créer un dossier LOG en tableau (que je pourrai exporter vers Excel)
    a. Récupérer le nom de l’image, le nombre total de pixel et le nombre total de pixels NOIRS
    9) Afficher l’image binarisée selon ce test

    Je n’ai aucune idée si cela est possible. Dans le cas ou ça ne l’est pas, que pouvez-vous me conseiller ?
    J’espère que ce long descriptif ne vous aura pas trop découragé. Par avance, je remercie vivement les pros de l’informatique et/ou de l’image qui voudront bien se pencher sur mon problème.
    Cordialement,

  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
    Bonsoir,

    ImageJ utilise des ImageProcessor, c'est une extension des BufferedImage.
    Donc pour récupérer les pixels, il suffit de récupérer le BuffereImage contenu dans l'ImageProcessor, puis d'accéder au Raster :


    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    BufferedImage image = MonImageProcessor.getBufferedImage() ;
    WritableRaster wr = image.getRaster() ;
    ...
    WritableRaster wres = result.getRaster() ;

    Ensuite, il suffit de parcourir l'image et de récupérer les couleurs :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int width = image.getWidth() ;
    int height = image.getHeight() ;
    for (y=0 ; y < height ; y++)
    	for (x=0 ; x < width ; x++)
    		{
    		int r = wr.getSample(x, y, 0) ;
    		int g = wr.getSample(x, y, 1) ;
    		int b = wr.getSample(x, y, 2) ;
    		// on fait les test
    		if ( ... ) wres.setSample(x, y, 1) ;
    		else wres.setSample(x, y, 0) ;
    		}


    Pour compter les pixels noirs et blanc, il y a plusieurs solutions :
    - le faire pendant le traitement.
    - le faire après par une simple intégrale si l'image est binaire, sinon par un compteur classique.

    Pour lire toutes les image dans un fichier, il faut utiliser un File (il y a toutes les informations dans le forum java) :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    File file = new File("Adresse") ;
    File[] files = file.listFiles() ;
    for (int i=0 ; i < files.length ; i++)
    ...

    etc. tout le reste est simplement du java (cf. le forum approprié).
    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
    Candidat au Club
    Homme Profil pro
    Activités Scientifiques et Techniques
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Activités Scientifiques et Techniques

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour votre réponse.
    Je vais intégrer tout cela dès que possible et vous tiendrai informé du résultat.
    cordialement
    zorino-liger

Discussions similaires

  1. Macro ImageJ pour binariser une photo selon ses canaux RGB
    Par zorino-liger dans le forum ImageJ
    Réponses: 1
    Dernier message: 05/04/2012, 10h53
  2. Réponses: 8
    Dernier message: 01/04/2010, 23h27
  3. Réponses: 13
    Dernier message: 09/07/2006, 15h53
  4. Zommer une image selon une echelle donnée
    Par jlassiramzy dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 30/06/2006, 18h05
  5. [HTML][CSS] Redimensionner une image selon condition
    Par Eilkh dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 14/02/2006, 15h55

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