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 :

Visualiser une densité sur un maillage 3D


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut Visualiser une densité sur un maillage 3D
    Bonjour à tous,

    J'ai déjà créé un topic la semaine dernière pour réaliser un maillage (voir ici) et comme j'en veux toujours plus et que je ne suis pas très doué, je reviens à la charge pour avoir d'autres infos.

    Donc voilà je souhaiterais faire la même chose que dans l'autre topic, sauf que je veux le faire en 3D. Je m'y suis attaqué tranquillement hier soir, en prenant le temps d'y aller étape par étape, et là je bloque.

    Voici mon code provisoire :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    %maillage 3D x,y,vitesse
     
    clear all
    clc
    close all
     
    %==========================================================================
    %Load de mes données
     
    Traj1=load('E:\Mes docs\pour_daniel\callac\resultats_19avr\Trajectoire_Fusion_fuite_19avr.txt');
    Traj2=load('E:\Mes docs\pour_daniel\callac\resultats_19avr\Trajectoire_Vision3D_arriv_19avr.txt');
    Traj=[Traj2;Traj1];
     
     
     
    %==========================================================================
    %Extraction de mes coordonnées x et y et de la vitesse
     
    x=Traj1(:,11);
    y=Traj1(:,10);
    v=3.6*Traj1(:,17);
     
    x=round(10*x); %formule pour avoir une précision 0.1 m
    y=round(10*y);
    v=round(10*v)/10;
     
    %==========================================================================
    %Détermination de différentes valeurs utilisées par la suite sur les graphes
     
    maxx=floor(max(x)/10+1)*10; % calcul des limites pour le maillage
    minx=floor(min(x)/10)*10;
    maxv=floor(max(v)/10+1)*10;
    minv=floor(min(v)/10)*10;
    maxy=floor(max(y)/10+1)*10;
    miny=floor(min(y)/10)*10;
     
    intx=(maxx-minx)/5; %calcul de l'intervalle des graduations pour l'affichage des axes
    inty=(maxy-miny)/5;
    intv=(maxv-minv)/5;
     
     
    %==========================================================================
    %Tracé du graphique représentants tous les points
     
    figure
     
    % subplot(211)
    plot3(x,y,v,'r.')
    % axis equal
    set(gca,'xlim',[minx maxx],'ylim',[miny maxy],'zlim',[minv maxv],...    
        'xtick',minx:intx:maxx,'ytick',miny:inty:maxy, ...
        'xgrid','on','ygrid','on','zgrid','on')
     
    hold on;
     
    x=x-minx;
    y=y-miny;
    v=v-minv;
     
    %==========================================================================
    %fonction unique : retourne le vecteur xyv contenant les elements de la
    %matrice [x(:) y(:) v(:)] triés dans un ordre croissant et sans répétitions
    %L'ajout de rows permet de faire le trie en tenant compte des valeurs de
    %toute la ligne.
     
    [xyv,a,b] = unique([x(:) y(:) v(:)],'rows');
     
     
    %==========================================================================
    %fonction histc : permet, pour chaque coordonnées, de compter le nombre de
    %points qui correspondent.
     
    n=histc(b,unique(b));
     
     
    %==========================================================================
    %création du maillage à partir d'une matrice de 0
     
    clear Traj1 Traj2 Traj 
     
    M=zeros(maxx-minx,maxy-miny,maxv-minv);
    idx = sub2ind(size(M),xyv(:,1),xyv(:,2),xyv(:,3));
    idx=round(idx);
    M(idx) = n;
     
    % for i=1:90
    % M=[M(:,:,i)];
    % end
     
     
    %==========================================================================
    %tracé du maillage
     
    % figure
    subplot(212)
    image('xdata',[0 maxx],'ydata',[0 maxy],'zdata',[0 maxv],'cdata',M.'+1)
     
    colormap(hsv(max(n)+1));
    c=colorbar;
    set(c,'ytick',1:max(n)+1,'yticklabel',num2str((0:max(n)).'))
    axis equal
    set(gca,'xlim',[minx maxx],'ylim',[miny maxy],'zlim',[minv maxv],...
        'xtick',minx:intx:maxx,'ytick',miny:inty:maxy,'ztick',minv:intv:maxv, ...
        'xgrid','on','ygrid','on','zgrid','on',...
        'layer','top')
    hold on

    Quand je lance ceci, j'ai le message d'erreur suivant qui s'affiche :
    ??? Error using ==> transpose
    Transpose on ND array is not defined.

    Error in ==> maillage_3D at 106
    image('xdata',[0 maxx],'ydata',[0 maxy],'zdata',[0 maxv],'cdata',M.'+1)
    J'ai donc fait une petite recherche sur cette erreur, et j'ai vu qu'il fallait que je concatène ma matrice M (ici, tout en bas). Sauf que cette matrice M est de tres grande dimension (430x230x90) et par conséquent je n'arrive pas à appliquer la fonction "cat", si bien entendu c'est possible.

    Donc voilà, je demande un peu d'aide pour cette concaténation. ET je souhaiterais également savoir si le fait de concaténer me permettra de créer mon image en 3D et de réaliser correctement mon maillage comme en 2D?

    Merci par avance à tout le monde.

  2. #2
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par husker Voir le message
    Sauf que cette matrice M est de tres grande dimension (430x230x90) et par conséquent je n'arrive pas à appliquer la fonction "cat", si bien entendu c'est possible.
    Pourquoi n'arrives-tu pas à appliquer la formule de la FAQ sur M ? Ques se passe-t-il quand tu essayes ?

    Pour ta dernière question : je ne sais pas...

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Citation Envoyé par caro95470 Voir le message
    Pourquoi n'arrives-tu pas à appliquer la formule de la FAQ sur M ? Ques se passe-t-il quand tu essayes ?
    Parce que je ne suis pas très doué .
    Si j'applique la formule tel que c'est écrit, ça me donne un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    M=cat(90,M(:,:,1).',M(:,:,2).',..................M(:,:,90).');
    Donc je ne me vois pas écrire cette formule avec mes 90 matrices 2D.

    Donc j'ai testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i=1:90
    M=cat(90,M(:,:,i).');
    end
    Mais bien entendu ça ne marche pas. Je ne sais pas pourquoi je bloque la dessus, car c'est pas ce qui est le plus compliqué je pense.

  4. #4
    Expert confirmé
    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
    Par défaut
    Euh, tu as dis que la taille de ta matrice était 430x230x90, donc elle est 3D.

    Déjà : le 1er 3 dans la formule de la FAQ correspond au nombre de dimensions de ta matrice (donc 3 dans ton cas aussi) et non pas à la taille de ta 3ème dimension (90 dans ton cas).
    (L'exemple de la FAQ est un peu perturbant car la taille de ta 3ème dimension est aussi 3)

    L'objectif est de concaténer les matrices selon la 3ème dimension.
    Je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    X=M(:,:,1).';
    for i=2:90
       X=cat(3,X,M(:,:,i).');
    end
    A tester

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Comment vas-tu visualiser les couleurs ?
    Tu ne peux plus utiliser la fonction IMAGE ?

    SI tu empiles 90 images les unes sur les autres, tu auras quelques problèmes pour les visualiser, non ?

    A mon avis, tu devrais d'abord réfléchir au type de représentation finale que tu souhaites obtenir...

  6. #6
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Citation Envoyé par Dut Voir le message
    Comment vas-tu visualiser les couleurs ?
    Tu ne peux plus utiliser la fonction IMAGE ?

    SI tu empiles 90 images les unes sur les autres, tu auras quelques problèmes pour les visualiser, non ?

    A mon avis, tu devrais d'abord réfléchir au type de représentation finale que tu souhaites obtenir...
    Voilà la confirmation de ce que je pensais.
    J'ai à peu près en tête ce que je souhaite mais je ne sais pas trop à quoi ça ressemblera.
    J'ai des points avec des coordonnées x et y et une vitesse correspondante. L'objectif est le même qu'en 2D, sauf que la j'y ajoute une troisieme dimension. Du point de vue des couleurs je souhaite la même chose, c'est à dire une colormap avec la couleur qui change en fonction du nombre de points ayant les mêmes coordonnées (x,y et v).
    Il y a de grandes chances pour que j'ai des points éparpillés un peu partout dans mon espace, mais ça peut être intéressant.

    Ca a quand meme l'air bien compliqué ce que je demande, en tout cas pour moi.

  7. #7
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Merci pour tes réponses Caro.
    Effectivement le 3 m'a un peu induit en erreur.
    J'ai appliqué ce que tu m'as proposé, et la concaténation fonctionne bien sauf que j'ai toujours le même message d'erreur. Je précise que j'ai remplacé le M par X sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    image('xdata',[0 maxx],'ydata',[0 maxy],'zdata',[0 maxv],'cdata',X.'+1)
    Donc je ne suis pas sur que le fait de concaténer soit la solution, car ça ne fait que modifier ma matrice M (430x230x90) en une matrice X (230x430x90), donc pas forcément intéressant pour ce que je veux en faire finalement.

    En regardant l'aide sur la fonction "image" j'ai ça :

    help image
    IMAGE Display image.
    IMAGE(C) displays matrix C as an image. Each element of C
    specifies the color of a rectilinear patch in the image. C can be
    a matrix of dimension MxN or MxNx3, and can contain double, uint8,
    or uint16 data.
    Il semblerait par conséquent qu'avec mon 90 comme troisieme dimension je ne puisse pas appliquer cette fonction, ce qui m'embête un peu à vrai dire.

    Alors existe-t-il une autre fonction susceptible de me convenir ou ai je mal compris ce que dit l'aide?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/12/2012, 12h01
  2. Visualiser une densité sur un maillage 2D
    Par husker dans le forum MATLAB
    Réponses: 13
    Dernier message: 12/06/2008, 11h37
  3. Visualiser le biais sur une image IRM
    Par larimoise dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 04/03/2007, 22h52
  4. Réponses: 19
    Dernier message: 14/12/2006, 14h21
  5. Projection d'une courbe sur un maillage 3D
    Par Kevinyaya dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 17/05/2006, 10h00

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