Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Matlab : Associer image à resultat dans interface



  1. #1
    Groupe5ST

    Matlab : Associer image à resultat dans interface


    ------

    Bonjour,

    Nous souhaitons créer un jeu sur matlab, le Bandit Manchot (machine à sous). Nous n'arrivons pas à trouver le moyen d'associer les images aux résultats des fonctions aléatoires (cf. image ci dessous).

    Nom : 1_5.jpg.gif
Affichages : 75
Taille : 24,1 Ko

    Est ce que quelqu'un saurait nous aider ?

    Merci beaucoup !

    -----

  2. #2
    lou_ibmix_xi

    Re : Matlab : Associer image à resultat dans interface

    Si tes images sont de même dimensions, je ferais un tableau 3D, lignes = hauteurs des images, colonnes = largeurs des images et profondeur = image, par exemple:
    Code:
    images = zeros (nb_lignes, nb_colonnes, nb_images);
    for k = 1:nb_images
        images(:, :, k) = imread (fichier[k]);
    end
    
    % pour accéder l'image n:
    imscale (images(:, :, n))

  3. #3
    Groupe5ST

    Re : Matlab : Associer image à resultat dans interface

    Bonjour lou_ibmix_xi,

    Merci pour ta réponse. Cela nous semble être une bonne idée, cependant nous sommes des novices en la matière et nous avons du mal à tout comprendre..

    1) Pourquoi commencer par définir une matrice de zéros ?

    2) Lorsque l'on définit les dimensions des images (lignes colonnes), si par exemple les images sont au format 1024x768, quelle écriture est vraie :
    images = zeros (1:768, 1:1024, n)
    Ou images = zeros (768, 1024, n) ?
    Autre ?

    3) Nous ne comprenons pas non plus comment les images sont associées à leur nombre k (la kième image) ?

    Merci pour ta patience !
    Groupe5ST

  4. #4
    lou_ibmix_xi

    Re : Matlab : Associer image à resultat dans interface

    1) Pourquoi commencer par définir une matrice de zéros ?
    C'est pour "pré-allouer" la matrice 3D où tu vas mettre tes images. Si tu avais été en 2d, ce n'etait pas obligatoire, tu aurais pu ajouter ta nouvelle ligne à la suite:
    Code:
    images = [];
    for k = 1:nb_images
        images = [images; nouvelle_ligne];
    end
    Malheusement je ne sais pas écrire la même chose en 3d (ni même si c'est faisable). Toujours est-il qu'il vaut mieux allouer puis remplir au fur et à mesure, c'est plus efficace, sinon, à chaque boucle MATLAB va allouer un nouveau tableau, recopier l'ancien contenu, ajouter la nouvelle image, puis libérer l'ancien contenu... Beaucoup de travail évité si tu as bien préallouer ton tableau (tu peux utilises ones si tu préféres, ou copier une matrice qui a la même dimension...)

    2) Lorsque l'on définit les dimensions des images (lignes colonnes), si par exemple les images sont au format 1024x768, quelle écriture est vraie :
    images = zeros (1:768, 1:1024, n)
    Ou images = zeros (768, 1024, n) ?
    Autre ?
    MATLAB, la 1ère dimension est l'indice de ligne, puis l'indice de colonnes, puis les autres, donc plutôt "M = zeros (1024, 768, n);", attention également "1:1024" est un vecteur 1 ligne 1024 colonnes, et "zeros" attends bien des scalaires comme arguments (help zeros)

    3) Nous ne comprenons pas non plus comment les images sont associées à leur nombre k (la kième image) ?
    Je ne sais pas non plus... La réponse dépends du nom des fichiers, si ils sont "calculables" à partir de l'indice k alors c'est simple de faire une boucle, par exemple si tu as 10 images qui s'appellent "image1.jpg", "image2.jpg" ... "image10.jpg"
    Code:
    for k = 1:nb_images
        nom_image = sprintf ('image%d.jpg', k);
        images(:, :, k) = imread (nom_image);
    end
    en revanche si il n'y a pas un format de nom, comme par exemple "banane.jpg", "etoile.jpg", etc... tu peux faire un tableau des nom de fichiers, pour boucler dessus, ou bien pas de boucle du tout...
    Code:
    images(:, :, 1) = imread ('banane.jpg');
    images(:, :, 2) = imread ('etoile.jpg');
    % ...
    images(:, :, 10) = imread ('trefle.jpg');

  5. A voir en vidéo sur Futura
  6. #5
    Groupe5ST

    Re : Matlab : Associer image à resultat dans interface

    Bonjour lou_ibmix_xi,

    Merci pour toutes ces informations.
    Malgré ton aide on a du mal à sortir un résultat.

    On a donc trouvé un moyen détourné d'afficher ces images même si ça multiplie les lignes de codes..
    en effet, n'ayant que 4 images différentes à afficher, on a utilisé la fonction IF / ELSEIF / ELSE.


    Code:
    if h==1
        I=imread('image1.jpg');
        axes(handles.rouleau1);
        image(I);
    
    elseif h==2 
        I=imread('image2.jpg');
        axes(handles.rouleau1);
        image(I);
    
    elseif h==3 
        I=imread('image3.jpg');
        axes(handles.rouleau1);
        image(I);
    
    else
        I=imread('image4.jpg');
        axes(handles.rouleau1);
        image(I);
    Maintenant notre problème est de lier les variables utilisées dans les différentes fonctions de l'interface.
    Par exemple, utiliser une variable dans une fonction Checkbox ET dans une fonction Pushbutton.
    Saurais tu comment faire ?

    Encore merci pour tout !!!
    Dernière modification par JPL ; 28/03/2014 à 15h17. Motif: Ajout de la balise Code (#) pour garder l'indentation

  7. #6
    lou_ibmix_xi

    Re : Matlab : Associer image à resultat dans interface

    Tu n'est pas très loin, je pense que le code suivant devrait marcher:
    Code:
    % allocation
    nb = 4;
    img = imread('image1.jpg');
    [row, col]*= size (img);
    img = zeros (row, col, nb);
    
    %remplissage
    for k = 1:nb
        nom = sprintf ('image%d.jpg', k);
        img(:,:,k) = imread (nom);
    end
    
    % affichage de la deuxième image
    k = 2;
    image(img(:,:,k)
    Maintenant notre problème est de lier les variables utilisées dans les différentes fonctions de l'interface.
    Par exemple, utiliser une variable dans une fonction Checkbox ET dans une fonction Pushbutton.
    Je ne comprends pas vraiment, et en plus je n'ai jamais d'IHM sous MATLAB donc je ne connais pas les principes pour pouvoir passer une variable à un élément graphique, ni même comment donner une visibilitée globale à une variable...
    je ne sais pas si cela existe avec MATLAB mais sous octave tu peux rendre persistente une variable, c'est à dire garder son contenu entre les appels de la fonction dans laquelle elle est définie, donc dans chaque fonction où tu as besoin de tes images tu peux faire quelque chose comme:

    Code:
    persistent __IMAGE__;
    if (isempty (__IMAGE__)
        % remplir la matrice 3D __IMAGE__ avec le code ci-dessus
    end
    comme ça au 1er appel de ta fonction, la matrice sera rempli et le restera... Mais ce n'est pas génial car tu auras une occupation mémoire égale au nombres de fonctions utiliseant ta matrice constant, c'est mieux de partager...

  8. #7
    Groupe5ST

    Re : Matlab : Associer image à resultat dans interface

    Bonjour lou_ibmix_xi,

    Nous avons trouvé un moyen d'utiliser la même variable dans les différentes fonctions du Guide.
    Il suffit d'utiliser le préfixe handles. devant le nom de la variable.

    Pour que la nouvelle valeur de la variable handles.variable soit enregistrée dans le programme, il faut rajouter à la fin du programme de la figure (bouton, zone de texte...) guidata(hObjects,handles)

    En tout cas Merci pour ton aide !!

Discussions similaires

  1. centrer une image dans un arrière plan blanc avec matlab
    Par ing-racha dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 19/03/2013, 15h07
  2. Problème sur le résultat de la fonction de c2d de Matlab
    Par Buggy26 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 21/09/2012, 09h08
  3. interface matlab
    Par KRISTTEN dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 26/05/2011, 23h15
  4. MATLAB: acquisition de donnée via une interface graphique matlab
    Par imorfal dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 08/05/2011, 16h54
  5. Numerotation d'objets dans une image avec Matlab
    Par nadia1234 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 15/11/2005, 17h43
Découvrez nos comparatifs produits sur l'informatique et les technologies.