1-1. Rechercher des points candidats qui seront des points caractéristiques 1-2. Réduction des points candidats
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
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.
É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.
--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.
--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)
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
Image de sortie
Recommended Posts