Précédent   Forum du club des développeurs et IT Pro > Autres langages > Algorithmes > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/05/2010, 10h33   #21
hsalam
Invité régulier
 
peace tender
Inscription : mai 2010
Messages : 6
Détails du profil
Informations personnelles :
Nom : peace tender

Informations forums :
Inscription : mai 2010
Messages : 6
Points : 7
Points : 7
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]);
	}
 
}
 
}
hsalam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2010, 11h31   #22
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 457
Points : 16 457
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.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2010, 11h50   #23
hsalam
Invité régulier
 
peace tender
Inscription : mai 2010
Messages : 6
Détails du profil
Informations personnelles :
Nom : peace tender

Informations forums :
Inscription : mai 2010
Messages : 6
Points : 7
Points : 7
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
hsalam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2010, 12h13   #24
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 457
Points : 16 457
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.

Citation:
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):
Citation:
javac ImageTest.java
java ImageTest 46.jpeg
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 04h33   #25
Qt forever
Futur Membre du Club
 
Inscription : avril 2009
Messages : 37
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 37
Points : 17
Points : 17
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
Qt forever est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 10h11   #26
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 457
Points : 16 457
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.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 19h25   #27
Qt forever
Futur Membre du Club
 
Inscription : avril 2009
Messages : 37
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 37
Points : 17
Points : 17
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 !
Qt forever est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 15h52   #28
gharines
Invité régulier
 
Femme nesrin ghariani
Étudiant
Inscription : 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
Bonjour, est ce qu'on peut trouver un package qui génère les lois de probabilité, sous ecplise?
gharines est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2012, 18h30   #29
Toliman
Invité de passage
 
Homme Denis DDS
Bio-Informaticien
Inscription : 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
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.
Toliman est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h19.


 
 
 
 
Partenaires

Hébergement Web