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 :

Extraction d'une fenêtre centrée


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut Extraction d'une fenêtre centrée
    salut tout le monde
    j'aime parcourir une matrice de taille 30 et extraire des fenetres de centre x et de taille 3*3( voisinage 3*3)
    puis pour chaque fenetre chercher sa moyenne
    et remplacer ce voisinage ( cette fenetre) par la moyenne cherchée
    et merci

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Si tu souhaites que tes blocs 3x3 aient la même valeur, alors regarde du côté de la fonction BLKPROC qui permet d'appliquer une fonction par bloc.

    Si tu souhaites que chacun de tes points ait comme valeur la moyenne des points de son voisinage, alors c'est du filtrage. Tu as juste à faire du filter2D sur ton image avec un filtre moyenneur du genre [1 1 1; 1 1 1; 1 1 1]

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut
    D'abord je cherche a parcourir la matrice et extraire des blocs centrée et de taille voulue

    puis reste la partie pour le moyenneur du bloc

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut
    j'aime parcourir la matrice de taille 4 lignes et 10 colonnes et extraire des fenêtres centrées en un centre que je définis et de taille que je définis


    Est ce qu'il ya un code ou bien une commande qui permet de faire ça en matlab?
    aidez moi s'il vous plait

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    as-tu regardé la fonction blkproc (ou blockproc dans les versions récentes de MATLAB) indiquée par beeeeeennnnnn?

    Sinon, tu peux aussi parcourir ton tableau en utilisant 2 boucles for.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut
    j'ai essayé la fonction blockproc mais le parametre fun est un peu ambigue (je l'ai pas bien saisi) et autre chose pour moi j'ai declaré un tableau de 4 lignes 10 colonnes qui contiennent des valeurs de 0 a 256 puis j'ai essayé de faire une quantification iq=A(i,j); /// le tableau est A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    iq(A(i,j)<16)=0;
    iq(A(i,j)>16 & A(i,j)<32)=1;
    iq(A(i,j)>32 & A(i,j)<48)=2;
    iq(A(i,j)>64 & A(i,j)<80)=3;
    iq(A(i,j)>80 & A(i,j)<96)=4;
    iq(A(i,j)>112 & A(i,j)<128)=5;
    iq(A(i,j)>144 & A(i,j)<160)=6;
    iq(A(i,j)>176 & A(i,j)<192)=7;
    iq(A(i,j)>192 & A(i,j)<208)=8;
    iq(A(i,j)>224 & A(i,j)<240)=9;
    iq(A(i,j)>240 & A(i,j)<256)=10;
    c'est juste que j'ai fait ??
    puis dans la fonction blockproc B=blockproc(iq,[4 4],fun); ici je mets iq ou bien A? Et finalement comment je declare fun?
    Merci bien

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut
    juste j'aime comprendre la fonction fun et comment je la declare

  8. #8
    Invité
    Invité(e)

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut
    je cherche a decomposer le tableau A de taille 4 lignes 10 colonnes en petites fenetre de tailles [2 2] et pour chaque fenetre je la transforme en un vecteur de taille [1 4] , pour ce vecteur je calcule sa moyenne et je remplace la valeur trouvée dans le vecteur A où j'ai extrait la fenetre [2 2]
    j'ai essayé comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for i= 1:4
        for j=1:10
           fenetre= A(i:i+1,j:j+1,:);
            data=reshape(fenetre,[1 4]);
            moyenne =mean(data,2);
            for k=1:4
                for c=1:10
                    A(k,c)= moyenne;
                end
            end
    ça genere des fautes si quelqu'un peut me corriger ce code ou bien me donner une idée tres claire a propos de la fonction blockproc et ses parametres car je suis debutant en matlab et merci

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Si ton tableau contient 4 lignes et 10 colonnes, il faut faire attention aux bornes de tes indices, sinon tu vas dépasser la taille de ton tableau :
    Ensuite, pas la peine de transformer ta matrice en vecteur, tu peux calculer la moyenne directement sur le vecteur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    A = rand(4,10);
     
    for i= 1:3
        for j=1:9
            fenetre= A(i:i+1,j:j+1);
            B(i,j) = mean(fenetre(:));
        end
    end
    J n'ai pas très bien compris ou tu voulais enregistrer ces valeurs dans A...

    Et un exemple d'utilisation de la fonction blockproc pour calculer la moyenne de blocs 2x2 distincts d'une matrice :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A = rand(4,10);
    fun = @(block_struct)mean(block_struct.data(:));
    B2 = blockproc(A,[2 2],fun)
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut
    pour l'enregistrement des nouvelles valeurs :
    les 4 valeurs prises par la fenetres seront remplacées par une seule qui est la moyenne et mises dans A

    par exemple A(1,1), A(1,2), A(2,1), A(2,2) serot tous remplacés par la moyenne de la fenetre ( fenetre =A(1:2;1:2) )

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut
    en fait mr magelan je veux que la taille de B2 sera la meme que A
    pour l'execution la taille de B2 est [2 5]et A est [4 10]
    mon interet est que chaque valeur sera placée dans un voisinage de [2 2] c'est pour la segmentation de ce tableau si tu me comprends

  13. #13
    Invité
    Invité(e)
    Par défaut
    Si j'ai bien compris, il suffit que la sortie de la fonction fun soit de taille 2x2 au lieu d'avoir un scalaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A = rand(4,10);
    fun = @(block_struct) mean(block_struct.data(:))*ones(2);
    B2 = blockproc(A,[2 2],fun)

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut
    merci bien pour le moment sa va je veux le tester avec une image entiere

Discussions similaires

  1. Placer une image au centre d'une fenêtre
    Par lucciana dans le forum Débuter
    Réponses: 7
    Dernier message: 03/03/2011, 15h54
  2. Détecter une fenêtre centrée
    Par splash68 dans le forum C++
    Réponses: 7
    Dernier message: 12/01/2011, 17h56
  3. Rendre le curseur invisible sur une fenêtre donnée
    Par Meuhmeuh dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/11/2002, 12h25
  4. Créer une fenêtre flottante qui ne peut avoir le focus
    Par BestofMac dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 10h46
  5. icône d'une fenêtre fille
    Par bastien dans le forum C++Builder
    Réponses: 6
    Dernier message: 27/05/2002, 13h46

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