Java

Le forum informatique pour discuter programmation, logiciels, os, etc...

Java

Messagepar Melody » 22 Avr 10 à 18:59

Bon j'ai vite fait fouillé, j'ai pas trouvé de sujet sur ça.

Donc je m'explique, je suis en DUT chimie et dans mon stage en entreprise, on me demande de créer une macro sous ImageJ en java pour pouvoir automatiser le fait qu'on mesure une hauteur de fluide (parce que bon, sur 1200photos, ça serais mieux xD)

Sauf que voila je n'ai JAMAIS fait de programmation (sauf sous exel... Mais bon ça compte pas les macro sous exel c'est trop simple xD) donc si quelqu'un avais du temps à me consacrer je développerais un peu plus sur ce que je désire faire. Par contre le problème c'est que je fait pas partie des grosse nunuches qui se contente de récuperer un code et le balancer, je veut comprendre et plutôt le faire moi même en apprenant (si vous avez des bon site pour apprendre) et si possible quelqu'un qui m'aide a corriger les erreurs et avancer dans le truc.
Donc voila,

:terra:
~Epouse de Shadow_project11 le BG <3 ~

Image
Melody
Ange des Ténèbres
Avatar de l’utilisateur
 
Messages: 1358
Inscription: 10 Mar 09 à 20:43
Localisation: 91
Sexe: Femme

Re: Java

Messagepar Kuja Ier » 22 Avr 10 à 19:03

Le site du zéro est pas trop mal fait pour comprendre les bases. Je dis bien "comprendre", ça ne veut pas forcément dire que tu sauras bien coder après, j'ai eu un peu de mal x)
Je l'ai utilisé car je ne comprenais pas le langage C. Au final, c'est vrai qu'on comprend mieux comment ça marche, même si après il faut pratiquer...

http://www.siteduzero.com/tutoriel-3-10 ... -java.html
Lorsqu’une âme est plongée dans un état d’oubli d’elle-même, son parcours l’amènera naturellement à vouloir redevenir Lumière. Voilà le sens de la grande aventure humaine.

Pour savoir qui vous dirige vraiment, il suffit de regarder ceux que vous ne pouvez pas critiquer.
Kuja Ier
Bugueur forum
Avatar de l’utilisateur
 
Messages: 7837
Inscription: 08 Avr 06 à 22:45
Localisation: Là où on ne m'attend pas...
Sexe: Homme

Re: Java

Messagepar TheUltimaSephiroth » 22 Avr 10 à 21:29

Développe un peu plus le travail sur le topic. Il y a quelques programmeurs normalement dans le coin ;-)
T.U.S. ©Wedge alias Chapo - Août 2004
Wedge ©Chapo - 2003
TheUltimaSephiroth
Webmaster TUS
Avatar de l’utilisateur
 
Messages: 1486
Inscription: 09 Nov 05 à 15:59
Localisation: Ici et là-bas aussi
Sexe: Non spécifié

Re: Java

Messagepar Melody » 23 Avr 10 à 19:47

Merci kuja, je lirais ça des que j'aurais internet au bureau =_=

Donc en fait en gros le but, c'est de pouvoir à partir d'une photo d'un becher qui contient deux phases (une blanche une noir en simplifié) pouvoir compter le nombre de pixel entre le bas du becher et la limite entre les deux phases.

Et ensuite y insérer un calcul (dont j'ai déjà déterminé la formule grâce a des test, et validé le tout) afin de transformer ce nombre de pixel en un volume. (ça après osef, j'ai juste a y ajouter une formule "style A*Xpixel + B = volume" et le volume sur chaque photo apparaitra dans un tableau de mesure, les tableau de mesure existe déjà sous imageJ donc je suppose qu'il n'y a pas trop de choses a faire)

