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 :

Enlever des points rouges d'une images


Sujet :

Images

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Points : 14
    Points
    14
    Par défaut Enlever des points rouges d'une images
    Bonjour,

    Sur cette image, j'aimerais enlever les points rouges mais je n'y arrive pas (je débute).

    Est ce que vous auriez quelques piste ?


  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
    Si ton image est de type RGB et si le rouge est pur (255,0,0) , il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    RGB = imread(...);
     
    idx = (RGB(:,:,1) = 255) & (RGB(:,:,2) = 0) & (RGB(:,:,3) = 0);
     
    RGB(:,:,1) = RGB(:,:,1).*~idx;
     
    imwrite(RGB,...);

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Je ne sais pas si mes points sont pur rouge...

    Quand je lance ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    % Enlever les points rouges
    clear all;
    close all;
    clc;
     
    RGB = imread('albireo_bruit.bmp');
    idx = (RGB(:,:,1) = 255) & (RGB(:,:,2) = 0) & (RGB(:,:,3) = 0);
    RGB(:,:,1) = RGB(:,:,1).*~idx;
    Il me retourne une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ??? Error: File: albireo_bruit.m Line: 7 Column: 19
    The expression to the left of the equals sign is not a valid target for an assignment.

  4. #4
    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
    Je suis allé un peu vite (et surtout je n'ai pas testé le code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    RGB = imread('albireo_bruit.bmp','bmp');
     
    idx = (RGB(:,:,1) == 255) & (RGB(:,:,2) == 0) & (RGB(:,:,3) == 0);
     
    idx = cast(~idx,class(RGB));
     
    RGB(:,:,1) = RGB(:,:,1).*idx;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Merci ca fonctionne parfaitement.
    Mais est ce que tu pourrais m'expliquer ce que font les lignes de codes ?

  6. #6
    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
    Ton image est de type RGB. C'est à dire que la couleur de chaque pixel est codée avec 3 valeurs (R: red ; G : green ; B : blue)

    Lors de la lecture de l'image, les données sont donc stockées dans une matrices MxNx3 où chaque couche représente une des 3 couleurs RGB.

    Le codage de la couleur rouge dans le système RGB est (255,0,0).

    Donc pour trouver les pixels rouges de l'image il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    idx = (RGB(:,:,1) == 255) & (RGB(:,:,2) == 0) & (RGB(:,:,3) == 0);
    La variable idx stocke les indices logiques (voir la : Qu'est-ce que l'indexage logique ?)

    Une fois que les pixels rouges sont localisés (avec l'indexage logique), et comme tu souhaites les colorer en noir avec pour valeur RGB (0,0,0), il suffit de mettre la valeur 255 de la couche R à 0 pour chacun de ces pixels : (255,0,0) => (0,0,0)

    Ce qui se fait en multipliant les valeurs de la première composante R de l'image (ici R(:,:,1)) par le masque binaire tiré de idx

    Pour chaque valeur, si idx vaut 1 (le pixel est bien rouge) alors la valeur équivalente de R doit être mise à 0, sinon la valeur garde sa valeur initiale.

    Ce qui s'écrit en MATLAB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RGB(:,:,1) = RGB(:,:,1).*~idx;
    L'utilisation de CAST permet juste de s'affranchir du problème de multiplication entre classes différentes.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Merci Dut, c'est tout ta fait clair :-)

    Sinon j'ai d'autres problèmes a résoudre :

    Pour cette images :

    Je dois isoler les étoiles brillante. Est ce que tu connais une solution qui conviendrait mieux à celle que j'ai trouvé ?

    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
    % Isoler les étoiles les plus brillante
    clear all;
    close all;
    clc;
     
    img = imread('pleiades_i.jpg');
    imshow(img)
    img = rgb2gray(img);
    img = im2bw(img,graythresh(img));
    [img,n] = bwlabeln(img);
    stats =regionprops(img,'Area');
    idx = find([stats.Area] > 80);
    BW2 = ismember(img,idx);
     
    figure, imshow(BW2)
    ---

    Et pour cette image :

    Je dois filtrer le bruit, j'ai fait avec cette manière mais est ce que c'est bien réalisé ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    clear all;
    close all;
    clc;
     
    img =imread('CAMERAMAN_BRUIT.tif');
    imshow(img);
    h=ones(3,3);
    h(2,2)=0;
    h=h/8;
     
    imgfilt = imfilter(img,h);
    figure, imshow(imgfilt);

  8. #8
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut
    Citation Envoyé par KenT2004 Voir le message
    Et pour cette image :

    Je dois filtrer le bruit, j'ai fait avec cette manière mais est ce que c'est bien réalisé ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    clear all;
    close all;
    clc;
     
    img =imread('CAMERAMAN_BRUIT.tif');
    imshow(img);
    h=ones(3,3);
    h(2,2)=0;
    h=h/8;
     
    imgfilt = imfilter(img,h);
    figure, imshow(imgfilt);
    Vous appliquez ici un filtre linéaire moyennant, cependant le filtre que vous avez crée ne prend pas en considération la valeur du pixel central. Dans ce cas la nouvelle valeur d'un pixel vaut la moyenne de ses voisins.
    Mais de manière générale,le filtre moyennant effectue la moyenne de tous les pixels (pixel central y compris) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    h=ones(3,3);
    h=h/9;
    D'autre part, je pense que Matlab permet de générer des filtres prédéfinis. (fonction "fspecial" si je ne me trompe pas)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Ah oui tiens, je ne connaissait pas fspecial ... j'ai testé et effectivement c'est plus propre comme ca.

    Effectivement c'était une erreur. Enfaite j'avais mis le pixel central a 0 et donc /8 (j'avais lu cela quelque part) et je voulais voir la différence mais ca n'a pas changé grand chose. (d'ou le /8 qui est resté !)

    Pour l'autre images (les étoiles) tu n'as pas d'idées ?

  10. #10
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut
    Citation Envoyé par KenT2004 Voir le message

    Pour l'autre images (les étoiles) tu n'as pas d'idées ?
    Qu'a donné l'application du filtre de débruitage sur cette image? ça devrais faire l'affaire,non? (du moins,supprimer les petites étoiles)

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par b_reda31 Voir le message
    Qu'a donné l'application du filtre de débruitage sur cette image? ça devrais faire l'affaire,non? (du moins,supprimer les petites étoiles)
    Je suis désolé, je débute et je ne vois pas trop quel filtre tu veux parler ?

  12. #12
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut
    Citation Envoyé par KenT2004 Voir le message
    Je suis désolé, je débute et je ne vois pas trop quel filtre tu veux parler ?
    Ben je parle du filtre que vous avez utilisé pour la seconde image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    img =imread('CAMERAMAN_BRUIT.tif');
    imshow(img);
    h=ones(3,3);
    h=h/9;
    imgfilt = imfilter(img,h);
    figure, imshow(imgfilt);
    C'est la matrice "h" qui définit le filtre."h" peut être un masque moyannant (c'est ce que vous avez fait) ou bien un masque de Gauss, ce qui permet aussi de réduire le bruit.Se sont tous des filtres linéaires du faite que le résultat est une convolution de l'image originale avec le masque.Comme vous avez pu le constater ces filtres génère du flou dans l'image (contour en dégradé).

    Sinon y a aussi les filtres non linéaire. Par exemple le filtre "Median",qui permet de réduire le bruit,sans trop flouter l'image. ( => Matlab median filter)

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Ah oui d'accord :-) je vois très bien.

    J'ai essayé mais ca ne change rien, les petite étoiles sont toujours là.

  14. #14
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut
    Citation Envoyé par KenT2004 Voir le message
    Ah oui d'accord :-) je vois très bien.

    J'ai essayé mais ca ne change rien, les petite étoiles sont toujours là.
    J'ai fait une capture de votre image :


    Voici ce que j'ai obtenu avec ImageJ :
    -Filtre Moyennant :



    -Filtre de Gauss :




    -Filtre Median :


    C'est déjà mieux.Vous pouvez appliquer les filtres plusieurs fois de suites ou bien augmenter la taille du masque H (5*5, 7*7,...etc)

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 95
    Points : 62
    Points
    62
    Par défaut
    As-tu essayé en effectuant des ouvertures et fermetures morphologiques à niveau de gris !!!

    en prenant un élément structurant circulaire dont le rayon est supérieur à la taille des étoiles que tu souhaites éliminer...

    A partir de là, tu obtiens une image que tu peux seuiller afin de ne conserver que les centres des images très brillantes et effectuer un reconstruction par marqueurs.

    C'est à peu près l'idée que je propose. Maintenant, à toi de consulter l'aide de Matlab, ces fonctions sont assez basiques, et fortement documéntées.

    Bon courage et bonne année à tous

  16. #16
    Candidat au Club
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Points : 4
    Points
    4
    Par défaut détection d'une cercle
    bonjour: )

    SVP pouvez vous m'aidez?

    Mon problème est de détecter une forme géométriques dans une image.
    J'ai pu détecter toutes les formes présents dans l'image, mais une forme bien déterminer comme par exemple une cercle, j'ai essayé mais malheureusement j'ai pas pu résoudre le problèle.

    SVP c'est urgent j'ai passé deux semaines sans avoir la bonne solution

    merci

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/02/2013, 17h18
  2. [Débutant] détecter des points particuliers sur une image en couleur
    Par neophyte66 dans le forum Images
    Réponses: 1
    Dernier message: 04/10/2012, 15h44
  3. Réponses: 0
    Dernier message: 24/09/2009, 14h41
  4. Réponses: 3
    Dernier message: 31/10/2005, 16h47
  5. Enlever le boutton impression sur une image !
    Par Gab-Gab dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/11/2004, 23h30

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