Sift est-il un bon moyen d'extraire des fonctionnalités d'une image?


13

J'essaie d'extraire des fonctionnalités d'une image, mais je n'ai pas réussi à obtenir les points que je veux extraire, et donc mon image ne correspond pas au modèle.

Y a-t-il des points de contrôle que je dois franchir avant d'appliquer SIFT à mon image afin d'obtenir de bons résultats? Par exemple, l'image du modèle est;
entrez la description de l'image ici

image ciblée; entrez la description de l'image ici


1
Cela dépend du type d'image et de la raison pour laquelle vous souhaitez utiliser les fonctionnalités. Plus d'informations s'il vous plaît.

Réponses:


14

Ce que vous êtes censé faire lorsque vous associez un modèle à une image à l'aide de sift, c'est d'exécuter sift par rapport à votre modèle, puis recherchez ces fonctionnalités de tri dans cet arrangement dans votre scène.

Règle générale: comparer comme pour aimer.

Sift (modèle) contenu dans Sift (image)

Vous ne pouvez pas régler Sift pour extraire les «fonctionnalités que vous voulez». Sift * utilise des mesures invariantes pour trouver les fonctionnalités qu'il juge les plus importantes. (* Chris A)

Si vous souhaitez qu'il trouve des fonctionnalités particulières à partir de votre modèle, réduisez les modèles de ces fonctionnalités et recherchez-les.

Juste une suggestion. Je ne sais pas exactement quel type de modèle vous essayez d'adapter à quel type de scène ou d'image.


7
+1, je suis d'accord. Sauf pour une chose. SIFT ne trouve pas les fonctionnalités les plus invariantes. Il utilise des mesures invariantes pour trouver les caractéristiques qu'il juge les plus saillantes.

7

Je ne sais pas si vous voulez simplement faire correspondre deux images (par exemple trouver les points communs), ou si vous voulez essayer quelque chose comme CBIR (récupération d'image basée sur le contenu - recherche dans une base de données avec une image modèle pour trouver tout ce qui contient le objet).

Je fais actuellement des recherches CBIR, donc je suis assez à jour avec les méthodes actuelles. Voici et voici les liens vers mes réponses à des problèmes similaires au vôtre de stackoverflow, vous devriez jeter un oeil.

Maintenant, pour parler un peu de SIFT. Lorsque if a été introduit pour la première fois par Lowe, le terme SIFT s'appliquait à la fois au processus de détection des entités et aux descripteurs d'entités calculés sur ces points d'intérêt détectés. Jusqu'à ce jour, les descripteurs SIFT se sont révélés incroyablement impressionnants. Les descripteurs ont des propriétés intéressantes que @Totero a déjà mentionnées.

En revanche, la méthode de détection SIFT , de plus en plus souvent appelée DoG (Différence des Gaussiens), n'est plus à la pointe de la technologie. Il est encore largement utilisé, mais pour le processus de détection de fonctionnalités, il existe aujourd'hui plus de méthodes, dont certaines sont meilleures ou complètent bien les types d'extraits de processus DoG invariants.

La plupart des articles actuels (regardez les liens dans les questions liées au stackoverflow) ont une autre pratique intéressante: ils combinent plusieurs façons de détecter des entités, puis utilisent des descripteurs SIFT (qui restent toujours des descripteurs) pour calculer les représentations vectorielles invariantes. Je travaille actuellement avec une combinaison de DoG (ils se concentrent sur les parties d'images en coin) et de régions MSER (ils se concentrent sur les points distinctifs de type blob à travers plusieurs échelles). Vous voudrez peut-être essayer et expérimenter et y lancer encore plus de types de détecteurs de fonctionnalités, si vous trouvez que cette combinaison n'est pas satisfaisante sur votre base de données d'images particulière.

De plus, si vous êtes intéressé, voici un article qui évalue les performances de différentes combinaisons de détection et de descripteurs. Je ne l'ai pas lu depuis DoG & MSER + SIFT fonctionne bien pour moi, mais je l'ai parcouru et le papier est assez bon.

PS: utilisez google scholar si vous n'avez pas accès à la base de données IEEEXplore à laquelle je suis lié.


juste une petite clarification: DoG signifie Difference of Gaussian (différence entre deux réponses de filtre gaussien)
Libor

2

S'appuyant sur les réponses précédentes:

(1) Vous pouvez utiliser SIFT (ou une autre variante améliorée de ce descripteur de patch local) avec un échantillonnage dense, au lieu du détecteur intégré. Vous pouvez choisir la taille du patch local et la densité d'échantillonnage pour répondre à vos exigences de performances et de coût de calcul.

(2) SIFT est un descripteur invariant affine pour une correspondance stéréo large ligne de base. Cela signifie que SIFT fonctionne bien lorsque vous prenez une image et induisez une transformation affine, dans laquelle le «modèle» doit être présent dans l'image cible bien qu'avec des transformations.

Suggestions: (a) Créez une base de données d'images modèles (si possible) pour améliorer vos chances de détecter l'image.

(b) Vous pouvez utiliser le modèle BoW comme référence si vous choisissez d'adopter une approche CBIR pour votre tâche.

(c) Recadrez votre image modèle uniquement à la partie pertinente et utilisez un SIFT très dense. http://www.vlfeat.org/overview/dsift.html

(4) Plus tard, vous voudrez peut-être essayer un descripteur à plusieurs échelles comme PHOG (Pyramidal Histogram of Gradients), etc., qui pourrait potentiellement améliorer les résultats. http://www.vlfeat.org/overview/dsift.html#tut.dsift.phow

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.