Après j'ai par exemple déjà vu qu'on pouvais ouvrir tout les fichier d'un dossier en même temps, donc faire l'analyse sur tous en même temps serais cool. Car en fait sur une annalyse il y a plus de 200 photos... Donc faut que je tente de rendre ça le plus simple possible pour l'utilisateur, pour le moment j'ai juste un fichier exel qui transforme le nombre de pixel en volume, mais faut les recopier manuellement et surtout prendre les mesure manuellement (c'est rapide, mais sur 200 photo....)

JE sais pas trop si je suis claire en fait... =_=

Edit: En fin de compte, je calcul le % de pixel noir et de blanc pour ensuite en déduire le volume, c'est plus simple. J'ai repris et modifié la macro faite par un mec avant moi au labo, mais ça merdouille, quand je met une image totalement blanche il me dit 100% de noir, et avec une noir, il me dit qu'il y a du blanc et du noir :V Pourtant de ce que j'ai compris de sa macro ça a l'air correct. Donc voilà ce que j'ai.

Code: Tout sélectionner
//////////// TRAITEMENT IMAGE //////////



macro "TraitementImage [F1]" {
   run("Arbitrarily..."); //angle de rotation
      if (selectionType()==-1) { // fonction pour la sélection
      showMessage ("Tracer un rectangle de sélection puis appuyer sur la touche espace");
      while (isKeyDown("space")==false) {
         wait(100);
      }
      run("Crop");
      run("Enhance Contrast");
      run("Make Binary");
   } else {
   run("Crop");
   run("Enhance Contrast");
   run("Make Binary");
}


/////////// ANALYSE D'IMAGE //////////



macro "AnalyseImage [F2]" {
   var B=0; // blanc
   var N=0; // noir
   var H=getHeight; // hauteur en pixels de l'image
   var L=getWidth; // largeur en pixels de l'image
   f=File.open(""); // fichier de données
   for(z=1;z<=nSlices;z+=1) {// boucle sur chaque image du fichier .tiff
      setSlice(z); // afficher la slide z
      N=0;
      B=0;
      for(x=0;x<H;x+=1) {
         for(y=0;y<L;y+=1) {
            if (getPixel(x, y)==0) { // fonction qui retourne la valeur d'un pixel en RGB
               N=N+1;
            } else {
               B=B+1;
            }
         }
      }
D=L*H;
Tb=B*100/D;
Tn=N*100/D;
Tot=Tn+Tb;
E=B+N;
      print ("pixels totales : "+D);
      print ("nombre pixel blanc : "+B);
      print ("nombre pixel noir : "+N);
      print ("nombre pixel blanc + noir : "+E);      
      print ("pourcentage de blanc : "+Tb);   
      print ("pourcentage de noir : "+Tn);
      print ("pourcentage total : "+Tot);   
   }
   showMessage("Traitement Terminé");
}


Finalement j'ai supprimé la partie analyse pour mettre une autre macro qui fonctionne, mais j'aimerais comprendre pourquoi celle là bug. :V

(et voila par quoi je l'ai remplacée:)

Code: Tout sélectionner
  requires("1.32g");
  black = 0;
  white = 255;
  getHistogram(0, hist, 256);
  total = 0;
  for (i=0; i<256; i++)
      total += hist[i];
  print("");
  print("Pixels noir: " + hist[black]);
  print("Pixels blanc: " + hist[white]);
  print("Pourcentage de pixel noir:" +100*hist[black]/total);
  print("Pourcentage de pixel blanc:" +100*hist[white]/total);
  print("Noir/ Blanc ratio: " + hist[black]/hist[white]);
Dernière édition par Melody le 23 Avr 10 à 19:51, édité 1 fois.
~Epouse de Shadow_project11 le BG <3 ~

Image
Melody
Ange des Ténèbres
Avatar de l’utilisateur
 
Messages: 1358
Inscription: 10 Mar 09 à 20:43
Localisation: 91
Sexe: Femme

Re: Java

Messagepar TheUltimaSephiroth » 24 Avr 10 à 19:36

Pour la macro qui bug, déjà le nom des variables est horrible xD. Il facilite pas la compréhension et il y a du code pour les boucles, notamment, qui est assez amusant (tout en étant correcte) du style : "z+=1" à la place de tout simplement z++ :-P . Sinon, pour le code : j'ai l'impression que la fonction getPixel() doit merdouiller (tu n'as pas le code ?).

La seconde macro m'a l'air largement mieux ;-)
T.U.S. ©Wedge alias Chapo - Août 2004
Wedge ©Chapo - 2003
TheUltimaSephiroth
Webmaster TUS
Avatar de l’utilisateur
 
Messages: 1486
Inscription: 09 Nov 05 à 15:59
Localisation: Ici et là-bas aussi
Sexe: Non spécifié

Re: Java

Messagepar Melody » 24 Avr 10 à 19:56

Bah pour l'info, les deux macro "analyse" je les ai récupéré (n'ayant pas accès a internet, j'en ai déjà assé chié pour faire le traitement d'image xD), mais le mec qui a fait la premiere (qui bug) était dans mon cas, il venais d'un DUT chimie et c'est retrouvé a faire du Java qu'il na jamais vu. Donc le z+=1 au lieu de z++ semble plus logique quand on connais pas peut être XD
Il y a d'ailleurs énormément de choses que je ne comprend pas dans leurs macro (enfin plutot les thermes comme quesque ça fait le "Slices", ou quoi que c'est le z++ :V ) je comprend la logique de leurs raisonnement en gros mais je manque d'info sur le Java pour bien comprendre ^^" (je rappelle que je n'ai pas de PC au labo, donc je prend les 3 trucs que ma imprimé ma tutrice ^^")

La seconde marche nikel (en même temps ma tutrice la trouvée sur le site du logiciel XD), donc pour mon travaille je vais la garder, mais le problème c'est que au labo ils se servent de la première, donc si elle bug, fraudais que je les prévienne et si possible corrige ça.


Pour le getpixel, je vais voir ça lundi au labo si je peu le récupérer.
~Epouse de Shadow_project11 le BG <3 ~

Image
Melody
Ange des Ténèbres
Avatar de l’utilisateur
 
Messages: 1358
Inscription: 10 Mar 09 à 20:43
Localisation: 91
Sexe: Femme

Re: Java

Messagepar TheUltimaSephiroth » 24 Avr 10 à 21:15

Pour le "Slice", je n'en ai pas plus idée que toi. Faudrait voir où se trouve nSlices et comment il est assigné et que fait exactement le setSlice...

Pour le nomvariable++, ça permet tout simplement d'incrémenter la variable d'une unité. C'est quelque chose de très courant en programmation, il est plus facile et rapide d'écrire i++ que i +=1.
T.U.S. ©Wedge alias Chapo - Août 2004
Wedge ©Chapo - 2003
TheUltimaSephiroth
Webmaster TUS
Avatar de l’utilisateur
 
Messages: 1486
Inscription: 09 Nov 05 à 15:59
Localisation: Ici et là-bas aussi
Sexe: Non spécifié

Re: Java

Messagepar Melody » 29 Avr 10 à 17:18

Ok merci.


Donc voilà j'ai (encore !) un problème, j'ai amélioré ma macro, elle marche nikel, mais j'aimerais pouvoir directement tracer avec les point que j'ai obtenu à la fin ma ourbe en fonction du temps, je tenté de trouver des macro explicant comment faire, j'ai rien trouvé, c'est possible a faire sous java?
~Epouse de Shadow_project11 le BG <3 ~

Image
Melody
Ange des Ténèbres
Avatar de l’utilisateur
 
Messages: 1358
Inscription: 10 Mar 09 à 20:43
Localisation: 91
Sexe: Femme

Re: Java

Messagepar TheUltimaSephiroth » 29 Avr 10 à 23:35

Ceci pourrait peut-être t'aider pour le traçage de ligne : http://java.developpez.com/faq/gui/?pag ... ral_dessin

J'ai créé dernièrement une classe de graph en C# pour le boulot. C'est pas très compliqué (enfin, sauf quand ça part en zoom et autre :lol: ). Il faut juste faire la correspondance entre les valeurs et les pixels ;).
T.U.S. ©Wedge alias Chapo - Août 2004
Wedge ©Chapo - 2003
TheUltimaSephiroth
Webmaster TUS
Avatar de l’utilisateur
 
