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

Images Discussion :

Sélectionner plusieurs parties d'une même image en même temps


Sujet :

Images

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Sélectionner plusieurs parties d'une même image en même temps
    Bonjour !

    Pour un projet de biologie, j'aimerais pouvoir traiter plusieurs cellules sur une même image en même temps. Quand je dis traiter, c'est pouvoir calculer l'aire/le volume de chacune des cellules que je sélectionne.

    Voici le genre d'image sur lequel je travaille :



    J'aimerais que lorsque je clique sur une cellule, elle seule reste sur l'image comme ceci par exemple :



    et que je puisse avoir accès à son aire et son volume (à partir de l'image ci-dessus, je sais à peu près comment je devrais procéder pour récupérer l'aire et le volume, c'est juste le passage d'une image à l'autre qui me pose problème).

    J'aimerais également que plusieurs cellules soient sélectionnables, par exemple en cliquant sur 3 d'entre elles qui m'intéressent puis en cliquant sur un bouton "ok" (ou je ne sais pas si il y a un autre moyen), seulement ces 3 cellules seraient conservées et je pourrais avoir accès à leurs aires/volumes respectifs. Ce que je voudrais c'est que l'image soit comme ceci :



    (les cellules sélectionnées ne seront pas nécessairement à côté, c'est juste un exemple).

    J'avais pensé à utiliser imcrop, mais seulement ce moyen me permet d'obtenir juste une seule cellule à la fois et ne me permettra pas de conserver 3 cellules d'un coup comme sur la 3eme image si les cellules en question ne sont pas à côté... Par exemple comme ceci :



    En plus, cette fonction découpe l'image alors que j'aimerais conserver sa taille originale pour pouvoir comparer les images entre elles par la suite...


    Voilà, si certains d'entre vous pouvez m'éclairer ça serait génial !! Merci beaucoup à ceux qui prendront la peine de lire et de répondre !

    Lana

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    bonjour,
    Un premier essai :

    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
    36
    clear
    button=0;
    figure(1)
    I=imread('figure_points.jpg');
    I1=rgb2gray(I);
    % Commandes souris :
    % Click gauche : choix de l'image
    % Click droit : fin et tracé
    [Y,X]=size(I1);
    W=zeros(Y,X);
    dx=20;dy=20;% Taille de la fenetre de saisie
    imshow(I1)
    while button~=3
        [x,y,button] = ginput(1)
        if button==3
            break
        end
        if x<dx
            x=dx+1;
        end
        if x>X-dx
            x=X-dx;
        end
        if y<dy
            y=dy+1;
        end
        if y>Y-dy
            y=Y-dy;
        end
        pos=ceil([x,y]);
        iyd=pos(1)-dy;iyf=pos(1)+dy;
        ixd=pos(2)-dx;ixf=pos(2)+dx;
        im=I1(ixd:ixf,iyd:iyf);
        W(ixd:ixf,iyd:iyf)=im;
     
    end
    Nom : figure_points.jpg
Affichages : 457
Taille : 10,9 Ko

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonjour, et merci beaucoup d'avoir la pris la peine de me répondre !

    J'ai testé le code, mais je ne comprends pas tout à fait comment toutes les données peuvent être stockées et permettre d'afficher uniquement 3 cellules par exemple.
    J'ai bien compris que lors d'un clic gauche, la position du curseur est retournée et stockée dans x et y mais les données sont effacées à chaque nouveau clic et lors de l'interruption du programme par clic droit, les deux derniers clics seulement sont conservés (un dans pos, l'autre dans x,y) mais l'image ne change pas. J'ai essayé de rajouter

    avant le end final pour voir ce qu'on conserve, et du coup ça coupe directement l'image pour ne garder que la première cellule sélectionnée.

    Si je comprends bien, il faudrait que je rajoute une boucle qui conserve les positions à chaque clic puis que je fasse un "montage" qui contiendrait toutes les cellules sélectionnées sur la même image, un peu comme expliqué ici, c'est ça ?

    Désolée si mes questions paraissent bêtes, je n'ai pas encore beaucoup l'habitude de matlab haha!

    Merci encore en tout cas!

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonsoir,
    On clicke tous les points désirés avec le click gauche, il sont sotckés dans x et y puis le click droit affiche la nouvelle figure avec les points sélectionnés.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,

    J'ai rajouté
    à la fin du code, et maintenant ça marche comme souhaité!! (je ne comprenais pas car rien ne se passait après le clic droit auparavant)
    Merci beaucoup !

    Par contre, savez-vous comment je pourrais améliorer la résolution de l'image obtenue à la fin ?

    Ici, j'ai sélectionné 3 cellules d'intérêt et j'ai obtenu ceci :
    Nom : figcells.jpg
Affichages : 484
Taille : 27,6 Ko

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Une autre petite question, ici la taille de la fenêtre de saisie à été arbitrairement mise à 20x20, mais étant donné que mes cellules ne font pas toutes la même taille, j'aimerais pouvoir adapter la taille à chaque cellule...
    Est-ce qu'il y a moyen que, lorsque je clique sur la cellule voulue, matlab récupère la hauteur et largeur (à partir du centroid) et set les dimensions de la fenêtre à partir de ça ?

    Je sais que pour le centroid on utilise regionprops, j'imagine qu'à partir de là on peut lui dire de nous donner la hauteur de la partie "blanche" (la cellule) ainsi que la largeur, sûrement avec regionprops aussi d'ailleurs (bounding box ou quelque chose comme ça).

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut Sélectionner plusieurs parties d'une même image en même temps
    Bonjour,
    Effectivement j'avais oublié imshow(im);
    J'ai proposé le programme "squelette" qui permet de manipuler les images.
    Reste la partie intelligente : détection de contours (Sobel, Canny, Prewitt, Roberts, and fuzzy logic methods...), traitement des tâches, filtrage...
    Un ajout :
    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
    36
    37
    38
    39
    40
    41
    clear
    button=0;
    %I=imread('figure_points.jpg');
    I=imread('Taches_blanches.jpg');
    I1=rgb2gray(I);
    I1=sobel(I1);
    % Commandes souris :
    % Click gauche : choix de l'image
    % Click droit : fin et tracé
    [Y,X]=size(I1);
    %W=255*ones(Y,X);
    W=zeros(Y,X);
    dx=20;dy=20;% Taille de la fenetre de saisie
    figure(1)
    imshow(I1)
    while button~=3
        [x,y,button] = ginput(1);
        if button==3
            break
        end
        if x<dx
            x=dx+1;
        end
        if x>X-dx
            x=X-dx;
        end
        if y<dy
            y=dy+1;
        end
        if y>Y-dy
            y=Y-dy;
        end
        pos=ceil([x,y]);
        iyd=pos(1)-dy;iyf=pos(1)+dy;
        ixd=pos(2)-dx;ixf=pos(2)+dx;
        im=I1(ixd:ixf,iyd:iyf);
        W(ixd:ixf,iyd:iyf)=im;
     
    end
     figure(2)
    imshow(W)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function GS=sobel(I)
    h=fspecial('sobel');
    %h=fspecial('prewitt'); 
    v=-h';
    Gh=filter2(h,I);
    Gv=filter2(v,I);
    G=sqrt(Gh.*Gh+Gv.*Gv);
    seuil=200;
    GS=(G<seuil);
    Nom : contou.jpg
Affichages : 442
Taille : 79,7 Ko

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup d'avoir pris le temps!

    Je me suis également aidée de la fonction bwselect qui fait une bonne partie du travail!
    Mon problème est donc résolu!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WS 2003] Créer plusieurs domaines dans une forêt sur le même serveur
    Par a.elbaki dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 20/03/2010, 11h58
  2. Réponses: 8
    Dernier message: 05/02/2010, 17h26
  3. Réponses: 3
    Dernier message: 05/09/2008, 10h32
  4. Réponses: 9
    Dernier message: 10/06/2008, 15h15
  5. [AJAX] Recharger deux parties d'une page dans la même fonction.
    Par drakar dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/09/2007, 12h20

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