Précédent   Forum du club des développeurs et IT Pro > Autres langages > Algorithmes > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 17/01/2009, 15h09   #21
bilzzbenzbilz
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 127
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 127
Points : 39
Points : 39
bonjour, j'ai testé le code HarrisFast, j'ai pas compris, au debut il affiche
56 potential corners found


corner found at: 42,2 (407)
corner found at: 33,7 (408)
corner found at: 18,15 (394)
corner found at: 43,16 (344)
........

puis il affiche 14 corners found.

j'ai bien bien compris la difference.
bilzzbenzbilz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2009, 15h26   #22
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 461
Points : 16 461
La détection se déroule en 3 étapes:

1. Calcul de la mesure de Harris pour chaque pixel de l'image.
2. Extraction des points qui ont une mesure supérieure au seuil ET qui sont des maximums locaux.
3. Suppression des point qui sont trop proches les uns des autres: on garde le point qui a la plus grande mesure de Harris.

Le message "xx potential corners found" est le nombre de points à la fin de l'étape 2.
Le message "xx corners found" est le nombre de points à la fin de l'étape 3.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2009, 23h24   #23
bilzzbenzbilz
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 127
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 127
Points : 39
Points : 39
bonjour pseudocode, j'ai lu le document filtre usuels en traitement d'image, maintenant j'éssaie de comprendre votre algorithme HARRIS-FAST étape par étape, j'ai pas bien compris la partie :

