Je viens de trouver ce lien là qui explique bien les détails d'implémentation :
http://www.vlfeat.org/api/sift.htmll
![]()
Je viens de trouver ce lien là qui explique bien les détails d'implémentation :
http://www.vlfeat.org/api/sift.htmll
![]()
Bonjour,
c'est encore moi
ok j'ai compris la construction de l'histogramme juste un point flou, où intervient cette phrase dans qu'elle etape
"A Gaussian weighting function with σ equal to one half the width of the descriptor window is used to assign a weight to the magnitude of each sample point."
j'ai cru au debut que c'etait en relation avec la construction de l'histogramme du descripteur pour ponderer la magnitude. d'où la gaussienne hors c'est pas le cas d'après votre reponse.
Merci
j'ai encore relu le doc de Low.
je ne sais pas si c'est juste ou pas.
pour la construction du descripteur tout d'abord nous avons :
1- la valeur du gradient en chaque point du voisinage du keypoint (la sous région 4*4) c a d magnitude et orientation (déja calculé à l'etape orientation assignement m et theta).
2- on assigne une pondération à la magnitude soit m1 cette nouvelle valeur donc
m1=gaussi(m,8) avec 8=sigma
3-hist(theta)=hist(theta)+(1-d)*m1
est ce que les etapes sont correctes ?
Merci
Hum... je formulerais plutot ca comme cela
1. le pixel de coordonnées (i,j) à pour valeur de gradient (theta, norm)
avec [-8,-8] <= i,j <= [+8,+8]
et theta orienté par rapport a la direction principale la zone
2. On assigne une valeur pondérée de la magnitude du gradient aux histogrammes des carrés voisins. Cette valeur vaut
v = norm * W_win(i,j) * W_carre(i,j)
W_win(i,j) = gauss2D(i,j,8), la ponderation d'atténuation globale à la zone
W_carré(i,j) = max(0,1-dx) * max(0,1-dy) avec dx,dy = distance normalisée au centre du carré considéré. C'est à dire dx=abs(i-ci)/8 et dy=abs(j-cj)/8, avec ci,cj le centre du carré.
3. Comme les histogrammes n'ont que 8 bins, on repartit la valeur de 'v' entre les 2 bins les plus proches : t0 <= theta <= t1
hist[t0] += v * (t1-theta)/(t1-t0)
hist[t1] += v * (theta-t0)/(t1-t0)
Bonjour à tous,
je suis pleinement débutant en matière de programmation, j'avoue alors que je comprend vraiment pas grand chose à cette discussion !
Je compte utiliser SIFT sous Matlab. SIFT permet de trouver des points communs entre deux photos, mais est-il possible d'adapter le code pour trouver les points communs entre trois photos ? Si oui je pense que cela est loin d'être évident, donc est-ce que quelqu'un s'est déjà pencher sur cette problématique ?
Merci d'avance.
Je dirais qu'il suffirait d'appliquer l'algo sur chacun des 3 duplets d'image (1 2), (1 3), (2 3)...
Ensuite comparer les points trouvés lors du traitement (1 2) et (1 3) avec ceux trouvés lors du traitement (2 3)...?
Vu le nombre de points et surtout les 3 traitements, ça risque d'être assez lourd, il existe certainement de meilleures solutions...![]()
Bonjour,
je désire coder SIFT en C.
en faite j'aimerai savoir combien est la taille du masque gaussien.
je précise :
par exemple si on considère le cas d'une gaussienne d'échelle 2sigma il faut considérer un masque gaussien de taille 4sigma*4sigma que nous allons convoluer après avec l'image source.
Merci
Bonsoir à tout le monde.
Est-ce quelqu'un peut m'expliquer comment peut-on effectuer une interpolation sur sigma?
En effet, pour la discrétisation de la dérivée, on utilise la formule suivante:
dD(x)/dx = ( D(x+1) -D(x-1) )/2 .
Est-ce qu'on considère les DOG de scale sigma-1 et sigma+1, ou bien les DOG précédente et suivante utilisées pour le calcul des minimas et des maximas?
Merci de me répondre.
Ma question porte sur la phase d'interpolation des keypoints pour trouver les coordonnées réels en x, y et sigma de l'extrémum.
Mon problème réside dans le calcul de la dérivée de D par rapport à sigma.
Est ce que c'est égal à (D(sigma+1)-D(sigma-1))/2
ou bien (D(sigma2)-D(sigma1))/2
avec sigma1 est le scale de la DOG précédente et sigma2 est le scale de la DOG suivante à la DOG d'étude.
Merci beaucoup de m'avoir répondu.
Cependant je demande, s'il vous plait, quelques clarifications sur certains points:
1- lorsqu'on cherche des minimas est des maximas pour une image DOG (en la comparant avec l'image DOG précédente et suivante), ils peuvent ne pas être ni minima ni maxima pour une autre image DOG?
2- pour le calcul de la magnitude et l'orientation du gradient au niveau du keypoint, est-ce que le sigma du L(sigma) utilisé est égal au sigma de l'image DOG de laquelle nous avons extrait le keypoint, ou bien égal à sigma+delta_sigma qui correspond au scale réel du keypoint. Si c'est la 2ème réponse, doit-on donc construire un L(sigma+delta_sigma) pour chaque keypoint?
3- est-ce que le thêta_max trouvé est égale à une valeur ou un intervalle de 10°?
Merci d'avance.
Si. C'est le cas pour les formes qui sont invariantes à l'echelle. Par exemple le coin d'un carré. On a alors des points d'intérets au meme endroit mais avec des echelles différentes.
D'après le papier de Lowe, on utilise L(sigma).2- pour le calcul de la magnitude et l'orientation du gradient au niveau du keypoint, est-ce que le sigma du L(sigma) utilisé est égal au sigma de l'image DOG de laquelle nous avons extrait le keypoint, ou bien égal à sigma+delta_sigma qui correspond au scale réel du keypoint. Si c'est la 2ème réponse, doit-on donc construire un L(sigma+delta_sigma) pour chaque keypoint?
La valeur "sigma+delta_sigma" n'est utilisée que pour décrire le keypoint, par exemple dans la phase de matching.
Si tu parles de l'orientation du keypoint, c'est une valeur. Elle est calculée en cherchant le sommet de la parabole passant par les 3 bins voisins dans l'histogramme.3- est-ce que le thêta_max trouvé est égale à une valeur ou un intervalle de 10°?
Bonsoir à tout le monde.
J'ai 3 questions à propos du SIFT:
1- est-ce qu'il faut dupliquer la taille de l'image initiale avant de lui appliquer la convolution avec la gaussienne (pour la première octave)?
2- après la recherche des minimas et maximas dans une image DOG de la deuxième octave, est-ce qu'il faut dupliquer la taille de cette image pour interpoler la position du keypoint?
3- pour le problème de bord dans les images, affronté lors du balayage du voisinage d'un pixel, est-ce qu'on ajoute des lignes et des colonnes à l'image par effet miroir?
Merci de me répondre.
C'est préconisé par Lowe si je me souviens bien. Mais ce n'est pas obligatoire. Ca permet juste de trouver des keypoints a des echelles plus petites que la taille originale de l'image, ce qui pourra etre utile dans la phase de matching.
heu... non. L'interpolation se fait avec les images de l'octave, quelles que soient leurs "tailles".2- après la recherche des minimas et maximas dans une image DOG de la deuxième octave, est-ce qu'il faut dupliquer la taille de cette image pour interpoler la position du keypoint?
C'est plus simple de ne pas se préoccuper des pixels sur les bords. De toutes facons, ca sera difficile de savoir si un point sur un bord est un extrema, sans connaitre les pixels voisins.3- pour le problème de bord dans les images, affronté lors du balayage du voisinage d'un pixel, est-ce qu'on ajoute des lignes et des colonnes à l'image par effet miroir?
Bonjour tous le monde,
Je voudrais savoir quels sont les types d 'algorithmes de détection de point d 'intérêt qui sont aussi performant que l' algorythmes SIFT, y 'en a t-il qui sont plus précis ou qui utilise une différentes méthode
Je vous remercie d 'avance.
bonjour, je veux seulement détecteur les point d 'intérêt d 'une image, je pense que je n 'ai donc pas besoin de calculer le gradient ?? je souhaite avoir une confirmation, svp.
Edit : j 'ai oublié de préciser que c'est avec l 'algorithm de SIFT.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager