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 :

Probleme getPixel imageJ


Sujet :

ImageJ Java

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2008
    Messages : 107
    Par défaut Probleme getPixel imageJ
    Bonjour,
    Je ne sais pas si qqn pourra m'aider mais je me trouve face a une probleme. Je viens de commencer l'implementation d'un plugin pour imageJ et je dois pouvoir recuperer la valeur d'un pixel [x,y] sachant que je travaille sur des sequences d'images.
    J'ai essaye la fonction getPixel et lorsque je compile j'ai une erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    D:\ImageJ\plugins\Molecule_Tracker_.java:61: incompatible types
    found   : int[]
    required: int
    			int pixels = imp.getPixel(x,y);
    Si qqn peut m'aider, merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Par défaut
    Première tentative de réponse soyez indulgent :

    le type de pixels ça ne serait pas COLORREF plutôt que int?

  3. #3
    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 : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    quel est le type de imp ?
    Selon le type d'image, tu obtiendras un tableau d'int plutôt qu'un int.
    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.

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2008
    Messages : 107
    Par défaut
    boujour,
    Mon image est de type ImagePlus, je ne sais pas trop la difference entre ca ou imageProcessor.
    Si qqn peut me lexpliquer en plus du reste.

    Pour ce qui est du type des pixels, d'apres mes documents c'est bien un entier. Surtout que mes images sont en noir et blanc, il n'y a donc bien qu'une seule comppsante.

  5. #5
    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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Y a un truc en Java qui s'appelle la "javadoc". C'est rudement pratique.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /**
    Returns the pixel value at (x,y) as a 4 element array. Grayscale values
    are retuned in the first element. RGB values are returned in the first
    3 elements. For indexed color images, the RGB values are returned in the
    first 3 three elements and the index (0-255) is returned in the last.
    */
    public int[] getPixel(int x, int y) { ... }

    Je te conseille tout de meme d'utiliser la classe PixelGrabber si tu dois recuperer beaucoup de pixels.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2008
    Messages : 107
    Par défaut
    Dans mon cas c'est juste la valeur d'un pixel que je recupere donc je pense que c'est approprie. Le soucis c'est que je ne comprends pas bien comment ca marche est ce que ca recupere la valeur du pixel x,y pour toutes les images de ma sequences ?

  7. #7
    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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Kro86 Voir le message
    est ce que ca recupere la valeur du pixel x,y pour toutes les images de ma sequences ?
    non, ca récupere la valeur du pixel sur l'image/slice courant. Cette valeur est retournée sous la forme d'un tableau de 4 entiers.

    • Si l'image est en niveau de gris, seul le 1er entier du tableau est utilisé et représente la valeur du gris (0=noir -> 255=blanc)
    • Si l'image est en RVB, les 3 premiers entiers du tableaux sont utilisés et représentent la valeur des 3 canaux Rouge, Vert et Bleu
    • Si l'image utilise une palette, les 3 premiers entiers du tableaux représentent la couleur RVB (cf ci-dessus) et le 4eme entier représente l'index dans la palette
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2008
    Messages : 107
    Par défaut
    J'ai un petit soucis au niveau de l'image courante, comment on la declare parce que je fais une boucle sur les numeros de slice mais j'ai l'impression que la fonction getPixel n'en tient pas compte.

  9. #9
    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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Kro86 Voir le message
    J'ai un petit soucis au niveau de l'image courante, comment on la declare parce que je fais une boucle sur les numeros de slice mais j'ai l'impression que la fonction getPixel n'en tient pas compte.
    D'après le code c'est sensé être pris en compte. Tu es sur que ton image contient des slices ?

    int nmbslices = myimage.getNSlices();
    System.out.println("myimage slices = "+nmbslices);
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  10. #10
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2008
    Messages : 107
    Par défaut
    Mon image contient 240 slices.

    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
     
    for (int i = frame ; i <= max ; i++) {
       int[] pixels = (int[]) imp.getPixel(x,y);
     
       // if the grayscale is the same => no change, the molecule didn't move
       if (pixels[0] == 0) {
          IJ.write ( "  " + i + " \t  " + x + " \t  " + y + " \t No change");
     
          // else it researchs the new position of the molecule	
       } else {
          for (int ind = x; ind >= 0; ind--) {
    	pixels = (int[]) imp.getPixel(ind,y);
    	if (pixels[0] == 0) {
                    IJ.write ( "  " + i + " \t  " + ind + " \t  " + y + " \t Movement of the molecule");
    	   track (imp,ind,y,i);
    	   return;
    	}	
       }
       return;
    			}
    Je crois que je ne precise a aucun moment que lón change de slice, mais je ne sais pas comment faire.
    Merci pour votre aide.

  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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Kro86 Voir le message
    Je crois que je ne precise a aucun moment que lón change de slice
    C'est sur que ca ne va pas aider.

    Essaye la methode "setSlice()" de ImagePlus.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  12. #12
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2008
    Messages : 107
    Par défaut
    Desolee, je ne trouve pas dans ma doc, comment utiliser cette fonction, je dois stocker ca dans une variable ?

  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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Kro86 Voir le message
    Desolee, je ne trouve pas dans ma doc, comment utiliser cette fonction, je dois stocker ca dans une variable ?
    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
     
    // nmb total de slices
    int nbSlices = imp.getNSlices();
     
    // pour chaque slice
    for (int i = 1 ; i <= nbSlices ; i++) {
     
       // selectionne le slice courant
       imp.setSlice(i);
     
       // lecture du pixel (x,y) dans le slice courant
       int[] pixels = imp.getPixel(x,y);
     
       /* ... suite du code ici ... */
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  14. #14
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2008
    Messages : 107
    Par défaut
    Merci beaucoup, je venais juste d'y arriver.
    Desolee, j'ai encore un probleme quand j'utilise la fonction putPixel :
    void putPixel (int x, int y, int value);
    J'ai une erreur qui me dit quíl ne trouve pas cette fonction.

  15. #15
    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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Kro86 Voir le message
    J'ai une erreur qui me dit quíl ne trouve pas cette fonction.
    Il n'y a pas de decorateur dans ImagePlus pour cette methode. Il faut passer par ImageProcessor. D'ailleur ca serait bien de passer par là meme pour le getPixel.

    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
     
    // nmb total de slices
    int nbSlices = imp.getNSlices();
     
    // pour chaque slice
    for (int i = 1 ; i <= nbSlices ; i++) {
     
       // selectionne le slice courant
       imp.setSlice(i);
     
       // recupere le processeur associé au slice courant
       ImageProcessor processor = imp.getProcessor();
     
       // lecture du pixel
       int[] pixels = processor.getPixel(x,y);
     
       /* ... */
     
       // ecriture du pixel
       processor.putPixel(x,y,intvalue);
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  16. #16
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2008
    Messages : 107
    Par défaut
    Bonjour,
    J'ai utilise comme vous me l'avez suggere de passer par ImageProcessor et c'est sur que ca marche beaucoup mieu, mon programme arrive a suivre les molecules. Le probleme est que j'ai plusieurs contraintes que je ne sais pas comment gerer. Il faudrait que je trouve le centre de la molecule et pour le moment je n'arrive qu'a trouver le point le plus proche de la derniere position car je m'appuie simplement sur le fait que les molecules sont blanches.
    De plus il arrive qu'une molecule disparaisse durant une ou deux frames et je ne sais pas comment gerer ca avec un algorithme.

    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
    public void track (ImagePlus imp, int x, int y, int frame) {
     
    		// Number of frames in the movie
    		int max = imp.getStackSize ();
    		frame ++;
    		if (frame == max + 1){
    			return; // if the movie is finished
    		}
     
    		// select the current slice
    		imp.setSlice (frame);
    		// associate current slice with processor
    		ImageProcessor processor = imp.getProcessor();
     
    		// research of the value of the pixel (x,y)
    		int pixels = processor.getPixel(x,y);
     
    		// if the grayscale is the same => no change, the molecule didn't move
    		if (pixels == 0) {
    			IJ.write ( "  " + frame + " \t  " + x + " \t  " + y + " \t No change");
    			track (imp,x,y,frame);
    			return ;
     
    		// else it researchs the new position of the molecule	
    		} else {
    			int min = 150;
    			int xmin = 0, ymin = 0;
    			for (int ys = y - 10; ys <= y + 10; ys ++) {
    				for (int xs = x; xs >= 0; xs--) {
    					// research of the value of the pixel (xs,ys)
    					pixels = processor.getPixel(xs,ys);
    					// I eliminate the trajectories superior to 150 pixels
    					if ((pixels == 0) && (x - xs < min)) {
    						min = x - xs;
    						xmin = xs;
    						ymin = ys;
    					}
    				}
    			}
    			if (min != 150) {
    				IJ.write ( "  " + frame + " \t  " + xmin + " \t  " + ymin + " \t Movement of the molecule");
    				track (imp,xmin,ymin,frame);
    				return;
    			} else { IJ.write ( "  " + frame + " \t  " + x + " \t  " + y + " \t No change");
    				track (imp,x,y,frame);
    				return;
    			}
    		}	
    	}
    Je sais pas si je suis tres claire, hesiter pas a me demander plus de details.

Discussions similaires

  1. [ImageJ] Probleme d'utilisation de plugins
    Par Kro86 dans le forum ImageJ
    Réponses: 5
    Dernier message: 06/08/2008, 16h25
  2. erreur d'execution probleme avec GetPixel
    Par ralf91 dans le forum C#
    Réponses: 3
    Dernier message: 11/04/2008, 11h26
  3. probleme utilisation getpixel
    Par nicolovitch dans le forum Windows
    Réponses: 3
    Dernier message: 14/05/2007, 08h00
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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