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 un bord genant sur une image RGB


Sujet :

Images

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 25
    Points : 12
    Points
    12
    Par défaut Enlever un bord genant sur une image RGB
    Bonjour,

    Je suis en train de traiter une image.

    Avant d'aller plus loin, je souhaiterais enlever quelques pixels gênant sur les bords (qui ne m'interesse pas pour la suite).

    L'image est en couleur.

    J'ai essaye plusieurs choses mais j'arrive a des résultats bizarres. Je suis débutant en analyse d'images...

    Il y a plusieurs choses que je ne comprends pas. Quand je binarise pour éroder l'image rouge, je binarise mais après il m'est impossible de retrouver l'image initiale en teinte de gris. Puis, comment dois-je faire pour reconstruire l'image RGB ?

    Voila le code que j'ai fait et l'image (dans le ZIP car elle est en format .tif).

    Merci pour votre attention.

    Thomas



    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
     
    % Importer une image : file puis import data.
     
    % Visualisation de l'image.
     
    figure; imshow(ech2); title('Image de départ'),
     
    % Définition de l'élément structurant (SE).
     
    SE=strel('square',3);
     
    % L'élément structurant est donc un carré de coté égal à 3.
     
    % Séparation de l'image RGB en ses trois composantes R, G et B.
     
    R=ech2(:,:,1);
    G=ech2(:,:,2);
    B=ech2(:,:,3);
     
    % Visualisation des trois composantes séparément.
     
    figure; imshow(R); title('Composante rouge');
    figure; imshow(G); title('Composante verte');
    figure; imshow(B); title('Composante bleue');
     
    % La composante rouge est la 'moins' utilisée car elle est assez sombre, on
    % peut en conclure que c'est sur cette image que l'on va seuiller et
    % éroder.
     
    % Création d'une image binaire à partir de l'image de la composante rouge
    % en teintes de gris.
     
    level=graythresh(R);
    bwr=im2bw(R,level);
    figure; imshow(bwr); title('Composante rouge binarisée');
     
    % Inverser les couleurs de l'image binaire.
     
    wbr=~bwr
    figure; imshow(wbr); title('Inversion de la composante rouge binarisée');
     
    % Le seuillage est calculé automatiquement par la fonction graythresh.
     
    % Erosion de l'image binaire.
     
    eror=imerode(wbr,SE);
    figure; imshow(eror); title('Erosion de la composante rouge binarisée');
     
    % Inverser les couleurs de l'image binaire.
     
    erorinv=~eror;
    figure; imshow(erorinv); title('Inversion de l"érosion de la composante rouge binarisée');
     
    % Reconstruction géodésique. Le marqueur est l'image seuillée et érodée
    % (dans ce cas : erorinv) et le masque est l'image seuillée (dans ce cas :
    % bwr).
     
    reconr=imreconstruct(bwr,erorinv);
    figure; imshow(reconr); title('Reconstruction géodésique');

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,
    Citation Envoyé par ThomB. Voir le message
    Il y a plusieurs choses que je ne comprends pas. Quand je binarise pour éroder l'image rouge, je binarise mais après il m'est impossible de retrouver l'image initiale en teinte de gris. Puis, comment dois-je faire pour reconstruire l'image RGB ?
    La binarisation permet d'attribuer des valeurs logiques à tes pixels : 1 si le pixel appartient à l'une de tes zones d'intérêt, 0 sinon. Tu crées ainsi un masque qui de permet de traiter uniquement les zones d'intérêt de ton image. Quand tu fais une érosion sur ce masque, tu vas réduire la zone que tu étudies, il te reste alors à appliquer ce masque à ton image de départ pour appliquer l'érosion à ton image.

    Voici ce que je ferais :

    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
    ech2 = imread('echantillon 2 face A selection.tif');
    
    %Ici j'inverse l'image pour travailler directement sur les pixels les plus clairs (tu pourras la ré-inverser tout à la fin). Essaie de comprendre pourquoi j'utilise double et uint8 (il existe peut-être aussi une méthode plus direct).
    ech2 = uint8(-(double(ech2)-254));
    
    % Importer une image : file puis import data.
    
    % Visualisation de l'image.
    
    figure; imshow(ech2); title('Image de départ'),
    
    % Définition de l'élément structurant (SE).
    
    SE=strel('square',3);
    
    % L'élément structurant est donc un carré de coté égal à 3.
    
    % Séparation de l'image RGB en ses trois composantes R, G et B.
    
    R=ech2(:,:,1);
    G=ech2(:,:,2);
    B=ech2(:,:,3);
    
    % Visualisation des trois composantes séparément.
    
    figure; imshow(R); title('Composante rouge');
    figure; imshow(G); title('Composante verte');
    figure; imshow(B); title('Composante bleue');
    
    % La composante rouge est la 'moins' utilisée car elle est assez sombre, on
    % peut en conclure que c'est sur cette image que l'on va seuiller et
    % éroder.
    
    % Création d'une image binaire à partir de l'image de la composante rouge
    % en teintes de gris.
    
    level=graythresh(R);
    bwr=im2bw(R,level);
    figure; imshow(bwr); title('Composante rouge binarisée');
    
    % Erosion de l'image binaire.
    
    eror=imerode(bwr,SE);
    figure; imshow(eror); title('Erosion de la composante rouge binarisée');
    
    
    %Enfin on applique le masque obtenue après érosion à l'image rouge. Essaie de bien comprendre ce que fait l'opérateur .*
    Imageerode = uint8(eror).*R;
    figure,imshow(Imageerode)
    
    %Ensuite pour reconstruire une image rgb, il te suffit de recréer un tableau avec les 3 composantes (j'ai appliqué le masque directement sur les 2 autres composantes :
    ech2modif(:,:,1) = Imageerode;
    ech2modif(:,:,2) = uint8(eror).*G;
    ech2modif(:,:,3) = uint8(eror).*B;
    Et il te reste à ré-inverser l'image.

  3. #3
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Je te donne 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
     
    % Initialisation
        close all ;
        clear all ;
        clc ;
    % Lecture de l'image
        [im map] = imread('peppers.png') ;
     
    % Extraction des bandes Rouge Vert et Bleu    
        imR = im(:,:,1) ; % Rouge 
        imV = im(:,:,2) ; % Vert
        imB = im(:,:,3) ; % Bleu
     
    % Binarisantion
        % Image Rouge
        binR = im2bw(imR, graythresh(imR));
     
        % Image Vert
        binV = im2bw(imV, graythresh(imV));
     
        % Image Vert
        binB = im2bw(imB, graythresh(imB));

  4. #4
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Ensuite pour inverser les niveaux de gris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    % Invertion des niveaux
        % Image Rouge
        binR = imcomplement(binR) ; 
     
        % Image Vert
        binV = imcomplement(binV) ; 
     
        % Image Vert
        binB = imcomplement(binB) ;

  5. #5
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    % Ilimination des bords
        % Rouge : le bord à 10 pixels
        binR(1:10, 1:end) = 0 ; binR(end-10:end, 1:end) = 0 ; binR(1:end, 1:10) = 0 ; binR(1:end, end-10:end) = 0 ;
     
        % Vert : le bord à 10 pixels
        binV(1:10, 1:end) = 0 ; binV(end-10:end, 1:end) = 0 ; binV(1:end, 1:10) = 0 ; binV(1:end, end-10:end) = 0 ;
     
        % Bleu : le bord à 10 pixels
        binB(1:10, 1:end) = 0 ; binB(end-10:end, 1:end) = 0 ; binB(1:end, 1:10) = 0 ; binB(1:end, end-10:end) = 0 ;

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Merci pour vos réponses!!

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

Discussions similaires

  1. [XL-2007] Appliquer un style bords arrondis sur une image
    Par nanousik dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/03/2014, 10h45
  2. Enlever des objets sur une image
    Par code_source dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 12/01/2011, 14h26
  3. Réponses: 7
    Dernier message: 27/03/2010, 20h51
  4. Réponses: 6
    Dernier message: 15/11/2007, 12h31
  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