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

MATLAB Discussion :

[mean] Calculer la moyenne d'une matrice


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 329
    Par défaut [mean] Calculer la moyenne d'une matrice
    bonjour tout le monde,
    je voudrais calculer le moyenne d'une matrice c'est a dire :
    j'ai une image je connais d'avence les valeurs de 50 pixel de cette image

    je voudrais prendre chaque pixel parmi ces 50 et chercher les voisinage de ce pixel dans l'image initial, par exemple je peux prendre le voisinage 10 pixel pour les ligne et 15 pixel pour les colonnes
    apres je vais chercher la moyenne de cette nouvelle matrice.
    j'ai essayer ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [a,b]=size( Matrice);%% Matrice contient les valeur de 50 pixels
    seg;% seg est l'image initiale
     for i=1:3
         for j=1:50
              Matrice(i,j); 
    %%%%%% il faut ajouter une instruction qui permet de faire la liasion entre seg et Matrice pour chercher les voisinage de chaque pixel dans l'image seg
         end
     end
    %%MoyMatrice=mean(Matrice,2);

    merci beaucoup

  2. #2
    Membre confirmé Avatar de larimoise
    Inscrit en
    Octobre 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 220
    Par défaut
    Salut,
    pour calculer la moyenne de la matrice:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MoyMatrice=mean(mean(Matrice));
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MoyMatrice=mean(Matrice(:));

  3. #3
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    bjr,

    les doubles boucles imbriquées ça va bien en C, mais en Matlab ça fait ramer.
    Voici comment tu peux faire sans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function N = sous_matrice(M, Centre, Taille)
    % retourne la sous-mattrice de M de centre et de taille demandée
    % centre et taille sont des vecteurs 1 ligne 2 colonnes
    % le résultat est tronqué s'il dépasse des bords
    vers_haut_gauche = round(Taille/2) ;
    vers_bas_droite = Taille - vers_haut_gauche ;
    HautGauche = max (0, Centre - vers_haut_gauche) ;
    BasDroite = min([size(M) ; Centre + vers_bas_droite]) ;
    lignes = HautGauche(1):BasDroite(1) ;
    colonnes = HautGauche(2):BasDroite(2) ;
    N = M(lignes, colonnes) ;
    return
    Pour utiliser ma petite fonction à extraire la moyenne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fenetre = sous_matrice(M, [30 30], [10 15]) ;
    moyenne = mean(fenetre(:)) ;
    OL

  4. #4
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 329
    Par défaut
    Merci bien, mais j'ai pas bien comprendre votre code,
    Mon problème est que j'ai mon image qui s'appel image par exemple.
    j'ai une autre matrice qui contient 50 pixel de cette image qui ont extrait aléatoirement.
    je vx faire un parcours de chaque pixel de la Matrice et je vais cherche leur voisinage dans l'image initiale image. de telle façon que ce pixel soit le centre de la nouvel sous matrice de la Matrice.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function N = sous_matrice(M, Centre, Taille)
    % retourne la sous-mattrice de M de centre et de taille demandée
    % centre et taille sont des vecteurs 1 ligne 2 colonnes
    % le résultat est tronqué s'il dépasse des bords
    vers_haut_gauche = round(Taille/2) ;
    vers_bas_droite = Taille - vers_haut_gauche ;
    HautGauche = max (0, Centre - vers_haut_gauche) ;
    BasDroite = min([size(M) ; Centre + vers_bas_droite]) ;
    lignes = HautGauche(1):BasDroite(1) ;
    colonnes = HautGauche(2):BasDroite(2) ;
    N = M(lignes, colonnes) ;
    return
    dans quel endroit je vais mettre mon image initial pour que je puisse extraite le sous matrice?

    merci d'avance

  5. #5
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    normalement, ton image, c'est le paramètre "M", "centre" , c'est successivement les lignes de ta matrice, et "taille", c'est par exemple [50 50].

    OL

  6. #6
    Membre confirmé Avatar de larimoise
    Inscrit en
    Octobre 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 220
    Par défaut
    Salut,
    il y' a un problème avec les bords de l'image, il faudrait ajouter une condition pour remplacer les éléments manquants.

  7. #7
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par larimoise
    Salut,
    il y' a un problème avec les bords de l'image, il faudrait ajouter une condition pour remplacer les éléments manquants.
    Si mes souvenirs sont bons, ma fonction tronque les éléments manquants. Si c'est pour finalement calculer une moyenne, c'est l'option préférable.

    OL

  8. #8
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 329
    Par défaut
    pas encore résolu,
    voila votre fonction que j'ai change par mon image seg code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function N = sous_matrice(seg, Centre, Taille)
     
    % retourne la sous-mattrice de M de centre et de taille demandée
    % centre et taille sont des vecteurs 1 ligne 2 colonnes
    % le résultat est tronqué s'il dépasse des bords
    vers_haut_gauche = round(Taille/2) ;
    vers_bas_droite = Taille - vers_haut_gauche ;
    HautGauche = max (0, Centre - vers_haut_gauche) ;
    BasDroite = min([size(seg) ; Centre + vers_bas_droite]) ;
    lignes = HautGauche(1):BasDroite(1) ;
    colonnes = HautGauche(2):BasDroite(2) ;
    N = seg(lignes, colonnes) ;
    return
    et voila le programme principale
    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
    close all; clear all;clc;
        Matrice=[];
        Nbclasse=4;
    % for i=1:4
    %     for j=1:5
     
         seg=imread('C1-image1.tif');
           %seg=imread(sprintf('C%d-image%d.tif',i,j));
                     Matrice1=matObs(seg);
    %% matObs fonction quifait l'extraction de 50 pixel
           %  y=cat(3,y,Matrice1);
            Matrice=cat(3,Matrice,Matrice1);
           % Matrice=[Matrice , Matrice1 ];
    %     end
    % end
     disp('la matrice d observation');
     Matrice ;
     for i=1:3
      L= Matrice(i,:,:) % le vecteur ligne de la Matrice
       Centre=L;
       Taille= [50 50];
     end
    fenetre = sous_matrice(seg, Centre,Taille) ;
    moyenne = mean(fenetre(:)) ;
    voici l'erreur qui me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ??? Error using ==> unknown
    Matrix dimensions must agree.
     
    Error in ==> sous_matrice at 9
    HautGauche = max (0, Centre - vers_haut_gauche) ;
     
    Error in ==> matrice at 29
    fenetre = sous_matrice(seg, Centre,Taille) ;

  9. #9
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    L (que tu vas passer comme argument Centre) ne doit pas être un vecteur ligne mais les coordonnées d'un point (donc de la forme [x, y]) : le centre de ta fenêtre.

    OL

  10. #10
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 329
    Par défaut
    j'ai pas bien compris comment L sera un vecteur

    L=Matrice(i,j)

    je ne sais pas vraiment!!!

  11. #11
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    L = [20 30] ça va te donner la fenêtre autour du point à la ligne 20 colonne 30.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i=1:n
      L=[Y(i) X(i)] ;
      ... 
      % appeler ma petite fonction d'extraction. Tu passe L comme paramètre "Centre"
      % calculer la moyenne
    end
    Voila, j'espère que ça va aller parceque ici à Bangkok il est 21h et j'ai encore un boulot monstre avant de dormir, donc je vais plus avoir le temps de rester sur le forum. Bonne chance, OL

  12. #12
    Nouveau candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 2
    Par défaut
    Citation Envoyé par ol9245 Voir le message
    bjr,

    les doubles boucles imbriquées ça va bien en C, mais en Matlab ça fait ramer.
    Voici comment tu peux faire sans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function N = sous_matrice(M, Centre, Taille)
    % retourne la sous-mattrice de M de centre et de taille demandée
    % centre et taille sont des vecteurs 1 ligne 2 colonnes
    % le résultat est tronqué s'il dépasse des bords
    vers_haut_gauche = round(Taille/2) ;
    vers_bas_droite = Taille - vers_haut_gauche ;
    HautGauche = max (0, Centre - vers_haut_gauche) ;
    BasDroite = min([size(M) ; Centre + vers_bas_droite]) ;
    lignes = HautGauche(1):BasDroite(1) ;
    colonnes = HautGauche(2):BasDroite(2) ;
    N = M(lignes, colonnes) ;
    return
    Pour utiliser ma petite fonction à extraire la moyenne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fenetre = sous_matrice(M, [30 30], [10 15]) ;
    moyenne = mean(fenetre(:)) ;
    OL
    Merci, vraiment merci beaucoup , tu m'as sauvée .
    et merci pour tt les participants de ce site.

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

Discussions similaires

  1. Calculer le determinant d'une matrice carrée
    Par NThierry dans le forum C
    Réponses: 15
    Dernier message: 27/08/2006, 12h31
  2. Calculer une moyenne avec une matrice
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 05/06/2006, 17h47
  3. calcul du determinant d'une matrice
    Par gautret dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 17/03/2006, 22h30
  4. [Matrices] Comment calculer le Déterminant d'une matrice 4x4
    Par cyber_N dans le forum Algorithmes et structures de données
    Réponses: 70
    Dernier message: 19/08/2005, 16h47
  5. [Débutant] Calculer le déterminant d'une matrice
    Par v4np13 dans le forum Mathématiques
    Réponses: 7
    Dernier message: 30/05/2005, 18h24

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