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 :

Une macro pour une compilation de sélection ?


Sujet :

ImageJ Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Une macro pour une compilation de sélection ?
    Bonjour,

    J'ai un projet important à réaliser et je suis bien motivé pour apprendre tout sur ImageJ et la programmation Java nécessaire avec, bien que je parte de 0.

    Avant de me rendre compte que ce n'est pas possible, pourriez-me confirmer la possibilité de réaliser l'automatisation suivante
    + éventuellement quelques pistes si c'est possible, mais déjà la réponse à la faisabilité me donnerait espoir (photoshop étant vraiment trop lourd malgré une macro qui automatise les opérations suivantes) :

    Objectif : Création d'une image à partir de N images distinctes (N=4592 la plupart du temps), tel que l'image finale soit constituée de :

    - 1ère colonne de pixel de l'image n°1
    - la 2ème colonne de pixel de l'image n°2
    -...
    - 4592ème colonne de pixel de l'image n°4592

    Chaque colonne serait copier successivement les unes à côté des autres pour constitué l'ensemble de l'image finale


    Merci d'avance pour vos retours.
    Fred

  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,

    Oui, c'est possible et facile à réaliser avec le langage macro de ImageJ. Tu as toutes les fonctions macro disponible ici (https://imagej.nih.gov/ij/developer/...functions.html).
    Pour ta macro, tu pourrais créer une image vide (si tu connais la taille finale de ton image à créer), puis faire une boucle "for" pour ouvrir tes images les unes après les autres. Dans cette boucle "for", rajouter une deuxième boucle "for" qui lirais les pixels et les ecrirait dans l'image vide.

    Voila grossièrement ce que ça pourrait donner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    newImage(title, type, width, height, depth);
    for (i=0; i<nombre d'images dans le dossier 4592; i++)
    {
        open image
        for(y=0; y<nombre de pixel dans la colonne; y++)
        {
            selectionner image ouverte
            valeurPixel = get pixel (i; y)
            selectionner image vide
            setPixel (i; y; valeurPixel)
        }
        close Image
    }
    Je peux t'aider si tu bloques.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Déjà, merci pour la bonne nouvelle Tchoukatroc !

    Merci pour les pistes, voire le début de solution, je me penche dessus ce we.

    Fred

    PS : C'est globalement la macro que j'avais faite pour photoshop, mais avec la possibilité de copier une colonne entière directement (et non pas pixel par pixel) mais l'impossibilité dramatique d'aller directement à la colonne i, mais par incrémentation depuis la première colonne

  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
    Tu pourrais aussi faire une région de 1 pixel de large et n pixels de haut (makeRectangle(x, y, largeur, hauteur), et faire un copier coller de la colonne. Tu peux bouger ta région avec Roi.move(x, y). Cette méthode serait surement plus rapide que de récupérer la valeur pixel par pixel.
    Tu peux aussi utiliser la fonction SetBatchMode() si tu veux gagner en vitesse d’exécution de la macro.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bon, après essais, bricolages et recherches, je m'en suis sorti en faisant comme ça :

    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
     
     
    newImage("Coueron", "RGB", 4592, 3064, 1);
    imageTitle=getTitle()
    dir = getDirectory( "Choose the Directory" ); 
    list = getFileList( dir );                                                // je comprend pas bien la manip encore, mais ca marche
    i=0;
    setBatchMode(true);
    while (i<=4591)
    {
    	open( dir + list[i]);
    	makeRectangle(i,0,1,3064);
    	run("Copy");
    	selectWindow(imageTitle);
    	run("Paste");                                         // là, le pbme, c'est qu'il colle automatiquement au centre de l'image, 
    	run("Copy");                                         //donc je recopie 
            setSelectionLocation(i, 0);                     //pr le repositionner... car je n'ai pas réussis à maîtriser roi.move aussi;)
    	run("Paste");
    	selectWindow(list[i]);
    	run("Close");
     
    i=i+1;
    }
    setBatchMode(false);
     
    open( dir + list[2296]);                                // là je remet pour finir, la colonne du milieu polluée par ts les coller successifs de la boucle
    	makeRectangle(i,0,1,3064);
    	run("Copy");
    	selectWindow(imageTitle);
    	run("Paste");
    	selectWindow(list[i]);
    	run("Close");
     
    showMessage("Over", "<html>"
         +"<h1><font color=red><i>Compilation terminéeFin</i></h1>");
    je sais pas si c'est opti du point de vue du code, mais ça fait le taf...faut que je vérifie aussi si ya pas de pertes de qualité d'images

    Merci pr ton lead!!
    Fred

  6. #6
    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
    Et comme ça, est ce que la macro fonctionne?

    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
     
     
    newImage("Coueron", "RGB", 4592, 3064, 1);
    imageTitle=getTitle()
    dir = getDirectory( "Choose the Directory" ); 
    list = getFileList( dir );                                                // je comprend pas bien la manip encore, mais ca marche
    i=0;
    setBatchMode(true);
    while (i<=4591)
    {
    	open( dir + list[i]);
    	makeRectangle(i,0,1,3064);
    	run("Copy");
    	selectWindow(imageTitle);
    	makeRectangle(i,0,1,3064);
    	run("Paste");                                         // là, le pbme, c'est qu'il colle automatiquement au centre de l'image, 
    	selectWindow(list[i]);
    	run("Close");
     
    i=i+1;
    }
    setBatchMode(false);
     
    showMessage("Over", "<html>"
         +"<h1><font color=red><i>Compilation terminéeFin</i></h1>");

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    J'avais essayé ça, mais ca ne marche pas. mais pas de probleme, la reprise finale fait le taf.

    Par contre, sais-tu a tout hasard comment (si c'est possible) diminuer la perte de qualité.
    J'importe du jpg, j'exporte l'image final en jpg, et je divise par 4 la qualité ?

  8. #8
    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
    Pourrais-tu envoyer une de tes images, ou un lien vers l'une d'elle, pour que je puisse regarder

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Lien pr récup une photo type : https://wetransfer.com/downloads/6b7...3173454/de2754

    Mais j'ai le sentiment que je ne pourrais pas éviter cette grosse dégradation de qualité avec imagej ...^^
    retour à la cas départ!
    Images attachées Images attachées  

  10. #10
    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
    Je ne comprend pas que tu aies une dégradation de l'image en faisant juste un copier-coller, c'est bizarre. ImageJ est sensé copier la valeur des pixels et la coller dans une autre image. As-tu comparé la valeur des pixels entre une des image originales et la copie. Si tu ouvre une image et que tu places la souris sur l'image, il y aura la position XY du pixel pointé par la souris, + sa valeur. Est-ce que cette valeur change sur la copie?
    Sinon, as-tu vérifié les ajustements de contrastes, qui pourrait écraser la dynamique de ton image, ils sont peut-être différents sur la copie. C'est dans Image-> adjust -> brightness/contrast. Dans ce menu (fonction set), tu peux appliquer les réglages d'une image sur les autres images ouvertes. Tu pourrais essayer d'appliquer les réglages de l'un de tes originaux sur ta copie.

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Après vérif :
    - J'ai effectivement un changement de valeurs ds chaque pixel (un 58,62,65 se transforme par exemple en 28,44,44; ou encore 52,84,135 devient 57,88, 143) Ca implique une genre d’aplatissement, diminution contraste couleur.
    - Ci contre un zoom (macro a gauche, originales à droite)
    - ajustement contraste... identiques

    Qd j'ouvre l'image résultant de la macro sur photoshop, je vois bien que la résolution initiale de 180pixel/pouce est diminué à 72pixel/pouce... je pense en fin de compte que c'est pas le bon logiciel pr traiter cette qualité (?)

    Nom : comparaison.jpg
Affichages : 284
Taille : 40,6 Ko

Discussions similaires

  1. Réponses: 7
    Dernier message: 15/06/2018, 18h00
  2. [XL-2010] Macro pour fusionner une sélection
    Par xuan203 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/07/2017, 08h43
  3. Réponses: 0
    Dernier message: 11/11/2010, 09h30
  4. Complexité d'une macro pour Excel
    Par MatMeuh dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/04/2006, 12h23
  5. [VBA-E] [help]macro pour dupliquer une feuille (en valeur)
    Par minikisskool dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 07/11/2005, 20h24

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