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

Interfaces Graphiques Discussion :

Utilisation de datacursormode et ginput


Sujet :

Interfaces Graphiques

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 13
    Points : 14
    Points
    14
    Par défaut Utilisation de datacursormode et ginput
    Bonjour,

    J'essaye, depuis hier, de modifier l'affichage dans une certaine figure afin que l'utilisateur puisse non seulement choisir un pixel sur ladite image mais qu'il ait en même temps accès à la valeur du pixel correspondant.
    J'utilise pour le moment des figures pour l'affichage de l'image. Je ne peux pas me contenter d'utiliser imtool pour l'affichage de la valeur du pixel car je dois d'abord faire un calcul sur cette valeur.

    Pour le moment, les datacursor c'est pas trop mon truc mais j'ai tenté quelques petites choses :

    voila le script pour le test que je suis en train de réaliser.

    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
     
    close all;
    clear all;
     
    I = imread('cameraman.tif');
    figure(); imshow(I);
     
    dcm_obj = datacursormode(gcf);
    set(dcm_obj,'UpdateFcn',@mafonction,...
        'DisplayStyle','window',...
        'Enable','on');
     
    uiwait;
     
    p = ginput(1);
    display(p);
    uiwait n'est là que pour voir si l'affichage de la position des pixels fonctionne correctement. Ce qu'on remarque : la fenêtre affiche les positions du pixel choisit quand l'utilisateur clique sur ce pixel ! or j'aurai besoin que l'affichage se fasse dès que la souris passe sur l'image sans que l'utilisateur ne clique sur l'image...
    Sans uiwait : on ne voit rien le programme passe à ginput.

    Je change la propriété 'UpdateFcn' avec la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function [ output_txt ] = mafonction(~, event_obj)
    %UNTITLED4 Summary of this function goes here
    %   Detailed explanation goes here
     
    pos = get(event_obj,'Position');
     
    num2str(pos(1:2),'(%d,%d)')
     
    output_txt = {['X: ',num2str(pos(1),4)],...
        ['Y: ',num2str(pos(2),4)]};
     
    end
    Quelques difficultés donc pour combiner datacursormode qui permet à l'utilisateur de vérifier le pixel en question et ginput pour sélectionner ce pixel... l'étape suivante sera donc de récupérer la valeur du pixel sur l'image correspondante....

    Toute aide sera appréciée ^^
    Merci !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 13
    Points : 14
    Points
    14
    Par défaut oublions ginput
    Un petit up pour ce topic et tant qu'à faire autant commencer par plus simple.

    Le fait est que l'image traitée est une image DICOM donc je dois convertir l'intensité en HU selon la formule suivante :
    HU = intensité*RescaleSlope + RescaleIntercept;
    Les variables RescaleSlope et RescaleIntercept sont obtenus après utilisation de la fonction dicominfo sur le fichier DICOM.

    Je voudrais alors afficher cette info à l'aide du datacursor mode lorsque j'appuie sur un bouton.

    Voici le code du bouton en question (essai non concluant...)
    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
     
    function pushbutton11_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton11 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    Image = handles.dataStruct.('original'); 
    %check if dicom file has been opened
     
    if ~ischar(Image) %Dicom file has been opened --> let's do this !
        %close all but main GUI
        set(handles.figure1,'HandleVisibility','off');
        close all;
        set(handles.figure1,'HandleVisibility','on');
     
        display_HU = figure('name','DICOM Image'); imshow(Image,[]);
        dcm_obj = datacursormode(gcf);
        set(dcm_obj,'UpdateFcn',@mafonction,'DisplayStyle','window','Enable','on');
    end
    et donc, ca va avec, ma tentative avec la fonction mafonction

    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
    
    function [ output_txt ] = mafonction(~, event_obj)
    %UNTITLED4 Summary of this function goes here
    %   Detailed explanation goes here
    
    pos = get(event_obj,'Position');
    
    num2str(pos(1:2),'(%d,%d)')
    Image = handles.dataStruct.('original');
    HU = Image(pos(1), pos(2))*handles.dicominfo.RescaleSlope + handles.dicominfo.RescaleIntercept;
    disp(handles.dicominfo) %simple test
    
    output_txt = {['X: ',num2str(pos(1),4)],...
        ['Y: ',num2str(pos(2),4)],...
        ['HU: ',num2str(HU)]};
    
    end
    Si je relance ce poste c'est que... ça ne marche pas !
    Mais il n'y a tout de même pas d'erreur dans la Command Window !
    par contre mes tests semblent indiquer que ces trois lignes ne fonctionnent pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Image = handles.dataStruct.('original');
    HU = Image(pos(1), pos(2))*handles.dicominfo.RescaleSlope + handles.dicominfo.RescaleIntercept;
    disp(handles.dicominfo) %simple test
    et au niveau de la petite fenêtre dont j'aurais souhaité qu'elle affiche les coordonnées du point et la valeur HU, tout ce qui est écrit est :
    Error in custom
    datatip string function
    une petite idée ?

    merci d'avance !

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. utilisation de ginput avec images
    Par romainmill dans le forum Programmation multimédia/Jeux
    Réponses: 1
    Dernier message: 04/04/2014, 16h24
  2. Utilisation de datacursormode
    Par ocelote dans le forum MATLAB
    Réponses: 8
    Dernier message: 06/11/2012, 17h12
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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