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 :

Ondelette Morlet


Sujet :

Images

  1. #1
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut Ondelette Morlet
    Salut
    Je veux appliquer la transformation ondelettes sur une image.
    J'ai choisi l'ondelette de Morlet et j'ai écrit ce code :
    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
    figure;
    y=imread ('lena.gif');      % image originale
    imshow(y);
    title('Image originale');
    [m,n]=size(y);
     
     
    clf
    ii=sqrt(-1);
    %n=length(y)-1;
     
     
    pi=3.14;
    p=fix(log(n)/log(2));
    dx=1/n;
    t=0:dx:1;
    x=-1:dx:1;
    %x=-4:dx:4;
    %
    % calcul de l'ondelette
      a0=0.5;
      %a0=1/2;
    a0=a0^(1/2);
    p=2*p;
    W=zeros(p,n+1);
    %for i=p-1:-1:0
    for e=1:m 
    for i=0:p-1   
     
    %	disp('echelle')
    	a=a0^i;
    	xx=x/a; 
    	%g=2*pi*((1-2*pi*xx.^2).*exp(-pi*xx.^2))./sqrt(a);
    	%plot(x,g),title('ondelette chapeau mexicain')
                     g=exp(-xx.^2/2).*exp(ii*5*xx)./sqrt(a);
    	    plot(x,real(g)),title('ondelette de Morlet-partie reelle ')
    %   disp('appuyer sur une touche pour continuer')
    %   pause
    %
    % calcul des coefficients d'ondelettes a l'echelle a
    %
    	wa=conv(y(e,:),g);
    	W(i+1,1:n)=abs(wa(n+1:2*n));
    end
    end
    mais, quand j'exécute, j'obtiens cette erreur :
    ??? Error using ==> filter
    Function 'filter' not defined for variables of class 'uint8'.

    Error in ==> C:\MATLAB6p1\toolbox\matlab\datafun\conv.m
    On line 37 ==> c = filter(a, 1, b);

    Error in ==> C:\MATLAB6p1\work\moretfin.m
    On line 52 ==> wa=conv(y(e,,g);
    Est-ce que quelqu'un peut m'aider pour résoudre ce problème

  2. #2
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    salut,

    essaie de convertir tes donnees 'uint8' en donnees 'double', comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res = conv(double(signal), f);
    A+

  3. #3
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    j'ai essai de modifier :
    par
    çàd j'ai supprimer la boucle de e

    mais quand j'execute j'oubtient:
    ??? Error using ==> conv
    A and B must be vectors.

    Error in ==> C:\MATLAB6p1\work\moretfin.m
    On line 53 ==> wa=conv(double(y),g);
    d'autre part si je laisse la boucle et j'ajout Double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wa=conv(double(y(e,:)),g);
    le matlab se bloque !!!!!!!!!!

  4. #4
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    j'ai modifier le ligne par celle çi:
    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     wa=conv(double(y(:)),g);
    W(i+1,1:n)=abs(wa(n+1:2*n));
    mais loes de l'execution il s'affiche:
    citation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ???  In an assignment  A(matrix,matrix) = B, the number of rows in B
    and the number of elements in the A row index matrix must be the same.
     
    Error in ==> C:\MATLAB6p1\work\moretfin.m
    On line 55  ==> 	W(i+1,1:n)=abs(wa(n+1:2*n));
    est quelqu'un sait commet je resolu ce pb??

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Normal, W(i+1;1:n) est du 1*n quand abs(wa(n+1:2*n)) est de taille n*1

  6. #6
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    oui oui
    mais quand je convrtis les lignes par collonne
    matlab se bloque

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Pas normal, tu l'as réinstallé ? Et c'est le cas sur plusieurs machines ?

  8. #8
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    non je ne sais pas , je l'essai sur ma machine seulement!!!
    maintenant j'ai modifier une portion de mon code ,
    précedament j'avais:


    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    wa=conv(double(y(:)),g);
    W(i+1,1:n)=abs(wa(n+1:2*n));
    donc wa c'est une vecterur
    moi j'aimerais qu'elle deviendra matrice pour pouvoir l'ajouter la marque apres
    je l'ai modifié par:

    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    wa(:)=conv(double(y(:)),g);
    W(i+1,1:n)=abs(wa(n+1:2*n));
    mais cet erreur s'affichera:


    citation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ???  In an assignment  A(:) = B, the number of elements in A and B
    must be the same.
     
    Error in ==> C:\MATLAB6p1\work\chapeaaaaaaaaaa.m
    On line 60  ==> wa(:)=conv(double(y(:)),g);
    je sais pas commet je resoudre!!!!!!!!!

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    quelle est la taille de y, de g et de wa ?

  10. #10
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    la taille de y : 256*256
    ..............g : 1 * 513
    pou la taille de wa qaund elle est vecteur est 66048 * 1
    mais apres modification de code par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    wa(e,:)=conv(y(e,:),g);
     W(i+1,1:n)=abs(wa(n+1:2*n));
    la taille deviet wa : 256*256

    et cet erreur s'affiche
    citation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ??? Error using ==> filter
    Function 'filter' not defined for variables of class 'uint8'.
     
    Error in ==> C:\MATLAB6p1\work\conv.m
    On line 37  ==>     c = filter(a, 1, b);
     
    Error in ==> C:\MATLAB6p1\work\chapeaaaaaaaaaa.m
    On line 54  ==> wa(e,:)=conv(y(e,:),g);
     
    quant j'ajout double devant y matlab se bloque:?

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    L'erreur est là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wa(e,:)=conv(y(e,:),g);
    Pas autrepart, donc vérifie les tailles. Je ne comprend pas ce que tu dis, une fois ça vaut 66048 et après, ça vaut 256*256, ce qui n'est pas possible.

  12. #12
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    code:
    precedament j'ai tapé ce code :
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    wa=conv(double(y(:)),g);
    W(i+1,1:n)=abs(wa(n+1:2*n));
    donc wa c'est une vecterur de taille 66048*1
    moi j'aimerais que wa sooit une matrice
    pour cela j'ai appliqué la convolution sur chaque ligne
    comme vous voyez sur le code principale j'ai utilisé une boucle
    (for for e=1:m )

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      wa(e,:)=conv(y(e,:),g);
       W(i+1,1:n)=abs(wa(n+1:2*n));
    cette fois çi la taille de wa deviendra 256*256
    et ça ce que je veux
    car apres l'application de la transformation ondeletta j'ajoute wa + z avec z est un marque( matrice 256*256 rempli pseudo aleatoirement)

    le pb c que matlab n'adet pas cette modification , il continu de me donner la meme erreur!!!!!!!

  13. #13
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    wa est de taille 256*256, mais conv(y(e,,g) est de taille 1*768, c'est pas trop possible de faire ce que tu fais.
    Encore une fois, ça ne sert à rien de poster la deuxième ligne, elle nous embrouille et n'est pas responsable de ton erreur.

  14. #14
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    Ah oui vous avez raison
    mais puisque wa: 256*256 et g :1 *768
    Pourquoi je n'applique pas la convolution pour chaque ligne de wa
    cette fois-ci j'aurais :
    wa : 1*256
    g:1*768
    est-ce possible !

  15. #15
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    En français, ça donne quoi, je n'ai pas compris ta question.

  16. #16
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    Ma question c'était :
    si j'applique la convolution de y et g sur chaque ligne de wa
    c'est à dire je considère que wa est une matrice de 256*256

    pour pouvoir résoudre le problème de dimension
    cette fois-ci pour chaque ligne (selon la boucle de ligne) j'aurais:
    wa : 1*256
    g : 1*768

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for e=1:m
        wa(e,:)=conv(double(y(:)),g);
    end
    mais j'aurais cet erreur !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ???  In an assignment  A(I) = B, the number of elements in B and
     I must be the same.
     
    Error in ==> C:\MATLAB6p1\work\chapeaaaaaaaaaa.m
    On line 55  ==>    wa(e)=conv(double(y(:)),g);

  17. #17
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Il te faut couper les éléments extérieurs, ne pas les utiliser. Tu stockes dans une variable temporaire le retour de la convolution et tu mets dans wa la partie qui t'intéresse.

  18. #18
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    j'ai pas bien compris
    vous pouvez me montrer par un exemple

  19. #19
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p = conv(...);
    wa(ceque tu veux) = p(la partie qui t'intéresse);

  20. #20
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    Ah ok.
    Je vais essayer, et voir ce que cela me donne maintenant.
    Merci

    J'ai mis ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    wa=zeros(m,n);
    jj=conv(double(y(:)),g);
    wa(:,e)=jj(1:e);
    W(i+1,1:n)=abs(jj(n+1:2*n));     %  quand je change jj par wa MATLAB se bloque
    j'obtiens cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ??  In an assignment  A(matrix,matrix) = B, the number of rows in B
    and the number of elements in the A row index matrix must be the same.
     
    Error in ==> C:\MATLAB6p1\work\chapeaaaaaaaaaa.m
    On line 58  ==>   W(i+1,1:n)=abs(jj(n+1:2*n));
    mais normalement je dois mettere wa au lieu de jj
    à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    W(i+1,1:n)=abs(jj(n+1:2*n));
    je ne sais pas pourquoi MATLAB se bloque!

Discussions similaires

  1. Ondelette de morlet
    Par usto2005 dans le forum Signal
    Réponses: 5
    Dernier message: 09/05/2011, 19h20
  2. Ondelette de morlet sur un signal
    Par kheira dans le forum C++
    Réponses: 1
    Dernier message: 23/03/2010, 15h04
  3. [Débutant] Ondelette de Morlet sur un signal
    Par kheira dans le forum Signal
    Réponses: 9
    Dernier message: 12/03/2010, 16h09
  4. [Débutant] Appliqué une Ondelette de morlet sur un signal
    Par kheira dans le forum C++Builder
    Réponses: 0
    Dernier message: 11/03/2010, 19h44

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