Messages: 1486
Inscription: 09 Nov 05 à 15:59
Localisation: Ici et là-bas aussi
Sexe: Non spécifié

Re: Java

Messagepar Melody » 30 Avr 10 à 16:51

Le problème pour la correspondance, c'est que par exemple, un premier utilisateur voudra faire les 60 première photos avec 30 secondes d'écart, et ensuite 50 avec 2 minutes d'écart puis 90 avec 30 minutes d'écart. Et ça a intégrer, ça risque d'être chaud =/ (déjà que je m'embrouille dans ma macro XD)

A moins que je fasse ensuite une macro sous exel pour ça (là au moins je m'y connais mieux, et je sais comment faire), mais dans ce cas, est-il possible d'envoyer les résultats sous exels directement?(surtout sur une fiche exel déjà existante) Et ça reglera le problème des courbes.
Mais ça fait quand même utiliser 3 logiciel different =/

Ha et aussi, j'ai pas réussis a trouver, mais voila, j'ai un appareil photo, et je sais que je peux avec le logiciel prendre des photos avec une webcam (et utiliser cette méthode me permettrais d'intégrer directement le temps sur ma courbe), c'est possible d'utiliser l'appareil photo comme webcam?
~Epouse de Shadow_project11 le BG <3 ~

Image
Melody
Ange des Ténèbres
Avatar de l’utilisateur
 
Messages: 1358
Inscription: 10 Mar 09 à 20:43
Localisation: 91
Sexe: Femme

Re: Java

Messagepar TheUltimaSephiroth » 30 Avr 10 à 22:22

Pour l'appareil photo comme webcam, je ne sais pas trop. Ça me dit vaguement quelque chose, mais je peux pas confirmer... Faudrait vérif. sur google.

J'ai du mal à comprendre le graphique que tu doit tracer et ce que c'est sensé représenté :V Et j'ai du mal à saisir la difficulté du coup =x

Pour Excel, il faudrait voir si il existe un plug-in/API pour Java... En C# ça existe en tout cas...
T.U.S. ©Wedge alias Chapo - Août 2004
Wedge ©Chapo - 2003
TheUltimaSephiroth
Webmaster TUS
Avatar de l’utilisateur
 
Messages: 1486
Inscription: 09 Nov 05 à 15:59
Localisation: Ici et là-bas aussi
Sexe: Non spécifié

Re: Java

Messagepar Melody » 30 Avr 10 à 22:44

En fait je prend des photos automatiquement d'une manip afin de ne pas avoir a la surveiller, en gros on mélange de l'eau et de l'huile, ça fait des bulles, mais comme on a ajouté des trucs, ça met du temps a se séparer. Et ce qu'on veut, c'est grace aux photos pouvoir en déduire le volume d'eau qui c'est séparé de l'émulsion (le fait que l'huile et l'eau se mélange), pour le moment j'ai réussis a faire une macro qui me permet de savoir le volume pour chaqu'une des photos que j'ai prise.

Et la courbe, c'est le volume d'eau séparé en fonction du temps.

Mais le problème c'est que pour les première minutes on relève le volume toutes les 10/20 ou 30 secondes (très rapidement donc) et ensuite on prend le volume de mois en moins longtemps. Donc mes photos n'ont pas toutes le même écart de temps, donc pour faire une courbe en fonction de temps automatiquement c'est pas si évident que ça.

Je sais pas si je suis très claire =/ (si non je peux mettre les photos mais je suis pas sure que ça soit plus clair xD)
~Epouse de Shadow_project11 le BG <3 ~

Image
Melody
Ange des Ténèbres
Avatar de l’utilisateur
 
Messages: 1358
Inscription: 10 Mar 09 à 20:43
Localisation: 91
Sexe: Femme

Re: Java

Messagepar TheUltimaSephiroth » 30 Avr 10 à 22:58

Il suffit de :
- prendre le temps de départ moins le temps de fin pour connaitre le Total en secondes (dépend de la précision).
- tracer un axe des X dont tu connais la longueur en Pixels.
- faire le calcul : Longueur pixel axe X / Total seconde pour avoir la correspondance 1secondes = X Pixel.
- faire pareil en Axe des Y avec les volumes.

Je ne vois pas trop la difficulté du coup ^^". Le fait que les prises de vues ne soient pas effectuées de façon constantes ne dérange pas du coup. Il suffit juste de considérer toutes les prises de vue ensemble.
T.U.S. ©Wedge alias Chapo - Août 2004
Wedge ©Chapo - 2003
TheUltimaSephiroth
Webmaster TUS
Avatar de l’utilisateur
 
Messages: 1486
Inscription: 09 Nov 05 à 15:59
Localisation: Ici et là-bas aussi
Sexe: Non spécifié

Re: Java

Messagepar Melody » 30 Avr 10 à 23:05

Je ne comprend pas ça en fait:

- tracer un axe des X dont tu connais la longueur en Pixels.
- faire le calcul : Longueur pixel axe X / Total seconde pour avoir la correspondance 1secondes = X Pixel.

comment je sais quelle photo correspond a Xpixel? O_o
~Epouse de Shadow_project11 le BG <3 ~

Image
Melody
Ange des Ténèbres
Avatar de l’utilisateur
 
Messages: 1358
Inscription: 10 Mar 09 à 20:43
Localisation: 91
Sexe: Femme

Re: Java

Messagepar TheUltimaSephiroth » 30 Avr 10 à 23:11

Pour la longueur de l'axe des X, c'ets toi qui voit en fonction de ce que tu veux.

Pour le reste, tu connais l'heure à laquelle à été prise la photo non ? Dans ce cas, il suffit de considérer (par exemple en secondes) qu'elle a été prise à la seconde N. De ce fait, vu que tu sais que Z pixels = 1 seconde, il suffit de faire N*Z pour connaitre l'emplacement de la photo sur l'axe des X.
T.U.S. ©Wedge alias Chapo - Août 2004
Wedge ©Chapo - 2003
TheUltimaSephiroth
Webmaster TUS
Avatar de l’utilisateur
 
Messages: 1486
Inscription: 09 Nov 05 à 15:59
Localisation: Ici et là-bas aussi
Sexe: Non spécifié

Re: Java

Messagepar Melody » 30 Avr 10 à 23:16

Bah non je ne connais pas l'heure de prise de la photo. Ou alors je peux récuperer cette info a partir de la photo? :V
LE but c'est que la personne qui utilise mon logiciel ai juste a mettre son bêcher face a l'appareil photo, régler le nombre de prises pour chaque séquence qu'il veut, et trouve sa courbe a la fin.
~Epouse de Shadow_project11 le BG <3 ~

Image
Melody
Ange des Ténèbres
Avatar de l’utilisateur
 
Messages: 1358
Inscription: 10 Mar 09 à 20:43
Localisation: 91
Sexe: Femme

Re: Java

Messagepar TheUltimaSephiroth » 30 Avr 10 à 23:26

Sans le temps, ça va donner un graphique bizarre non ? :V C'est un peu comme tracer un graphique sur une feuille de papier et mettre un point tous les centimètres, alors que certains espaces sont sensés être plus court que d'autre. A moins d'être sur que chaque séquence dure le même nombre de temps. A ce moment là, il suffit de répartir avec plus ou moins d'espaces dans le style par exemple :
- temps séquence 1 == temps séquence 2
- Séquence 1 = 60 photos, Séquence 2 = 30 photos
- Donc pour 2 photos Séquence 1, on a pris 1 photo séquence 2. Soit 2 fois plus de graduations sur une même longueur pour la séquence 1 par rapport à la séquence 2 ...

---

Sinon, ça dépend de l'appareil, mais actuellement pas mal d'appareil numérique ont la date de la prise de vue dans le fichier (ou il reste la date de création du fichier). Après si tu le fais via webcam, avec un logiciel dédié, rien ne t'empêcherais de sauver la photo sous un certain formatage de nom de fichier qui te permettrait de connaitre le moment exacte de prise de vue...
Dernière édition par TheUltimaSephiroth le 30 Avr 10 à 23:28, édité 1 fois.
T.U.S. ©Wedge alias Chapo - Août 2004
Wedge ©Chapo - 2003
TheUltimaSephiroth
Webmaster TUS
Avatar de l’utilisateur
 
Messages: 1486
Inscription: 09 Nov 05 à 15:59
Localisation: Ici et là-bas aussi
Sexe: Non spécifié

Re: Java

Messagepar Melody » 30 Avr 10 à 23:34

Bah c'est bien là mon problème ! Pour l'axe du temps. JE pense que créer une macro exel sera le plus simple et plus rapide pour moi. ou alors ordoner a la personne de prendre les photos toutes les 10 puis 2 puis 30 minutes par exemples et ensuite integrer les valeurs.
(avec genre X photos a Y secondes, puis Zphotos a W secondes,...)

En tout cas, merci pour les info ^^
Je verrais lundi ce que j'arrive a faire avec tout ça, et si j'ai (enfin) un pc avec internet au bureau je pourrais enfin faire des recherche =_="
~Epouse de Shadow_project11 le BG <3 ~

Image
Melody
Ange des Ténèbres
Avatar de l’utilisateur
 
Messages: 1358
Inscription: 10 Mar 09 à 20:43
Localisation: 91
Sexe: Femme

Re: Java

Messagepar Melody » 04 Mai 10 à 18:50

bonjour ! Désolé du double post, mais question importante :

J'ai cherché sur internet et impossible de trouver ce que je cherche, donc soit mon programme est pas en java (mais dans ce cas pourquoi le reste marche? Oo) soit, je suis une truffe =_=

Donc voilà je cherche comment faire apparaitre un message pour demander a l'utilisateur d'écrire un nombre dans la messagebow qui c'est ouvert. (je sait que en visual basic c'est possible mais en java? :v)
~Epouse de Shadow_project11 le BG <3 ~

Image
Melody
Ange des Ténèbres
Avatar de l’utilisateur
 
Messages: 1358
Inscription: 10 Mar 09 à 20:43
Localisation: 91
Sexe: Femme

Re: Java

Messagepar TheUltimaSephiroth » 04 Mai 10 à 21:31

Tu dois créer une fenêtre à laquelle du ajoute une JTextfield. Il n'existe pas de composant tout fait pour faire ça ^^". Il devrait y avoir des exemples normalement sur internet pour créer une Frame (fenêtre) et y ajouter un JTextField et JButton ;-)
T.U.S. ©Wedge alias Chapo - Août 2004
Wedge ©Chapo - 2003
TheUltimaSephiroth
Webmaster TUS
Avatar de l’utilisateur
 
Messages: 1486
Inscription: 09 Nov 05 à 15:59
Localisation: Ici et là-bas aussi
Sexe: Non spécifié

Suivante

Retourner vers Informatique


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron