2010-12-05 4 views
2

J'essayais de mettre en œuvre SIFT pour mon projet et j'ai les points clés. J'ai essayé de prendre la distance euclidienne de chaque point-clé d'une image avec tous les points-clés de la même image mais réduite. Il se trouve que la distance de 1 point-clé de l'image de requête avec le reste des points-clés dans l'image de la base de données a une sorte de valeurs très similaires. Comment puis-je sélectionner le plus proche voisin et comment puis-je être sûr que c'est le bon match.euclidean distance dans sift

La distance euclidienne a été calculée comme, pour i = 1 à 128 sqrt [(pi-qi)^2] pour p = 1 au nombre de points-clés dans la base de données.

une idée sur la façon de procéder sera très apprécié

Répondre

16

Je devine que vous essayez d'utiliser SIFT pour la recherche d'images puisque vous avez mentionné que vous avez une base de données d'images que vous comparez une image de requête. Vous devez réaliser que la comparaison de chaque vecteur descripteur SIFT dans une image de requête avec tous les autres vecteurs de descriptpor dans la base de données d'images n'est pas faisable car cela nécessitera un nombre exponentiel de comparaisons. L'approche populaire actuelle pour extraire des images à l'aide de descripteurs SIFT est le modèle de sac de mots emprunté à la récupération de documents. Tout d'abord, ce que vous voulez faire est donné une image, le représenter en utilisant un vecteur unique qui peut être comparé aux vecteurs des autres images dans la base de données. Ceci est différent de votre approche actuelle où chaque image a plusieurs vecteurs de descripteur SIFT (un pour chaque point clé). Dans le modèle de sac de mots (BOW), vous devez d'abord créer ce qu'on appelle un livre de codes visuel (ou parfois appelé dictionnaire). Pour ce faire:

  1. Sélection des images représentatives de votre base de données d'image
  2. Ramassez tous les descripteurs EIPD des images en 1)
  3. de cluster ces descripteurs à l'aide de moyens K en nombre k de grappes où k est un nombre que vous définissez. Le centre de ces groupes est le "mots visuels" , c'est-à-dire des caractéristiques représentatives dans votre base de données d'images .
  4. Pour chaque image dans la base de données, vous allez créer un vecteur v ce qui compte à quelle fréquence les différentes fonctions dans le dictionnaire se produit si chaque image serait représenté par un vecteur sous forme de: <# times feature 1 in dictionary occur, ... feature 2 in dictionary occur..., ..., ... feature k in dictionary occur>-à-dire, ak dimensions vecteur. Vous obtenez ce vecteur pour une image en:

    4.1. Extraction des descripteurs SIFT dans l'image

    4.2. Pour chaque descripteur SIFT dans l'image, trouvez le centre de cluster le plus proche (en utilisant la distance euclidienne) dans le dictionnaire/dictionnaire et augmentez le nombre correspondant dans le vecteur v par 1.

    Par exemple, vous avez un dictionnaire de 5 groupes (par ex. k = 5) et une image a trois descripteurs SIFT. 2 d'entre eux sont les plus proches du premier centre de cluster et 1 est le plus proche du cinquième centre de cluster. Votre vecteur v serait v = <2, 0, 0, 0, 1>. Puisque v compte le nombre de fois que les vecteurs représentatifs apparaissent dans une image, v est parfois aussi appelé histogramme de fréquence. A ce stade, vous pouvez vouloir normaliser l'histogramme en divisant chaque entrée par la somme de toutes les entrées afin que des images avec un nombre très différent de points-clés SIFT trouvés puissent être rendues comparables.Maintenant, pour comparer 2 images, vous comparez ce nouveau vecteur v au lieu des descripteurs SIFT eux-mêmes. La comparaison peut être effectuée en utilisant la distance euclidienne (également appelée distance L2). Il a été constaté que l'utilisation de la distance Chi Square ou de la distance Hellinger peut améliorer les résultats. Voir les détails décrits dans ce page.

Fondamentalement comparant les descripteurs SIFT eux-mêmes dans une image à ceux d'une autre n'est pas possible parce que vous finirez avec plusieurs descripteurs EIPD dans une image, et leur nombre varie en fonction de la façon dont vous les extraire. Ce que vous voulez est une base commune pour la comparaison et cela est fait dans le modèle BOW en faisant correspondre les descripteurs à un dictionnaire/dictionnaire commun qui tient compte des caractéristiques représentatives dans une base de données d'images.

+0

Merci beaucoup pour votre explication claire et agréable –