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 :

Automatiser le retrait d'une tache


Sujet :

Images

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 24
    Par défaut Automatiser le retrait d'une tache
    Bonjour,
    J'ai un petit soucis à régler. En effet, j'ai des images avec une tâche noire à l'intérieur et je souhaite l'enlever grâce à un script Matlab.
    Voici un exemple d'image: (pour rappel, la tache se trouve toujours dans le milieu et est toujours très grande)
    Merci

    http://www.hostingpics.net/viewer.ph...uaortique2.png

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Bonjour,

    As-tu commencer à coder quelquechose? Une idée de l'algorithme que tu souhaites utiliser?

    Duf

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 24
    Par défaut
    Oui.

    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
     
    % Traitement des images : bourgeonnements
     
    close all;
     
    im = 'anneau_aortique2.tif';
    i = imread(im);
    figure(1); imagesc(i); colormap(gray);
    title('Image originale');
    figure(2); hist(double(i(:)),128); title('Histogramme');
     
    % Filtrage médian pour réduire le bruit
    %i = medfilt2(i);
     
    %% Détection de l'artère
    seuil1=40;
    ia = ones(size(i,1),size(i,2),'uint16');
    ia(find(i>seuil1))=0;
    figure(3); imagesc(ia); colormap(gray);
    title('Détection des objets bruts par simple seuillage');
     
    % Lissage des frontières et remplissage des trous
    iac=bwmorph(ia,'fill');
    iac=bwmorph(ia,'erode',4);
    iac=bwmorph(iac,'dilate',4);
    title('Filtrage de la forme des objets');
     
    % Recherche des composants de l'image (objets)
    L = bwlabel(iac,8);
    rgb = label2rgb(L);
    figure(4); imagesc(rgb);
     
    % Contour de l'artère
    [gy,gx]=gradient(double(iac));
    ind=find(gx.^2+gy.^2>0);
    y=rem(ind,size(iac,1)); x=fix(ind/size(iac,1));
    figure(3); hold on; plot(x,y,'g.'); hold off
    %figure(1);
    %hold on; plot(x,y,'g.'); hold off
    %pause;
     
    % Suppression de l'artère et amélioration contraste
    seuil2=200;
    i2 = i; i2(find(iac==1))=seuil; i2(find(i2>seuil))=seuil;
     
    %% Il reste les étapes de binarisation (1->arrière plan, 0 -> bourgeons)
    %  par seuillage (là je pense qu'il faut d'abord filtrer), puis de
    %  squelettisations en utilisant la commande im2=bwmorph(im, 'skel', inf);
    Sinon, j'ai trouvé une fonction "REGIONPROPS " dont je ne sais pas me servir.

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Mmm... je dirai étiquetage des composantes connexes et suppression de la composante sombre la plus grande.
    Si ta tache n'a pas une couleur homogène, tu pourrais peut être tenter de réduire les niveaux de gris préalablement.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 24
    Par défaut
    J'ai essayé ceci sans résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    im = 'anneau_aortique2.tif';
    BW = imread(im);
    L = bwlabel(BW);
    [L, num] = bwlabel(BW);

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 24
    Par défaut
    Bon, j'ai réussi à faire le traitement sur l'intérieur de l'image. En effet, j'extrait l'intérieur de l'image, comme ça je suis sur que je ne traite que la tache noire. Toutefois , je ne sais pas pourquoi j'ai pas l'image claire sur la figure 6, là où je recolle l'intérieure.?

    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
     
    % Traitement des images : bourgeonnements
     
    close all;
     
    im = 'anneau_aortique2.tif';
    i = imread(im);
    figure(1); imagesc(i); colormap(gray);
    title('Image originale');
    figure(2); hist(double(i(:)),128); title('Histogramme');
     
    % Filtrage médian pour réduire le bruit
    %i = medfilt2(i);
     
    %% Détection de l'artère
    seuil1=40;
    ia = ones(size(i,1),size(i,2),'uint16');
    ia(find(i>seuil1))=0;
    figure(3); imagesc(ia); colormap(gray);
    title('Détection des objets bruts par simple seuillage');
     
    % Lissage des frontières et remplissage des trous
    iac=bwmorph(ia,'fill');
    iac=bwmorph(ia,'erode',4);
    iac=bwmorph(iac,'dilate',4);
    title('Filtrage de la forme des objets');
     
    % Recherche des composants de l'image (objets)
    L = bwlabel(iac,8);
    rgb = label2rgb(L);
    figure(4); imagesc(rgb);
     
    % Contour de l'artère
    [gy,gx]=gradient(double(iac));
    ind=find(gx.^2+gy.^2>0);
    y=rem(ind,size(iac,1)); x=fix(ind/size(iac,1));
    figure(3); hold on; plot(x,y,'g.'); hold off
    %figure(1);
    %hold on; plot(x,y,'g.'); hold off
    %pause;
    % Suppression de l'artère et amélioration contraste
    seuil2=200;
        %Appliquer les mesures seulement à l'intérieur de l'image
    iac2=iac(0.15*end:0.85*end,0.15*end:0.85*end); %iac2=centre de iac
    i2=i(0.15*end:0.85*end,0.15*end:0.85*end);
    A=find(iac2==1);
    B=find(i2>seuil2);
    %i2 = i;
     i2(A)=seuil2; i2(B)=seuil2;
    figure(5);imagesc(i2);colormap(gray);
    i(0.15*end:0.85*end,0.15*end:0.85*end)=i2;
    i3=i;
    whos
    i3(0.15*end:0.85*end,0.15*end:0.85*end)=i2;
    figure(6);imagesc(i3);colormap(gray);

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/03/2011, 18h06
  2. [MySQL] Automatiser une tache tous les jours
    Par Calvein dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/06/2009, 17h48
  3. automatisation d'une tache
    Par jj2000 dans le forum Apache
    Réponses: 1
    Dernier message: 19/06/2007, 17h05
  4. Automatiser une tache d'administration
    Par EvilAngel dans le forum Administration système
    Réponses: 9
    Dernier message: 19/03/2007, 07h43
  5. automatiser une tache ttes les X minutes (un script en vbs)
    Par Corben dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 01/03/2006, 23h58

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