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 :

Convolution d'une image par plusiers masques


Sujet :

Images

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 20
    Points
    20
    Par défaut Convolution d'une image par plusiers masques
    salut, je suis débutante en programmation sous matlab ;je travaille sur le détecteur multi-échelle de canny
    en première étape je veux faire un programme qui fait la convolution d'une image par plusieurs masques(vecteurs )
    I1=I*theta*theta*theta......
    comment fair pour programmer cette fonction ?
    j'ai vraiment besoin de savoir la solution,merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 313
    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 313
    Points : 52 939
    Points
    52 939
    Par défaut
    Tu peux utiliser plusieurs fois la fonction CONV2 dans une boucle FOR-END, non ?

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 20
    Points
    20
    Par défaut convolution d'une image par plusieurs masques
    bonjour, j'ai fait un petit programme pour convoluer mon image par plusieurs masques:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     I=imread('moon.tif');
    imshow (I)
    thetax=[1/4 1/2 1/4];n=3;
    I1=conv2(double(I),thetax,'same')/256;
    I12=conv2(double(I1),thetax,'same');
    I13=conv2(double(I12),thetax,'same');
    comment je peut introduire la boucle for pour faire une géneralisation de n convolutions?
    j'ai besoin d'aide !
    merci

  4. #4
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    salut,

    essayes avec un code du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    I=imread('moon.tif');
    imshow (I)
    thetax=[1/4 1/2 1/4];
    n=3;
     
    Imgs = [];
    tmp = double(I)/256; 
     
    for i=1:n
      tmp =conv2(tmp,thetax,'same');
      Imgs{i} = tmp; % un tableau de cellules
    end
    ++ bonne chance

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 20
    Points
    20
    Par défaut detecteur multi-echelle de canny
    salut , j'ai fais un programme qui calcule la norme et la direction d'une image convoluer par plusieurs masques ,je suis pas sure que les résultats obtenue sont vrais
    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
    I=imread('rice.png');
    imshow (I)
    thetax=[1/4 1/2 1/4];thetay=[1/4 1/2 1/4].';
    dx=[1/4 1/2 1/4];dy=[1/4 1/2 1/4].';
    n=3;
          %calcule de l'ondelette suivant x:
    Imgs = [];
    I1= double(I)/256; 
     
    for i=1:n
      I1 =conv2(I1,thetax,'same');
      Imgs{i} = I1; % un tableau de cellules:
    end;
     
    I2=conv2(I1,dx,'same');
    w1=immultiply(I2,sqrt(2.^n));
    figure;imshow(w1)
        %calcule de l'ondelette suivant y:
    Imgs = [];
    I3= double(I)/256; 
    for i=1:n
      I3 =conv2(I3,thetay,'same');
      Imgs{i} = I3; % un tableau de cellules:
    end;
     
    I4=conv2(I3,dy,'same');
    w2=immultiply(I4,sqrt(2.^n));
    figure;imshow(w2)
           %calcule de la norme de gradient  l'image :
     I5=immultiply(w1,w1); 
     I6=immultiply(w2,w2);  
     I7=imadd(I5,I6);
     mf=sqrt(I7);
     figure;imshow(mf)
     I8=imdivide(w2,w1);
     af=atan(I8);
     figure;imshow(af)
    j'ai besoin de savoir est ce que mon programme est juste ,svp repond moi

    merci

  6. #6
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut,

    De mon point de vu, tu dois virer les immultiply(..,sqrt(2.^n)) car tes filtres sont à priori normalisés. Pour le reste, je n'arrive pas à comprendre la finalité de ton code.

    ++

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 20
    Points
    20
    Par défaut convoluer l'image par plusieurs filtres
    mon projet de fin d'étude consiste a :
    -convoluer l'image par plusieurs masques (les echelles )
    -dériver l'image résultante suivant x et suivant y puis la multiplier par (sqrt(2^n)) pour trouver les coéfficient d'ondelettes suivant x et y
    -on calcule la norme et la direction de cette image puis on détecte les maxima locaux et on fait un chainage pour trouver finalement les contours
    je veux savoir si je suis en bonne voie dans le programme que j'ai fait
    veuillez me le confirmer svp
    merci

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 20
    Points
    20
    Par défaut le calcule de la norme et la direction d'une image convouler par des masques
    bonjour;j'ai fais ce programme:
    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
     
    I=imread('moon.tif');
     figure;imshow (I)
    thetax=[1/2,1/4,1/2];thetay=[1/2 1/4 1/2].';
    dx=[1/4 1/2 1/4];dy=[1/4 1/2 1/4].';
    n=3;
     
    Imgs = [];
    I= double(I)/256; 
     
    for i=1:n
      I =conv2(I,thetax,'same');
       I =conv2(I,thetay,'same');
     
      Imgs{i} = I; % un tableau de cellules:
    end;
    %calcule de l'ondelette suivant x:
    I1=conv2(I,dx,'same');
    w1=immultiply(I1,sqrt(2.^n));
    figure;imshow(w1)
     
        %calcule de l'ondelette suivant y:
     
     
    I2=conv2(I,dy,'same');
    w2=immultiply(I2,sqrt(2.^n));
    figure;imshow(w2)
           %calcule de la norme de gradient  l'image :
     I3=immultiply(w1,w1); 
     I4=immultiply(w2,w2);  
     I5=imadd(I3,I4);
     mf=sqrt(I5);
     figure;imshow(mf)
    % calcule de la direction de gradient de l'image:
     I6=imdivide(w2,w1);
     af=atan(I6);
     figure;imshow(af)
    le probleme c'est que ce programme est executable que pour l'image moon !!

  9. #9
    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
    Si ton problème est de pouvoir paramétré (ie rentrer le nom de l'image que tu veux) tu peux utiliser uigetfile avant le imread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [fichier,rep]=uigetfile('*.gif');%regarder l'aide pour changer les options
    %regarder aussi l'aide pour tester si l'utilisateur a cliqué sur cancel
     
     
    I=imread(fullfile(rep,fichier));
    %et la suite de ton prog...

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 20
    Points
    20
    Par défaut convolution d'une image par plusieurs masques
    salut,
    j'ai pas compri le role de la fonction :"uigetfile"
    j'ai cherché d'autres images qui existent dans matlab comme cameraman , pout, rice .... ce programme est exécutable pour cameraman et rice et moon mais pour pout il n'est pas exécutable ? est ce que c'est un probleme de taille par exemple!!! merci

  11. #11
    Membre habitué Avatar de larimoise
    Inscrit en
    Octobre 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 220
    Points : 197
    Points
    197
    Par défaut
    j'ai cherché d'autres images qui existent dans matlab comme cameraman , pout, rice .... ce programme est exécutable pour cameraman et rice et moon mais pour pout il n'est pas exécutable ? est ce que c'est un probleme de taille par exemple!!! merci
    Je crois que pour décomposer une image par ondelettes, il faut que l'image soit carrée,c'est peut être la le problème!
    vérifies la taille des images avec size pour vérifier.

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    salut , j'ai fais un programme qui calcule les maxima locaux d'une image de gradient pour détecter les contours :
    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
     
    I=imread('cameraman.tif');
     figure;imshow(I);title ('fig1');
    thetax=[1/2,1/4,1/2];thetay=[1/2 1/4 1/2].';
    dx=[1/4 1/2 1/4];dy=[1/4 1/2 1/4].';
    n=3;
     
    Imgs = [];
    I= double(I)/256; 
     
    for i=1:n
      I =conv2(I,thetax,'same');
       I =conv2(I,thetay,'same');
     
      Imgs{i} = I; % un tableau de cellules:
    end;
     figure;imshow(I);title ('fig2');
    I1=conv2(I,dx,'same');
    w1=immultiply(I1,sqrt(n));
    figure;imshow(w1);title ('fig3');
     
     
    I2=conv2(I,dy,'same');
    w2=immultiply(I2,sqrt(n));
    figure;imshow(w2);title ('fig4');
           %calcule de la norme de gradient  l'image :
     I3=immultiply(w1,w1); 
     I4=immultiply(w2,w2);  
     I5=imadd(I3,I4);
     mf=sqrt(I5);
     figure;imshow(mf);title ('fig5');
    % calcule de la direction de gradient de l'image:
     I6=imdivide(w2,w1);
     af=atan(I6);
     figure;imshow(af);title ('fig6');
     af2= (af*180)/pi;
    imagesc(af2);title ('fig7');
    %calcul des maxima locaux:
    im=ones(256,256)*0;
    for i=2:254
        for j=2:254
    angle=af(i,j);
    point=mf(i,j);
    if (angle>=180) angle =180;
        if(angle<0) angle=180;
              if ((0<=angle)&(angle<22.5))
                grada=mf(i,j+1);
                gradb=mf(i,j-1);
              if (22.5<=angle)& (angle<67.5) 
                grada=mf(i-1,j+1);
                gradb=mf(i+1,j-1);
              if (67.5<=angle)& (angle<112.5) 
                grada=mf(i-1,j);
                gradb=mf(i+1,j);
              if (112.5<=angle)& (angle<157.5) 
                grada=mf(i-1,j-1);
                gradb=mf(i+1,j+1) ;
              if (157.5<=angle)& (angle<180) 
                grada=mf(i,j-1);
                gradb=mf(i,j+1);
     
       if (point>grada )& (point>garab) 
           im(i,j)=255;
       else 
           im(i,j)=0;
              end
     
              end
              end
              end
              end
              end
     
        end  
     
     
       end
     
          end
    end       
    figure;imshow(im);title('fig8')
    le probleme c'est que on voit pas l'image des maxima locaux (noir)
    je ne sais pas ou est la faute !!!!
    Quelqu'un a une idée?
    merci pour toute aide

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

Discussions similaires

  1. Convolution d'une image par la multiplication de deux filtres
    Par Azhag70 dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 31/03/2008, 14h26
  2. Transfert d'une image par socket stream
    Par francky23012301 dans le forum Langage
    Réponses: 1
    Dernier message: 31/10/2005, 16h06
  3. [MySQL] Comment afficher une image par défaut ?
    Par clicman dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 12/10/2005, 08h46
  4. Modifier une image par pixels
    Par mateo.14 dans le forum MFC
    Réponses: 10
    Dernier message: 21/01/2005, 15h09
  5. [FLASH MX] Envoyer une image par e-mail
    Par skyjoe dans le forum Flash
    Réponses: 2
    Dernier message: 22/10/2004, 18h11

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