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

Images Discussion :

fonction plot + vitesse d'execution [Débutant]


Sujet :

Images

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut fonction plot + vitesse d'execution
    Bonjour,

    J'ai en entrée une matrice (environ 2000*100) en niveaux de gris représentant une image echographique : je souhaite l'afficher 'en éventail' (représentation convexe) dans une premier temps : il y aura donc des 'trous'.
    En gros on prend chaque ligne de la matrice d'entrée et on les mets cote a cote suivant un arc de cercle.

    Voici une partie du code que j'utilise pour l'instant :
    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
     
    FinalMatrix=zeros(400,400);
    alpha=60;
    StartAngle=((270-alpha/2)*2*pi)/360;
    EndAngle=((270+alpha/2)*2*pi)/360;
    PixPerLine=2000;
    NumberOfLines=100;
     
    theta=linspace(StartAngle,EndAngle,NumberOfLines);
    Circle1.x=150+50*cos(theta);
    Circle1.y=130+50*sin(theta);
     
    Circle2.x=150+30*cos(theta);
    Circle2.y=130+30*sin(theta);
     
     
    figure('Position',[500 200 800 800]),hold on,xlim([125 175]),ylim([75 105]);
    colormap(gray);
    image(FinalMatrix);
     
     
    for i=1:size(theta,2)
     
        StartPoint.x=Circle1.x(1,i);StartPoint.y=Circle1.y(1,i);
        EndPoint.x=Circle2.x(1,i);EndPoint.y=Circle2.y(1,i);
        LineTest{i}.x=linspace(StartPoint.x,EndPoint.x,PixPerLine);
        LineTest{i}.y=linspace(StartPoint.y,EndPoint.y,PixPerLine);
     
     
    tic
            for j=size(LineTest{1}.x,2):-1:1
                MyColor=StartMat(PixPerLine-j+1,i);
                plot(LineTest{i}.x(1,j),LineTest{i}.y(1,j),'Color',[MyColor MyColor MyColor]);
            end
    toc
     
    end
    Apres quelques tests avec 'tic toc' c'est la fonction plot qui rend l'execution longue (environ 2min pour la taille reelle de la matrice). Alors qu'avec image, imagesc ou imshow le resultat est intentanné pour le meme nb de ligne/pixel par ligne.

    Y'a t-il un moyen plus efficace (=moins de temps) sous matlab pour construire plusieurs lignes avec une couleur différente pour chaque point?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Quelques remarques préliminaires:
    - Pour des vecteurs, length(Vecteur) est plus adapté que size(Vecteur,2) ou size(Vecteur,1).
    - De même pour des vecteurs, il est inutile d'accéder aux éléments de la manière Vecteur(1,j) ou Vecteur(j,1), un simple Vecteur(j) est suffisant.

    Pour ce qui est de ton problème, tu peux un peu accélérer les choses en utilisant line au lieu de plot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    line(LineTest{i}.x(1,j),LineTest{i}.y(1,j),'Color',[MyColor MyColor MyColor]);
    Mais tu te retrouveras quand même à la fin avec 200000 objets de type line dans ta figure, ce qui est énorme, le traçage sera de plus en plus ralenti au fur et à mesure que le tracé avancera.

    Tu pourras peut-être t'inspirer de la Comment tracer une ligne dont la couleur varie ?
    Dernière modification par Invité ; 23/05/2012 à 16h59.

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Salut, merci beaucoup de la réponse !
    J'ai regardé la faq, effectivement ca a l'air de correspondre, mais pour l'instant je n'arrive pas a le faire marcher.
    Je ne sais pas si cela peut s'appliquer a mon probleme au final car la proprieté cdata, qui s'occupe de la couleur (dans l'exemple), a l'air d'interpoler les couleurs par rapport a une matrice quelconque de chiffres, or moi j'aurais besoin de lire directement les couleurs.

    En fait mon probleme est assez simple il se resume a ca :
    - J'ai 100 lignes, les coordonnées de chaque points de chaque lignes et la couleur, unique, de chaque point.
    - Je souhaite afficher le tout rapidement

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Re,
    Pour ceux que ca interesse, j'ai reussi, avec la boucle suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    for i=1:length(theta)
     
        StartPoint.x=Circle1.x(i);StartPoint.y=Circle1.y(i);
        EndPoint.x=Circle2.x(i);EndPoint.y=Circle2.y(i);
        LineTest{i}.x=linspace(StartPoint.x,EndPoint.x,PixPerLine);
        LineTest{i}.y=linspace(StartPoint.y,EndPoint.y,PixPerLine);
     
        patch('xdata',[nan;LineTest{i}.x';nan],...
            'ydata',[nan;LineTest{i}.y';nan],...
            'cdata',[nan;GrayScaleMatrix;nan],...
            'facecolor','interp',...
            'edgecolor','interp');
    end
    Bien que je ne comprenne pas l'atuce du 'nan' au début et a la fin des matrices (sans quoi ca ne marche pas), cela fonctionne tres bien.

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

Discussions similaires

  1. Problème de vitesse d'execution
    Par Samyhijodelaluna dans le forum MFC
    Réponses: 31
    Dernier message: 17/05/2006, 11h41
  2. Réponses: 4
    Dernier message: 13/11/2005, 12h16
  3. Réponses: 3
    Dernier message: 16/10/2005, 13h43
  4. [Language]Calculer Vitesse d'execution
    Par schneiderj dans le forum Langage
    Réponses: 12
    Dernier message: 27/04/2005, 20h43
  5. vitesse d'execution
    Par bakonu dans le forum OpenGL
    Réponses: 15
    Dernier message: 07/05/2004, 11h18

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