Publicité
+ Répondre à la discussion
Page 2 sur 2 PremièrePremière 12
Affichage des résultats 21 à 29 sur 29
  1. #21
    Invité régulier
    Profil pro peace tender
    Inscrit en
    mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Nom : peace tender

    Informations forums :
    Inscription : mai 2010
    Messages : 6
    Points : 7
    Points
    7

    Par défaut

    Salut,
    j'ai fait ce code pour prendre le pixels d'image comme entrée , mais j'ai l'erreur : ImageTest.java:30: '.class' expected
    return d[];
    ^
    Comme je suis nouveau à java j'ai une dificulté de cprrecter cette erreur, est-ce que vous peuvent m'aider de trouver le cause de cette erreur? Sinon, est-ce que vous aves un programme qui lit les niveaux de gris des pixels de l'image commme entree pour l'algorithme EM. Merci beaucoup en avance et je vous remercie pour tous l'aide que vous avez me donne.
    Code java :
    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
     
    import java.io.*;
    import java.awt.*;
    import java.util.*;
    import java.awt.image.PixelGrabber;
     
     
     
    public class ImageTest {
    public static byte[] readImage(String file){
    Image image = Toolkit.getDefaultToolkit().getImage(file);
    MediaTracker tracker = new MediaTracker (new Component() {});
    tracker.addImage(image,0);
    try {
    tracker.waitForID(0);
    PixelGrabber grabber = new PixelGrabber(image, 0, 0, -1, -1, false);
    if(grabber.grabPixels()){
    int nc = grabber.getWidth();
    int nr = grabber.getHeight();
    if (bytesAvailable(grabber)){
    byte[] data = (byte[])grabber.getPixels();
    double[] d = getData(data);
    }
     
    }
     
    }
     
    //MediaTracker tracker = new MediaTracker (new Component() {});
    //tracker.addImage(image,0);
    //try{tracker.waitForID(0);}
    catch (InterruptedException e) {e.printStackTrace();}
    return d[];
    }
     
    public static final boolean bytesAvailable(PixelGrabber pg){
    return pg.getPixels() instanceof byte[];
    }
    //convert image byte data to double
    public static double[] getData (byte[] data) {
      ByteArrayInputStream byte_in = new ByteArrayInputStream (data);
      DataInputStream data_in = new DataInputStream (byte_in);
      double[] d = data_in.readDouble ();
    return d;
    }
     
    public static void main(String[] argv) {
    if (argv.length>0) { double[] I = readImage(argv[0]);
     
    		// initial guess for the laws parameters (uniform)
    		int G=2;
     
    		Law[] laws = new Law[G];
     
    		laws[0] = new NormalDistribution(30.0,1.0);
     
    		laws[1] = new NormalDistribution(130.0,2.0);			
     
    		// perform EM algorithm
     
    		double pi[] = Algorithm.algorithmEM(x, laws);		 
     
    		// display mixture coefficients and law parameters
     
    		for(int k=0;k<G;k++)
     
    			System.out.printf("%f * %s\n",pi[k],laws[k]);
    	}
     
    }
     
    }

  2. #22
    Rédacteur/Modérateur
    Avatar de pseudocode
    Homme Profil pro Xavier Philippeau
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 961
    Détails du profil
    Informations personnelles :
    Nom : Homme Xavier Philippeau
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 961
    Points : 15 082
    Points
    15 082

    Par défaut

    Citation Envoyé par hsalam Voir le message
    Salut,
    j'ai fait ce code pour prendre le pixels d'image comme entrée , mais j'ai l'erreur : ImageTest.java:30: '.class' expected
    return d[];
    ^
    Comme je suis nouveau à java j'ai une dificulté de cprrecter cette erreur, est-ce que vous peuvent m'aider de trouver le cause de cette erreur? Sinon, est-ce que vous aves un programme qui lit les niveaux de gris des pixels de l'image commme entree pour l'algorithme EM. Merci beaucoup en avance et je vous remercie pour tous l'aide que vous avez me donne.
    1ere remarque sur le principe : convertir la couleur d'un pixel en "double" ca n'est pas toujours évident. Un pixel etant constitué de 3 composantes (R,G,B), on calcule généralement sa valeur d'intensité lumineuse : I=0.299*R + 0.587*G + 0.114*B

    2eme remarque sur le code : pour lire une image en Java, il y a plu simple que le MediaTracker : la classe ImageIO.

    3eme remarque sur l'algo : le paramètre initial "sigma" pour les 2 lois est trop faible : une variance de 1 ou 2, sur une plage de [0-255] ca ne fait pas beaucoup. La plupart des pixels auront au départ une proba quasi nulle d'appartenir a l'une des lois.

    D'ou ma version de ton code :
    Code java :
    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
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
     
    public class ImageTest {
     
    	public static double[] readImage(String pathname) throws IOException {
    		// read image
    		File f = new File(pathname);
    		BufferedImage bi = ImageIO.read( f );
     
    		// convert pixels to double[]
    		int W = bi.getWidth(), H=bi.getHeight();
    		double[] d = new double[W*H];
    		int i=0;
    		for(int y=0;y<H;y++)
    			for(int x=0;x<W;x++) {
    				// get R,G,B components and convert to intensity
    				int rgb = bi.getRGB(x, y);
    				int r = (rgb>>16)&0xFF, g=(rgb>>8)&0xFF, b=(rgb>>0)&0xFF;
    				d[i++] = 0.299*r + 0.587*g + 0.114*b;
    			}
    		return d;
    	}
     
    	public static void main(String[] argv) {
    		if (argv.length > 0) {
     
    			double[] x;
    			try {
    				x = readImage(argv[0]);
    			} catch (IOException e) {
    				e.printStackTrace();
    				return;
    			}
     
    			// initial guess for the laws parameters (uniform)
    			int G = 2;
     
    			Law[] laws = new Law[G];
     
    			laws[0] = new NormalDistribution(30.0, 10.0);
    			laws[1] = new NormalDistribution(130.0, 10.0);
     
    			// perform EM algorithm
     
    			double pi[] = Algorithm.algorithmEM(x, laws);
     
    			// display mixture coefficients and law parameters
     
    			for (int k = 0; k < G; k++)
    				System.out.printf("%f * %s\n", pi[k], laws[k]);
    		}
    	}
     
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #23
    Invité régulier
    Profil pro peace tender
    Inscrit en
    mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Nom : peace tender

    Informations forums :
    Inscription : mai 2010
    Messages : 6
    Points : 7
    Points
    7

    Par défaut

    Merci beaucoup, vous êtes très gentil. Mais mon image est déja en niveau de gris! je ne besoin pas de convertir les components en niveaux de gris. alors j'enlever le partie de conversion? ou quoi? et pour executer le programme je tape sur la terminale : javac ImageTest 46.jpeg?(46.jpeg est le nom de mon image placé dans la même repertoire)
    Merci

  4. #24
    Rédacteur/Modérateur
    Avatar de pseudocode
    Homme Profil pro Xavier Philippeau
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 961
    Détails du profil
    Informations personnelles :
    Nom : Homme Xavier Philippeau
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 961
    Points : 15 082
    Points
    15 082

    Par défaut

    Citation Envoyé par hsalam Voir le message
    Merci beaucoup, vous êtes très gentil. Mais mon image est déja en niveau de gris! je ne besoin pas de convertir les components en niveaux de gris. alors j'enlever le partie de conversion? ou quoi?
    Non, ce code fonctionne aussi avec les images en niveaux de gris.

    et pour executer le programme je tape sur la terminale : javac ImageTest 46.jpeg?(46.jpeg est le nom de mon image placé dans la même repertoire)
    Il faut d'abord compiler le code (avec javac), puis l'executer (avec java):
    javac ImageTest.java
    java ImageTest 46.jpeg
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #25
    Futur Membre du Club
    Inscrit en
    avril 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : avril 2009
    Messages : 37
    Points : 17
    Points
    17

    Par défaut

    j'ignorais qu'il ya une implémentation de EM sur developpez ^^" , un inconvénient de compter sur google ts les jours


    je n code pas par java mais j'ai analysé votre programme , j'ai une simple question est-ce que votre programme traite les dimension , car j'ai vu que vous avez donné au X(i) qu'une seul valeur , et s'il admet n'importe quel nombre de clusters ( ya pas de limites ! )


    ( dans mon cas chaque X(i) est représenté par D dimensions
    X(i) = ( v1, v2 ,...,v2) , actuellement je travail avec D = 2 )


    merci pour ce code qui ma bcp aider a la conception

  6. #26
    Rédacteur/Modérateur
    Avatar de pseudocode
    Homme Profil pro Xavier Philippeau
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 961
    Détails du profil
    Informations personnelles :
    Nom : Homme Xavier Philippeau
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 961
    Points : 15 082
    Points
    15 082

    Par défaut

    Citation Envoyé par Qt forever Voir le message
    j'ignorais qu'il ya une implémentation de EM sur developpez ^^" , un inconvénient de compter sur google ts les jours

    je n code pas par java mais j'ai analysé votre programme , j'ai une simple question est-ce que votre programme traite les dimension , car j'ai vu que vous avez donné au X(i) qu'une seul valeur , et s'il admet n'importe quel nombre de clusters ( ya pas de limites ! )
    Dans le code que j'ai posté, un échantillon est un réel (double). Pour utiliser d'autre type d'échantillons, il faut changer les signatures des méthodes (et le code associé naturellement).

    Le principe de l'algo EM ne change pas. Les seules modifications du code de l'algo concernent le changement de signature.

    Le gros changement est dans l'implémentation des Lois, qui sont bien sur différentes pour une loi normale 1D et une loi normale 2D
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #27
    Futur Membre du Club
    Inscrit en
    avril 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : avril 2009
    Messages : 37
    Points : 17
    Points
    17

    Par défaut

    merci bcp pour votre explication


    maintenant après avoir " les means et les poids " de clusters je pense d'implémenter votre image que vous avez met dans "" ce poste ""

    pouvez vous svp m'orienter pour pouvoir l'implémenter ? les outils nécessaires ( si vous avez utilisé un outil(logiciel , biblio ... ) ou les paramètres d'entrées que vous donnez à l'algo pour la dessiner !

  8. #28
    Invité régulier
    Femme Profil pro nesrin ghariani
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Nom : Femme nesrin ghariani
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5
    Points : 5
    Points
    5

    Par défaut

    Bonjour, est ce qu'on peut trouver un package qui génère les lois de probabilité, sous ecplise?

  9. #29
    Invité de passage
    Homme Profil pro Denis DDS
    Bio-Informaticien
    Inscrit en
    février 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis DDS
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bio-Informaticien
    Secteur : Service public

    Informations forums :
    Inscription : février 2012
    Messages : 1
    Points : 2
    Points
    2

    Par défaut

    Bonjour,

    Je me permet de posté sur ce forum une source qui peux aider: le logiciel de data-mining weka implémente une version assez proche de l'algorithme EM.

    Pour accéder au fichier source, EM.java, il suffit de télécharger le logiciel puis d'explorer le jar weka-src.jar. Le .java se trouve ici: /src/main/java/weka/clusterers/

    Le code est très proche de celui de pseudocode.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •