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 régulier
    Inscrit en
    Décembre 2006
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 329
    Points : 88
    Points
    88
    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 habitué Avatar de larimoise
    Inscrit en
    Octobre 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 220
    Points : 197
    Points
    197
    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(:));
    MATLAB Version 7.13.0.564 (R2011b)
    Microsoft Visual studio 2010
    LabView 2013 service pack1

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

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    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
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 329
    Points : 88
    Points
    88
    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 éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    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
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  6. #6
    Membre habitué Avatar de larimoise
    Inscrit en
    Octobre 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 220
    Points : 197
    Points
    197
    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.
    MATLAB Version 7.13.0.564 (R2011b)
    Microsoft Visual studio 2010
    LabView 2013 service pack1

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

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    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
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  8. #8
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 329
    Points : 88
    Points
    88
    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 éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    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
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  10. #10
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 329
    Points : 88
    Points
    88
    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 éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    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
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  12. #12
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 2
    Points : 2
    Points
    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, 11h31
  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, 16h47
  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, 21h30
  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, 15h47
  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, 17h24

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