Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > MATLAB > Images
Images Forum d'entraide sur le traitement d'images en MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/05/2012, 15h26   #1
eviasra
Candidat au titre de Membre du Club
 
Femme
Inscription : février 2009
Messages : 118
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : février 2009
Messages : 118
Points : 12
Points : 12
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 :
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;
eviasra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2012, 15h39   #2
Winjerome
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 5 167
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 25
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : septembre 2009
Messages : 5 167
Points : 12 617
Points : 12 617
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 ?
__________________
Débutant en MATLAB ? Vous voulez faire une Interface Graphique ? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur ? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2012, 15h42   #3
eviasra
Candidat au titre de Membre du Club
 
Femme
Inscription : février 2009
Messages : 118
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : février 2009
Messages : 118
Points : 12
Points : 12
merci Winjerome pour ta réponse

je me suis trompée de code voila
Code :
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?
eviasra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2012, 09h28   #4
Kangourou
Membre expérimenté
 
Avatar de Kangourou
 
Inscription : mars 2003
Messages : 441
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2003
Messages : 441
Points : 552
Points : 552
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+
Kangourou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2012, 11h30   #5
eviasra
Candidat au titre de Membre du Club
 
Femme
Inscription : février 2009
Messages : 118
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : février 2009
Messages : 118
Points : 12
Points : 12
c'est bon , c'été juste une question de lecture je me suis trompée
merci pour vos réponses
eviasra est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h03.


 
 
 
 
Partenaires

Hébergement Web