Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Membre confirmé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : février 2006
    Messages : 360
    Points : 246
    Points
    246

    Par défaut Comment appliquer un filtre gaussien sur une image couleur

    voila j'essaie de faire un filtre gaussien d'une image couleur
    voici ma fonction
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function GA=filtre_gausse(M)
    I=imread(M);
    R=I(:,:,1);
    G=I(:,:,2);
    B=I(:,:,3);
    IN=rgb2gray(I);
    [a,b]=size(IN);
    R=floor(double(R));
    G=floor(double(G));
    B=floor(double(B));
    GA=[zeros(a-2,b-2),zeros(a-2,b-2),zeros(a-2,b-2)];
    for x=2:a-1;
        for y=2:b-1;
           GA(x-1,y-1,1)=uint8(double((R(x-1,y-1)+R(x,y-1)+R(x+1,y-1)+R(x-1,y)+R(x,y)+R(x+1,y)+R(x-1,y+1)+R(x,y+1)+R(x+1,y+1))/9));
           GA(x-1,y-1,2)=uint8(double((G(x-1,y-1)+G(x,y-1)+G(x+1,y-1)+G(x-1,y)+G(x,y)+G(x+1,y)+G(x-1,y+1)+G(x,y+1)+G(x+1,y+1))/9));
           GA(x-1,y-1,3)=uint8(double((B(x-1,y-1)+B(x,y-1)+B(x+1,y-1)+B(x-1,y)+B(x,y)+B(x+1,y)+B(x-1,y+1)+B(x,y+1)+B(x+1,y+1))/9));
        end
    end
    subplot(121);imshow(I);title('image _ M');
    subplot(122);imshow(GA);title('image _ GR');
    mais ça ne marche m'affiche une image blanche et me donne l'erreur:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    ??? Error using ==> image
    TrueColor CData contains element out of range 0.0 <= value <= 1.0.
    
    Error in ==> C:\MATLAB6p5\toolbox\images\images\imshow.m
    On line 104  ==> hh = image(xdata, ydata, cdata, 'BusyAction', 'cancel', ...
    
    Error in ==> C:\MATLAB6p5\work\filtre_gausse.m
    On line 20  ==> subplot(122);imshow(GA);title('image _ GR');

  2. #2
    Dut
    Dut est déconnecté
    Rédacteur/Modérateur

    Avatar de Dut
    Homme Profil pro Jérôme Briot
    Ingénieur hospitalier
    Inscrit en
    novembre 2006
    Messages
    17 615
    Détails du profil
    Informations personnelles :
    Nom : Homme Jérôme Briot
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2006
    Messages : 17 615
    Points : 48 982
    Points
    48 982

    Par défaut

    Code :
    1
    2
    3
    4
    5
    6
    7
    ??? Error using ==> image
    TrueColor CData contains element out of range 0.0 <= value <= 1.0.
    Error in ==> C:\MATLAB6p5\toolbox\images\images\imshow.m
    On line 104  ==> hh = image(xdata, ydata, cdata, 'BusyAction', 'cancel', ...
    
    Error in ==> C:\MATLAB6p5\work\filtre_gausse.m
    On line 20  ==> subplot(122);imshow(GA);title('image _ GR');
    Tout est écrit dans le message d'erreur.
    Le problème vient des valeurs contenues dans GA.
    Les fonctions IMAGE, IMAGESC, IMSHOW... ne supporte que les images RGB dont les valeurs des pixels sont comprises entre 0 et 1. Il suffit donc de diviser les valeurs de GA par 255 (2^8-1 pour une image codée sur 8bits).
    Code :
    1
    2
    3
    4
    5
    6
    7
    for x=2:a-1;
        for y=2:b-1;
           GA(x-1,y-1,1)=uint8(double((R(x-1,y-1)+R(x,y-1)+R(x+1,y-1)+R(x-1,y)+R(x,y)+R(x+1,y)+R(x-1,y+1)+R(x,y+1)+R(x+1,y+1))/9)./255);
           GA(x-1,y-1,2)=uint8(double((G(x-1,y-1)+G(x,y-1)+G(x+1,y-1)+G(x-1,y)+G(x,y)+G(x+1,y)+G(x-1,y+1)+G(x,y+1)+G(x+1,y+1))/9)./255);
           GA(x-1,y-1,3)=uint8(double((B(x-1,y-1)+B(x,y-1)+B(x+1,y-1)+B(x-1,y)+B(x,y)+B(x+1,y)+B(x-1,y+1)+B(x,y+1)+B(x+1,y+1))/9)./255);
        end
    end
    Pour ce qui est du filtrage gaussien, tu peux utiliser la fonction FILTER2 sur chaque composante (R,G,B) de l'image. Tu trouveras aisément la matrice de ce filtre sur internet.
    Sur mon blog : Utiliser Automation depuis Scilab sur Windows

    Ma page personnelle avec mes contributions MATLAB (R2011b/R2014a - Windows, Linux et Mac) et Hardware

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Rédacteur/Modérateur

    Avatar de millie
    Profil pro
    Inscrit en
    juin 2006
    Messages
    6 945
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations forums :
    Inscription : juin 2006
    Messages : 6 945
    Points : 9 777
    Points
    9 777

    Par défaut

    A noter qu'il est possible d'appliquer un filtre de flou gaussien à une image de deux manières. Soit en faisant un produit de convolution (comme tu le fais il me semble) (dans ce cas, il existe plusieurs taille pour le noyau de convolution), soit en passant dans l'espace de Fourier (ce qui sera forcement nécessaire si la taille du noyau devient trop important).

    Enfin, si tu te limites à un noyau 3*3, ça ira très bien comme ça
    Je ne répondrai à aucune question technique en privé

  4. #4
    Membre confirmé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : février 2006
    Messages : 360
    Points : 246
    Points
    246

    Par défaut

    mon problème maintenant c'est de reconstruire limage couleur après lui avoir appliqué le filtre gaussien comme avec la solution que vous m'avez donner ça a l'aire de marché mais j'ai sur l'affichage 3image des trous niveau de couleur.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •