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 :

optimisation de mon programme


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 44
    Points : 22
    Points
    22
    Par défaut optimisation de mon programme
    Bonjour,
    je suis entrain de realiser un programme permettant de detecter un objet dan un ensemble d objet. par exemple une pomme dan une image rempli de fruit.
    Pour cela j'utilise une corelation normaliser.
    Cependant mon programme est extrement long a executer, je voudrais savoir si quelqu'une pourrait m'aider a le rendre plus rapide, etant un programateur debutant. Je joint mon code.
    Merci d'avance


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    clear all
    close all
     
    template=imread('fraiz.bmp');
    A=imread('fruitsss.bmp');
    template=rgb2gray(template);
    A=rgb2gray(A);
    [l,c]=size(template);
    [lfruit,cfruit]=size(A);
    template=double(template);
    templatemean=mean(mean(template));
     
    p=1;
    z=1;
     
    for i=1:cfruit-c
        for j=1:lfruit-l  
            I2(:,:,z) = imcrop(A,[i j c-1 l-1]);      
            A1=uint8(I2(:,:,z));
            g =A1;
            gmean=mean(mean(g));
            g=double(g);       
     
            for x=1:l       
                for y=1:c
             corre(p)=((template(x,y)-templatemean)*(g(x,y)-gmean))/(sqrt(((template(x,y)-templatemean )^2)*(((g(x,y)-gmean )^2))));
                 p=p+1;  
                end
            end
     
            corre=mean(corre)  
                if corre>0.95
                    e=i;
                    f=j;
                end 
            z=z+1; 
        end
    end

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Bonjour,

    Avant de commencer une question :
    Quelles sont les variables qui te seront encore utiles après la boucle ?
    Par exemple je ne vois pas très bien pourquoi tu fais "g=A1;", A1 sera-t-il utilisé ultérieurement ?

    Conseils :
    Penses à initialiser tes variables (je pense à I2 et à corre) : MATLAB normalement doit te le signaler dans l'éditeur par des traits oranges à droite après le slider (tu passes la souris dessus et il te raconte un tas de choses). Voir Qu'est-ce que la préallocation de mémoire ?

    Les variables p et z à mon sens ne servent à rien.
    Il y a 2 possibilités :
    - soit tu initialises I2 et corre à vide ([] mais pas trop indiqué) et dans ce cas tu peux utiliser l'opérateur end (voir Gestion des matrices ,III-D-1. L'opérateur end &nbsp
    - soit tu initialises I2 et corre à leur taille finale et tu dois pouvoir calculer l'indice à partir de lfruit, cfruit, l et c.

    Et enfin une dernière question : il est juste le code je suppose, il te donne les résultats attendus ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 44
    Points : 22
    Points
    22
    Par défaut re
    merci caroline pour ta reponse,
    A1 en fait ne sert a rien autant metre g directement...
    non je n'obtient pas les resultat attendus... sauf si je recherche la premiere image presente dans mon image de fruit.
    je vais initialiser I2 et corre pour voir les changements.
    Penses tu que la correlation normalisee est la meilleure methode afin de detecter une sous image presente dans une image generale?

  4. #4
    Membre averti

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 352
    Points
    352
    Par défaut
    de facon generale non, ce n'est probablement pas l'algorithme qu'il te faut... car la pomme est probablement orientee differemment et a une differente echelle dans la seconde image (sans mentionner les deformation liee au changement de perspective etc, oclusion, etc.)...

    J'irai plutot chercher du cote de detection de points d'interet:

    http://en.wikipedia.org/wiki/Feature...omputer_vision)
    http://en.wikipedia.org/wiki/Scale-i...ture_transform
    http://en.wikipedia.org/wiki/SURF


    Salutations,

    Greg

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 44
    Points : 22
    Points
    22
    Par défaut re
    merci greg je vais regarder les liens de plus pres, sa allair d etre la bonne methode le SIFT.
    Merci encore

Discussions similaires

  1. optimiser mon programme
    Par oga-san dans le forum C
    Réponses: 6
    Dernier message: 25/07/2012, 16h24
  2. Besoin d'aide optimisation de mon programme.
    Par Warfdog dans le forum Prolog
    Réponses: 5
    Dernier message: 15/12/2010, 14h20
  3. Comment optimiser mon programme
    Par fouedou77 dans le forum C
    Réponses: 2
    Dernier message: 29/06/2009, 10h51
  4. Réponses: 1
    Dernier message: 15/02/2008, 18h50
  5. Réponses: 9
    Dernier message: 07/11/2006, 15h12

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