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 :

Contour image par Fourier


Sujet :

Images

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut Contour image par Fourier
    bonjour voila mon code pour détecter les contours d'une image par le descripteur de Fourier, sauf que le résultat j'ai une image tout en blanc, quelqu'un peut m’éclaircir cela?

    voici mon code
    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
    image=imread('c:\boum.jpg');
    F = fft2(image);
    mag = sqrt(real(F).^2 + imag(F).^2);
    phase = atan(imag(F)./real(F));
     
    re = sqrt((mag.^2)./(1 + tan(phase).^2));
    im = re.*tan(phase);
    F = re + i*im;
    f = ifft2(F);
     
    subplot(1,2,1);
    imshow(image);
    Title('Original Image');
     
    subplot(1,2,2);
    imshow(f);
    Title('Image after forward and backward FFT');
    y = f;

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    image est déjà le nom d'une fonction MATLAB, chose à éviter. Je t'invite à consulter ceci.

    La sortie de la fonction ifft2 et complexe je te rappelle.

    Pour l'affichage, voir Pourquoi imshow affiche une image toute blanche et/ou noire ?

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut
    merci Winjerome pour ta réponse

    je me suis trompée de code voila
    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
    %function fd = fourierdesc(img)
    oimg=('c:\boum.jpg');
    n=size(img)
    b=I;
    % edge detection robert gradien
    a=double(I);
    for x=2:n(1)-1
    for y=2:n(2)-1
    c=abs(a(x+1,y+1) - a(x,y))+ abs(a(x+1,y) - a(x,y+1)) ;
    b(x,y)=c;
    end
    end
    figure, imshow(b)
    Title('roberts cross gradien result');
     
    % count the fourier descriptor
     
    I=im2bw(b);
    cd=I
    [rows cols] = find(I~=0)
     
    % Find a starting point on the boundary
     
    nf=input('input the boundary points :');
    [rows cols] = find(I~=0);
    contour = bwtraceboundary(I, [rows(1), cols(1)], 'N');
     
    % complex number format (x + jy)
    sampleFactor = length(contour)/nf;
    dist = 1;
    for i=1:nf
    c(i) = contour(round(dist),2) + j*contour(round(dist),1);
    dist = dist + sampleFactor;
    end
    C = fft(c)
    Capprox = C;
    % Take inverse fft
    cifft = ifft(Capprox);
     
    % Show original boundary and approximated boundary
    figure
    imshow(imcomplement(bwperim(I)));
    title('image result');
    hold on, plot(cifft,'r');
    je sais qu'il fait la détection de contours par gradient de Robert mais est-ce qu'il le fait par Fourier?

  4. #4
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    salut,

    si la question c'est pour les images qui apparaissent blanches, il faut rajouter des crochets à imshow
    Ensuite j'ai l'impression qu'il y a 3 problèmes dans la question :
    1. Appliquer un filtre a l'image pour trouver les contours
    2. trouver des pixels voisins qui forment une chaîne (boucle)
    3. "lisser" le polygone formé par les pixels


    La détection des contours (point 1) se fait très bien par Roberts (ou Prewitt, ou Sobel...)
    Pour Fourier, il me semble que ça s'applique plus au troisième point non ?

    Où est le problème exactement ?

    a+

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut
    c'est bon , c'été juste une question de lecture je me suis trompée
    merci pour vos réponses

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/05/2011, 16h16
  2. la segmentation d'images par detection de contours
    Par angel_kiss dans le forum Simulink
    Réponses: 4
    Dernier message: 30/04/2009, 18h37
  3. faire apparaitre le contour d'une image par filtre SOBEL
    Par bilzzbenzbilz dans le forum Traitement d'images
    Réponses: 33
    Dernier message: 04/03/2009, 18h18
  4. Augmentation d'image par transformée de Fourier
    Par FST_PFE dans le forum OpenCV
    Réponses: 3
    Dernier message: 29/04/2008, 17h46
  5. Recalage d'image par la Transformée de Fourier (Prob de Dimension des images)
    Par Programmeur_Aladdin dans le forum Traitement d'images
    Réponses: 7
    Dernier message: 26/02/2008, 15h14

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