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

ImageJ Java Discussion :

Compter des carrés de couleur parfait. réguliers dans une bitmap (.bmp)


Sujet :

ImageJ Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Compter des carrés de couleur parfait. réguliers dans une bitmap (.bmp)
    Bonjour,
    Je suis absolument débutant avec ImageJ. Est-il possible (et facile...)
    de compter les carrés d'un damier avec ce soft ?
    Je dois analyser des images tout à fait comparables à celle-ci:
    http://www.i-do-webdesign.com/blog/wp-content/uploads/2013/10/damier.jpg

    L'idéal serait de recevoir les infos suivantes:
    l'image contient 60 colonnes, 40 lignes, il y a X carrés de couleur rouge, Y carrés
    de couleur bleue etc etc. avec un total X + Y + ... = 2400.

    Le format du fichier sera du type Windows .bmp.

    Merci mille fois pour le moindre tuyau !
    Salutations,
    Seb

  2. #2
    Membre habitué Avatar de Tchoukatroc
    Homme Profil pro
    Soupière
    Inscrit en
    Mai 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Soupière
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 99
    Points : 141
    Points
    141
    Par défaut
    Bonjour,

    J'ai essayé de faire une macro pour faire ce dont tu as besoin.
    Le problème, c'est que la couleur des pixels dans chacun des carrés de couleur n'est pas exactement la même.
    Si tu zoomes sur un carré, tu le verras bien, la valeur des pixels n'est pas la même.
    Peut-être que c'est dû au format JPG de tes images qui est un format compressé avec perte d'information mais ça m'étonnerais.
    Est-ce que tu as ces images dans un autre format, genre .tif?
    Sinon, peut-être que quelqu'un d'autre aura une idée.

    Bonne soirée,

    Tchoukatroc

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    > Le problème, c'est que la couleur des pixels dans chacun des carrés de couleur n'est pas exactement la même.
    Dans l'image dont j'ai mis la référence peut-être en effet, et ceci n'était qu'un exemple, ...

    > Peut-être que c'est dû au format JPG de tes images
    ... mais attention mes images seront d'un tout autre format !: .bmp, et dans mes fichiers par contre
    dans les carrés la couleur est bien répartie et les pixels ne montrent aucune variation.

    Pourrais-je avoir accès au code de ta macro ?

    Merci !
    Seb

  4. #4
    Membre habitué Avatar de Tchoukatroc
    Homme Profil pro
    Soupière
    Inscrit en
    Mai 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Soupière
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 99
    Points : 141
    Points
    141
    Par défaut
    Bonjour,

    Pour l'instant, la macro donne le nombre de cases en largeur et le nombre de cases en hauteur, elle est largement améliorable. Tu peux copier ce code pour le tester sur tes images, puis tu va dans imageJ, onglet "plugins" puis "new" puis "macro" et tu colle le code la dedans, puis run pour lancer la macro. Si ça te conviens, je rajouterais une partie permettant de récupérer la valeur de la couleur de chaque cube. Je ne sais pas si tu connais le système RGB qui est le format de tes images. Pour chaque pixel, tu as quatre valeurs comprises entre 0 et 255 qui définissent la couleur de ton pixel. Une valeur correspondant au rouge, une au vert, une au bleu et une à la transparence. Le mélange de ces valeurs te donne la couleur finale du pixel. Tu peux trouver des tables RGB facilement sur le net. Je peux rajouter dans la macro une fonction qui te récupère les valeurs de pixel. Par contre, je ne sais pas si se sera facile de dire que telle ou telle valeur correspondant à telle couleur. Il faudrait voir si on peut simplement determiner la couleur en fonction des valeurs des pixels

    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
     
    nWidth = countBloc("height");
    nHeight = countBloc("width");
    nBlocs = nWidth * nHeight;
    print("nBlocsLargeur = " + nWidth + " nBlocsHauteur =  " + nHeight + " nBlocsTotal = " + nBlocs);
     
    function countBloc(dimension){
        value = getPixel(0,0);
        if (bitDepth==24) {
            initRed = (value>>16)&0xff;  // extract red byte (bits 23-17)
            initGreen = (value>>8)&0xff; // extract green byte (bits 15-8)
            initBlue = value&0xff;       // extract blue byte (bits 7-0)
        }
        nBloc = 0; 
        if(dimension == "height")dim = getHeight();
        if(dimension == "width")dim = getWidth();
    	for(i=0; i<dim; i++){
    		if(dimension == "height")value = getPixel(0,i);
        	if(dimension == "width")value = getPixel(i,0);
     
            if (bitDepth==24) {
                red = (value>>16)&0xff;
                green = (value>>8)&0xff;
                blue = value&0xff;    
            }
            if((initRed!=red)|(initGreen!=green)|(initBlue!=blue)){
            	nBloc++;
            	initRed = red;
            	initGreen = green;
            	initBlue = blue;
            }
        }
        return nBloc;
    }

  5. #5
    Membre habitué Avatar de Tchoukatroc
    Homme Profil pro
    Soupière
    Inscrit en
    Mai 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Soupière
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 99
    Points : 141
    Points
    141
    Par défaut
    Voila la macro avec une fonction qui te donne la valeur RGB de chaque carré dans le tableau de résultat de imageJ (il y avait une erreur dans la première, elle ne donnait pas exactement le bon nombre de carré). Maintenant, il faudrait trouver comment définir des gammes de valeurs RGB pour dire ce cube est bleu, celui est jaune, etc... Là, je rame pour l'instant.

    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
     
    nWidth = countBloc("height");
    nHeight = countBloc("width");
    getRGBValue(nWidth, nHeight);
    nBlocs = nWidth * nHeight;
    print("nBlocsLargeur = " + nWidth + " nBlocsHauteur =  " + nHeight + " nBlocsTotal = " + nBlocs);
     
    function countBloc(dimension){
        value = getPixel(0,0);
        if (bitDepth==24) {
            initRed = 0;  
            initGreen = 0; 
            initBlue = 0;  
        }
        nBloc = 0; 
        if(dimension == "height")dim = getHeight();
        if(dimension == "width")dim = getWidth();
    	for(i=0; i<dim; i++){
    		if(dimension == "height")value = getPixel(0,i);
        	if(dimension == "width")value = getPixel(i,0);
     
            if (bitDepth==24) {
                red = (value>>16)&0xff;
                green = (value>>8)&0xff;
                blue = value&0xff;    
            }
            if((initRed!=red)|(initGreen!=green)|(initBlue!=blue)){
            	nBloc++;
            	initRed = red;
            	initGreen = green;
            	initBlue = blue;
            }
        }
        return nBloc;
    }
     
    function getRGBValue(nWidth, nHeight){
    	//taille en pixel de un carré
    	widthBloc = getWidth()/nWidth;
    	heightBloc = getHeight()/nHeight;
     
    	for(x=0; x<nWidth; x++){
    		for(y=0; y<nHeight; y++){
    			makePoint(widthBloc/2 + x*widthBloc, heightBloc/2 + y*heightBloc);
    			RGBValue = getPixel(widthBloc/2 + x*widthBloc, heightBloc/2 + y*heightBloc);
    			print(widthBloc/2 + x*widthBloc);
    		        red = (RGBValue>>16)&0xff;
                		green = (RGBValue>>8)&0xff;
                		blue = RGBValue&0xff;
                		data = "R:" + red + " G:" + green + " B:" + blue;
                		column = "X "+ x;
                		setResult(column, y, data);
    		}
    	}
    }

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Waow !, merci mille fois !
    Je vais essayer ce code dès que possible...

    Seb

  7. #7
    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
    Il faut que tu commences par diviser l'image afin d'isoler chaque carré. Vu que tu connais le nombre de ligne/colonnes, c'est une division.
    Etant donné que tu utilises du jpg (TRES MAUVAISE idée en traitement d'images), tu dois ensuite faire la moyenne de chaque canal pour un carré donné.
    A ce stade, tu as donc une couleur homogène pour chaque carré.

    La seule chose étant de déterminer une métrique afin comparer les couleurs et ainsi déterminer si deux couleurs sont égales ou différentes.
    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.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/01/2010, 11h08
  2. Compter des cellules de couleurs différentes
    Par solorac dans le forum Excel
    Réponses: 3
    Dernier message: 13/06/2007, 11h24
  3. Créer des carrés de couleur
    Par popogendarme dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 21/03/2007, 16h02
  4. Méthode rapide pour afficher des carré de couleur
    Par matteli dans le forum DirectX
    Réponses: 7
    Dernier message: 03/12/2006, 19h50
  5. [JTable] couleur de sélection dans une JTable
    Par spoutyoyo dans le forum Composants
    Réponses: 7
    Dernier message: 06/12/2004, 11h43

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