/**
* Gaussian function
*/
private double gaussian(double x, double y, double sigma2) {
double t = (x*x+y*y)/(2*sigma2);
double u = 1.0/(2*Math.PI*sigma2);
double e = u*Math.exp( -t );
return e;

pourquoi vous avez utilisé
double u = 1.0/(2*Math.PI*sigma2);
et pourquoi vous l'avez multiplié par Math.exp(-t);

Parceque dans le tut il n'existe pas cette formule . merci.
bilzzbenzbilz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2009, 00h08   #24
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 461
Points : 16 461
Citation:
Envoyé par bilzzbenzbilz Voir le message
pourquoi vous avez utilisé
double u = 1.0/(2*Math.PI*sigma2);
et pourquoi vous l'avez multiplié par Math.exp(-t);
C'est la formule d'une fonction gaussienne centrée et normalisée.



Dans le cas 2D, on à P(x,y) = P(x)*P(y). Si tu fais le calcul tu devrais trouver la formule que j'utilise dans le code.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2009, 15h32   #25
bipame
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 12
Points : 11
Points : 11
Envoyer un message via Yahoo à bipame
Par défaut bipame

Bonjour,
mon but c'est de détecter les points saillants et les pixels coin, ce qui veut dire que je vais avoir besoin du détecteur Harris.
serait-il possible de m'envoyer le code en Matlab
Merci d'avance
bipame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2009, 16h59   #26
bilzzbenzbilz
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 127
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 127
Points : 39
Points : 39
dans votre cours sur les filtres vous avez dit dans la page 30 (detecteur de HARRIS)

Ix et Iy représentent les dérivées de l'intensité suivant x et suivant y. On peut calculer ces valeurs en utilisant,par exemple, les filtres de Sobel horizontaux (pour Ix) et verticaux (pour Iy) sur chaque pixel du voisinage.....

Pourquoi vous avez utilisé la fonction guassienne dans votre algorithme HARRIS-FAST, quelle est son rôle, je n'ai trouvé aucune information dans votre tut (filtre usuels) et comment vous justifier .

Quelle est la difference entre la fonction gaussienne
f=exp( -t ) avec t = (x*x+y*y)/(2*sigma2)
et le flou gaussien f=1.0/(2*PI*sigma2)*exp( -t ) avec t = (x*x+y*y)/(2*sigma2)
bilzzbenzbilz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2009, 17h37   #27
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 461
Points : 16 461
Citation:
Envoyé par bilzzbenzbilz Voir le message
dans votre cours sur les filtres vous avez dit dans la page 30 (detecteur de HARRIS)

Ix et Iy représentent les dérivées de l'intensité suivant x et suivant y. On peut calculer ces valeurs en utilisant,par exemple, les filtres de Sobel horizontaux (pour Ix) et verticaux (pour Iy) sur chaque pixel du voisinage.....

Pourquoi vous avez utilisé la fonction guassienne dans votre algorithme HARRIS-FAST, quelle est son rôle, je n'ai trouvé aucune information dans votre tut (filtre usuels) et comment vous justifier .
Si vous lisez bien la description du filtre, j'ai marqué:

Citation:

...

Une amélioration consiste à remplacer la moyenne arithmétique par une moyenne pondérée (par exemple avec une gaussienne).
Chacun des 4 coefficient de la matrice est fabriqué a partir d'une MOYENNE SUR LE VOISINAGE des intensités Ix, Iy.

Cette moyenne peut être une simple moyenne arithmétique:

Code :
1
2
3
Moyenne(Elements) = Somme { Element(k) } / Nombre total d'élements
                      k
Les résultats obtenus sont meilleurs si on prend une moyenne pondérée par des poids "wk", en particulier si les poids suivent une fonction gaussienne 2D:

Code :
1
2
3
Moyenne(Elements) = Somme { wk * Element(k) } / Somme { wk }
                      k
avec wk = gaussienne2D( dx , dy )
et dx,dy = les offsets entre le pixel "k" du voisinage et le pixel considéré (= le centre du voisinage)
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2009, 20h45   #28
bilzzbenzbilz
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 127
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 127
Points : 39
Points : 39
Par défaut bonjour bipame

bonjour bipame , essaie ce code :
Code matlab :
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
close all
clear all
clc

I=imread('cameraman.tif');
figure;imshow(I);title ('fig1');
thetax=[1/2,1/4,1/2];thetay=[1/2 1/4 1/2].';
dx=[1/4 1/2 1/4];dy=[1/4 1/2 1/4].';
n=3;

Imgs = [];
I= double(I)/256;

for i=1:n
    I =conv2(I,thetax,'same');
    I =conv2(I,thetay,'same');

    Imgs{i} = I; % un tableau de cellules:
end;
figure;imshow(I);title ('fig2');
I1=conv2(I,dx,'same');
w1=immultiply(I1,sqrt(n));
figure;imshow(w1);title ('fig3');


I2=conv2(I,dy,'same');
w2=immultiply(I2,sqrt(n));
figure;imshow(w2);title ('fig4');
%calcule de la norme de gradient  l'image :
I3=immultiply(w1,w1);
I4=immultiply(w2,w2);
I5=imadd(I3,I4);
mf=sqrt(I5);
figure;imshow(mf);title ('fig5');
% calcule de la direction de gradient de l'image:
I6=imdivide(w2,w1);
af=atan(I6);
figure;imshow(af);title ('fig6');
af2= (af*180)/pi;
imagesc(af2);title ('fig7');
%calcul des maxima locaux:
im=ones(256,256)*0;
for i=2:254
    for j=2:254
        angle = af(i,j)*180/pi;
        point = mf(i,j);
        
        if (angle>=180)
            angle =180;
        elseif(angle<0)
            angle=180;
        end
        
        %angle
        
        if ((0<=angle)&(angle<22.5))
            grada=mf(i,j+1);
            gradb=mf(i,j-1);
        elseif (22.5<=angle)& (angle<67.5)
            grada=mf(i-1,j+1);
            gradb=mf(i+1,j-1);
        elseif (67.5<=angle)& (angle<112.5)
            grada=mf(i-1,j);
            gradb=mf(i+1,j);
        elseif (112.5<=angle)& (angle<157.5)
            grada=mf(i-1,j-1);
            gradb=mf(i+1,j+1) ;
        elseif (157.5<=angle)& (angle<180)
            grada=mf(i,j-1);
            gradb=mf(i,j+1);
        end

        if (point > grada ) & (point > gradb)
            im(i,j)=255;
        else
            im(i,j)=0;
        end

    end
end

figure;imshow(im);title('fig8')
Si tu trouve un probleme, tu peux contacter mr_samurai sur :

http://www.developpez.net/forums/pri...newpm&u=204074
bilzzbenzbilz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2009, 23h22   #29
bilzzbenzbilz
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 127
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 127
Points : 39
Points : 39
bonsoir pseudocode, j'ai cherché à comprendre exactement c'est quoi le mot maxima local ( pourquoi ils disent toujour le mot local ), j'ai pas trouvé la réponse dans google ,... , un grand merci .
bilzzbenzbilz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2009, 23h31   #30
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 461
Points : 16 461
Citation:
Envoyé par bilzzbenzbilz Voir le message
bonsoir pseudocode, j'ai cherché à comprendre exactement c'est quoi le mot maxima local ( pourquoi ils disent toujour le mot local ), j'ai pas trouvé la réponse dans google ,... , un grand merci .
Pas besoin de Google, un dictionnaire suffit:

Citation:
Local (adjectif masculin) : qui est limité à un lieu déterminé, nettement circonscrit.
En image, quand on fait du traitement "local" c'est qu'on travaille uniquement sur un petit voisinage autour d'un pixel.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2009, 23h38   #31
bilzzbenzbilz
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 127
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 127
Points : 39
Points : 39
ééééé oui , vous ête un bon observateur, j'ai compris, la réponse existe sur le fichier des filtres usuels ( filtrage global , filtrage " LOCAL " )
bilzzbenzbilz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2009, 00h48   #32
bilzzbenzbilz
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 127
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 127
Points : 39
Points : 39
Je veux comprendre une chose dans le filtre de gauss .

Si J'ai une image f et je vais appliquer le filtre de gauss G[i][j], donc on va utiliser la formule :

G[i][j] = (1/(2Pi* σ^2)) * exp(-(i^2 +j^2)/(2*(σ^2))
ou bien :
G[i][j] = exp(-(i^2 +j^2)/(2*(σ^2))

Aussi , je veux savoir pour une matrice 3*3 :
les i et les j appartiennent 'ils à {-1,0,+1} ou de {0,1,2} ????
bilzzbenzbilz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2009, 10h17   #33
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 461
Points : 16 461
Citation:
Si J'ai une image f et je vais appliquer le filtre de gauss G[i][j], donc on va utiliser la formule :

G[i][j] = (1/(2Pi* σ^2)) * exp(-(i^2 +j^2)/(2*(σ^2))
ou bien :
G[i][j] = exp(-(i^2 +j^2)/(2*(σ^2))
Il faudra de toutes façons normaliser la matrice du filtre, c'est à dire la multiplier par une constante afin que la somme des coefficients soit 1.

Hors les 2 formules précédentes sont les mêmes a une constante multiplicative près. Donc au final, on obtiendra la même matrice du filtre. Tout ce qui changera c'est la valeur de la "constante de normalisation" qui sera utilisée.

Citation:
Aussi , je veux savoir pour une matrice 3*3 :
les i et les j appartiennent 'ils à {-1,0,+1} ou de {0,1,2} ????
Les voisinages sont généralement centré sur le pixel à traiter, donc i={-1,0,+1} pour un voisinage de taille 3.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2009, 17h07   #34
bilzzbenzbilz
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 127
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 127
Points : 39
Points : 39
bonjour pseudocode, je suis entrain d'analyser votre algorithme ( bloc par bloc ) mais j'ai pas trouvé une correspondance avec votre document ( filtres usuels en traitement d'image)

j'ai compris la partie :

Gaussian function
Sobel gradient 3x3

mais la patie : Convolve gradient with gaussian filter: j'ai pas bien compris
Si vous avez détaillé votre algorithme quelque part, svp donnez moi un lien ou un doc plus détaillé, j'ai bien cherché, mais j'ai pas trouvé grande chose

http://www.developpez.net/forums/d32...e-convolution/

merci .
bilzzbenzbilz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2009, 17h57   #35
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 461
Points : 16 461
Citation:
Envoyé par bilzzbenzbilz Voir le message
bonjour pseudocode, je suis entrain d'analyser votre algorithme ( bloc par bloc ) mais j'ai pas trouvé une correspondance avec votre document ( filtres usuels en traitement d'image)
C'est normal. Il n'y a pas de rapport direct entre ces 2 contributions.


Citation:
j'ai compris la partie :
Gaussian function
Sobel gradient 3x3
C'est deja bien.

Citation:
mais la patie : Convolve gradient with gaussian filter: j'ai pas bien compris
Et bien, il n'y a pas grand chose a comprendre : c'est un produit de convolution entre 2 fonctions. C'est une manière mathématique d'écrire cette fameuse "moyenne pondérée" dont je parlais précédemment.

Comme c'est dit dans l'article sur les filtres, cela revient à multiplier terme à terme les éléments de chaque matrice, puis faire leur somme. C'est ce que fait le code Java.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2009, 18h46   #36
bilzzbenzbilz
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 127
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 127
Points : 39
Points : 39
vous avez écrit :

// Convolve gradient with gaussian filter:
//
// Ix2 = (F) * (Gx^2)
// .........
donc Lx2[0][0]=f*grad[0][0][0]*grad[0][0][0];

mais pouquoi vous avez écrit :

Lx2[x][y]+=f*grad[xk][yk][0]*grad[xk][yk][0]; c'est à dire une somme
bilzzbenzbilz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2009, 19h48   #37
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 461
Points : 16 461
Citation:
Envoyé par bilzzbenzbilz Voir le message
Lx2[x][y]+=f*grad[xk][yk][0]*grad[xk][yk][0]; c'est à dire une somme
Je pense qu'il te manque les bases produit de convolution.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2009, 21h23   #38
bilzzbenzbilz
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 127
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 127
Points : 39
Points : 39
merci pseudo j'ai compris.
bilzzbenzbilz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2009, 00h23   #39
bilzzbenzbilz
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 127
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 127
Points : 39
Points : 39
un nouveau probleme :

// compute the harris measure
double h = harrisMeasure(x,y);
if (h<=0) continue;
// log scale

pourquoi vous avez testé si h<=0, est ce qu'on peut avoir une valeur négative?

pourquoi vous avez utilisé la formule suivante :

h = 255 * Math.log(1+h) / Math.log(1+255);
bilzzbenzbilz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2009, 09h44   #40
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 461
Points : 16 461
Citation:
Envoyé par bilzzbenzbilz Voir le message
pourquoi vous avez testé si h<=0, est ce qu'on peut avoir une valeur négative?
Oui, dans le cas ou la forme du gradient est une courbe en S

Citation:
pourquoi vous avez utilisé la formule suivante :
h = 255 * Math.log(1+h) / Math.log(1+255);
Parce que l'oeil humain aime bien les échelles logarithmiques.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


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


 
 
 
 
Partenaires

Hébergement Web