web-dev-qa-db-fra.com

Quels sont les points clés dans le traitement d'images?

Lorsque vous utilisez OpenCV, par exemple, des algorithmes tels que SIFT ou SURF sont souvent utilisés pour détecter des points clés. Ma question est ce que sont réellement ces points-clés?

Je comprends qu’il s’agit d’une sorte de "point d’intérêt" dans une image. Je sais aussi qu'ils sont des invariants d'échelle et sont circulaires.

De plus, j'ai découvert qu'ils avaient une orientation mais je ne comprenais pas ce que c'était. Est-ce un angle mais entre le rayon et quelque chose? Pouvez-vous donner quelques explications? Je pense que j'ai besoin de ce dont j'ai besoin en premier lieu, c'est quelque chose de plus simple et ensuite, il sera plus facile de comprendre les papiers.

63
definera

Ce sont de très bonnes questions. Abordons chaque point un par un:

Ma question est ce que sont réellement ces points-clés?

Les points clés sont la même chose que les points d'intérêt. Ce sont des emplacements spatiaux ou des points dans l’image qui définissent ce qui est intéressant ou quoi se démarque dans l’image. La détection de points d’intérêt est en réalité un sous-ensemble de détection de blob , qui vise à trouver des régions ou des zones spatiales intéressantes dans une image. La raison pour laquelle les points-clés sont spéciaux est que peu importe la façon dont l'image change ... si l'image pivote, est réduite/agrandie, si elle est traduite (tout cela serait un transformation affine au fait ... ) ou sujet à distorsion (transformation projective ou homographie ), vous devriez pouvoir trouver les points-clés identiques de cette image modifiée lors de la comparaison avec l'image d'origine . Voici un exemple d'un post que j'ai écrit il y a quelque temps:

Source: le module 'objet n'a pas d'attribut' pencha opencv 'drawMatches'

L'image de droite est une version pivotée de l'image de gauche. J'ai également seulement affiché les 10 meilleurs matchs entre les deux images. Si vous regardez le top 10 des matches, ce sont des points sur lesquels nous voudrions probablement nous concentrer, qui nous permettraient de nous souvenir de l’image. Nous voudrions nous concentrer sur le visage du caméraman ainsi que sur la caméra, le trépied et certaines textures intéressantes sur les bâtiments à l'arrière-plan. Vous voyez que ces mêmes points ont été trouvés entre les deux images et celles-ci ont été appariées avec succès.

Par conséquent, vous devez en déduire que ces points de l’image sont intéressants et qu’ils doivent être trouvés, quelle que soit la distorsion de l’image.

Je comprends qu’il s’agit d’une sorte de "point d’intérêt" d’une image. Je sais aussi qu'ils sont des invariants d'échelle et je sais qu'ils sont circulaires.

Vous avez raison. Echelle invariante signifie que, quelle que soit la manière dont vous redimensionnez l'image, vous devriez toujours pouvoir retrouver ces points.


Nous allons maintenant nous aventurer dans la partie descriptor. Ce qui rend les points-clés différents entre les cadres est la façon dont vous décrivez ces points-clés. Ce sont ce qu'on appelle descriptors. Chaque point clé que vous détectez a un descripteur associé qui l'accompagne. Certains frameworks ne font que la détection de points-clés, tandis que d'autres sont simplement un framework de description et ne détectent pas les points. Il y en a aussi qui font les deux - ils détectent et décrivent les points-clés. SIFT et SURF sont des exemples de cadres qui détectent et décrivent les points clés.

Les descripteurs concernent principalement à la fois le échelle et le orientation du point-clé. Les points clés que nous avons définis sont ce concept, mais nous avons besoin de la partie descriptor si notre but est d’essayer de faire correspondre les points clés de différentes images. Maintenant, ce que vous entendez par "circulaire" ... qui correspond à l’échelle à laquelle le point a été détecté. Prenez par exemple cette image tirée du tutoriel VLFeat Toolbox :

VLFeat example

