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

    Informations professionnelles :
    Activité : Développeur informatique

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

    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 514
    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 514
    Points : 45 595
    Points
    45 595

    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 : Gestion des cartes graphiques NVIDIA dans MATLAB : le NVIDIA System Management Interface

    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 : 8 774
    Points
    8 774

    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 informatique
    Inscrit en
    février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations professionnelles :
    Activité : Développeur informatique

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

    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
  •