[PYTHON] J'ai essayé d'extraire des fonctionnalités avec SIFT d'OpenCV

Qu'est-ce que SIFT

Algorithme SIFT

[Détection des points caractéristiques]

1-1. Rechercher des points candidats qui seront des points caractéristiques 1-2. Réduction des points candidats

[Description du montant de la fonctionnalité]

2-1. Détecter le gradient de chaque point caractéristique 2-2. Calcul de l'histogramme de direction du dégradé de chaque point caractéristique

1-1. Rechercher des points candidats qui seront des points caractéristiques

Un point caractéristique est un point qui prend une valeur extrême dans une image de différence (image DoG) dans la direction de l'échelle. Pour résumer brièvement, une dimension appelée ** échelle ** est ajoutée à une image bidimensionnelle (x, y) pour la rendre tridimensionnelle. Quant à la façon de déterminer l'échelle, considérons (x, y, σ) dans lequel l'image (x, y) est ** lissée ** d'une certaine quantité σ. Utilisez un ** filtre gaussien ** pour le lissage. Utilisez ces données pour identifier les points caractéristiques potentiels. Une grande quantité de changement signifie une grande quantité d'informations.

1-2. Réduction des points candidats

Étant donné que la valeur de sortie de l'image DoG est une fonction qui utilise (x, y, σ) comme variable, approximez-la autour des points caractéristiques et recalculez les points qui prennent les valeurs extrêmes à l'aide de la dérivée de l'expression approximative. C'est tout. Exclut les points sur le bord. Exclut ceux avec une petite valeur de sortie DoG.

2-1. Détecter le gradient de chaque point caractéristique

--Créez un histogramme de gradient de luminosité autour des points caractéristiques

point L'intensité est pondérée avec un filtre gaussien sur l'échelle des points caractéristiques. ⇒ Devenez résistant aux changements d'échelle.

--Dans l'histogramme obtenu, la direction dans laquelle l'intensité dépasse 80% de la valeur maximale est définie comme la direction de ce point caractéristique.

2-2. Calcul de l'histogramme de direction du dégradé de chaque point caractéristique

--Créez à nouveau un histogramme de gradient de luminosité avec la direction du point caractéristique comme direction de référence (forte contre la rotation) --Les directions sont 8 directions (45 degrés chacune) ―― 4x4x8 = quantité de fonction de 128 dimensions -Aussi normaliser (cela le rend plus résistant aux changements d'éclairage)

Code SIFT

Ceci est un exemple de code.


import cv2
import numpy as np

img = cv2.imread('dog.jpg')
sift = cv2.xfeatures2d.SIFT_create()
keypoints, descriptors = sift.detectAndCompute(img, None)
img_sift = cv2.drawKeypoints(img, keypoints, None, flags=4)
cv2.imwrite("sift_img.jpg ",img_sift)

--image: image d'entrée --keypoints: points clés obtenus à partir de l'image d'entrée --flags: réglage d'identification de la fonction de dessin

Image d'entrée dog.jpeg

Image de sortie

sift_img.jpg

Les références

Recommended Posts

J'ai essayé d'extraire des fonctionnalités avec SIFT d'OpenCV
J'ai essayé de détecter rapidement un mouvement avec OpenCV
J'ai essayé d'extraire automatiquement les mouvements des joueurs Wiire avec un logiciel
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
J'ai essayé la "conversion de morphologie" de l'image avec Python + OpenCV
J'ai essayé d'utiliser GrabCut d'OpenCV
J'ai essayé la reconnaissance faciale avec OpenCV
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé d'implémenter ListNet d'apprentissage de rang avec Chainer
Essayez d'extraire les caractéristiques des données de capteur avec CNN
Je veux détecter des objets avec OpenCV
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de commencer avec Hy
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé le rendu non réaliste avec Python + opencv
J'ai essayé de traiter l'image en "style croquis" avec OpenCV
J'ai essayé de corriger "J'ai essayé la simulation probabiliste du jeu de bingo avec Python"
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
J'ai essayé d'agrandir la taille du volume logique avec LVM
Je veux vérifier la position de mon visage avec OpenCV!
J'ai essayé de résoudre TSP avec QAOA
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de collecter automatiquement des images de Kanna Hashimoto avec Python! !!
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
J'ai essayé d'extraire des caractères des sous-titres (OpenCV: API Google Cloud Vision)
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai essayé d'extraire et d'illustrer l'étape de l'histoire à l'aide de COTOHA
J'ai essayé d'analyser la négativité de Nono Morikubo. [Comparer avec Posipa]
J'ai essayé de rationaliser le rôle standard des nouveaux employés avec Python
J'ai essayé de visualiser le texte du roman "Weather Child" avec Word Cloud
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé de visualiser tous les arbres de décision de la forêt aléatoire avec SVG
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.
J'ai essayé la reconnaissance manuscrite des caractères des runes avec scikit-learn
J'ai essayé de prédire l'année prochaine avec l'IA
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé des centaines de millions de SQLite avec python
J'ai essayé d'implémenter la lecture de Dataset avec PyTorch
J'ai essayé d'utiliser lightGBM, xg boost avec Boruta
J'ai essayé la reconnaissance d'image de CIFAR-10 avec Keras-Learning-
J'ai essayé d'apprendre le fonctionnement logique avec TF Learn
J'ai essayé de déplacer GAN (mnist) avec keras
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé la reconnaissance d'image de CIFAR-10 avec la reconnaissance d'image Keras-
J'ai essayé d'informer Slack de la mise à jour de Redmine
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de trouver le rapport de circonférence par 100 millions de chiffres
J'ai essayé d'intégrer Keras dans TFv1.1
J'ai essayé Flask avec des conteneurs distants de VS Code
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé de "binariser" l'image avec Python + OpenCV