Vous voyez que tous les points en jaune sont des points d'intérêt, mais certains de ces points ont un rayon de cercle différent. Celles-ci traitent de scale. La manière dont les points d’intérêt fonctionnent de manière générale est que nous décomposons l’image en plusieurs échelles. Nous vérifions les points d'intérêt à chaque échelle et nous combinons tous ces points pour créer le résultat final. Plus le "cercle" est grand, plus le plus grand est le point détecté à. De plus, une ligne rayonne du centre du cercle jusqu'au bord. C'est le orientation du point-clé, que nous couvrirons ensuite.

J'ai aussi découvert qu'ils avaient une orientation mais je ne comprenais pas ce que c'était en réalité. C'est un angle mais entre le rayon et quelque chose?

En gros, si vous voulez détecter des points clés quelles que soient leur échelle et leur orientation, quand ils parlent de orientation, ils veulent dire qu'ils cherchent un voisinage de pixels qui entoure le point clé et Le voisinage de pixels est orienté ou la direction dans laquelle ce patch est orienté. Cela dépend du cadre de description que vous regardez, mais le jist général consiste à détecter le plus dominant orientation des angles de gradient dans le patch. Ceci est important pour matching afin que vous puissiez faire correspondre les points clés ensemble. Jetez un coup d’œil à la première figure que j’ai avec les deux caméramans - l’un pivoté, l’autre non. Si vous examinez certains de ces points, comment pouvons-nous déterminer comment un point correspond à un autre? Nous pouvons facilement identifier le haut du cameraman en tant que point d’intérêt correspondant à la version pivotée car nous examinons les points qui entourent le point-clé et voyons l’orientation de tous ces points. .. et à partir de là, c'est comment l'orientation est calculée.

Habituellement, lorsque nous voulons détecter des points-clés, nous examinons simplement les emplacements. Cependant, si vous voulez faire correspondre les points-clés entre les images, vous avez certainement besoin de l'échelle et de l'orientation pour faciliter cette opération.


J'espère que cela t'aides!

98
rayryeng

Je ne connais pas aussi bien SURF, mais je peux vous parler de SIFT, sur lequel SURF est basé. J'ai fourni quelques notes sur SURF à la fin, mais je ne connais pas tous les détails.


SIFT a pour but de trouver des emplacements très distinctifs (ou points-clés) dans une image. Les emplacements ne sont pas simplement des emplacements 2D sur l'image, mais des emplacements dans l'image scale space, ce qui signifie qu'ils ont trois coordonnées: x , y et échelle . Le processus de recherche des points clés EIPD est le suivant:

  1. rendre flou et rééchantillonner l'image avec différentes largeurs de flou et fréquences d'échantillonnage pour créer un espace d'échelle
  2. utilisez la méthode différence entre les gaussiens pour détecter des blobs à différentes échelles; les centres de blob deviennent nos points-clés à une échelle donnée x , y et
  3. attribuez à chaque touche une orientation en calculant un histogramme des orientations de dégradé pour chaque pixel situé dans son voisinage et en sélectionnant la corbeille d'orientation présentant le nombre de comptages le plus élevé
  4. attribuer à chaque point clé un vecteur de caractéristiques à 128 dimensions en fonction des orientations de dégradé de pixels dans 16 quartiers locaux

L'étape 2 nous donne l'invariance d'échelle, l'étape 3 nous donne l'invariance de rotation et l'étape 4 nous donne une "empreinte" de toutes sortes qui peut être utilisée pour identifier le point clé. Ensemble, ils peuvent être utilisés pour faire correspondre les occurrences du même élément à n’importe quelle orientation et à l’échelle de plusieurs images.


SURF vise à atteindre les mêmes objectifs que SIFT mais utilise des astuces astucieuses pour augmenter la vitesse.

Pour la détection de blob, il utilise la méthode déterminant de Hessian . L'orientation dominante est trouvée en examinant les réponses horizontales et verticales à ondelettes de harr . Le descripteur de fonctionnalité est similaire à SIFT, il examine les orientations des pixels dans 16 voisinages locaux, mais donne un vecteur à 64 dimensions.

Les fonctionnalités SURF peuvent être calculées jusqu'à 3 fois plus rapidement que les fonctionnalités SIFT, mais sont tout aussi robustes dans la plupart des situations.


Pour référence:

n bon tutoriel sur les EIPD

ne introduction à SURF

19
eigenchris