Computer vision, Machine Learning

SIFT & SURF

Время прочтения: 3 мин.

Ключевые точки — это концепция, о которой следует помнить при работе с изображениями. В основном это точки интереса на изображении. Ключевые точки аналогичны характеристикам данного изображения.

Это места, которые определяют то, что интересно на изображении. Ключевые точки важны, потому что независимо от того, как изображение изменяется (поворот, сжатие, расширение, искажение), мы всегда найдем одни и те же ключевые точки для изображения.

Масштабно-инвариантное преобразование признаков (SIFT) — очень популярный алгоритм обнаружения ключевых точек. Он состоит из следующих этапов:

  • Обнаружение экстремумов в масштабном пространстве
  • Локализация ключевых точек
  • Назначение ориентации
  • Дескриптор ключевой точки
  • Соответствие ключевых точек

Функции, извлеченные из SIFT, могут использоваться для таких приложений, как сшивание изображений, обнаружение объектов и т. Д. Приведенный ниже код и выходные данные показывают ключевые точки и их ориентацию, рассчитанные с помощью SIFT.

#import required libraries
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#show OpenCV version
print(cv2.__version__)
#read the image and convert to grayscale
image = cv2.imread('index.png')
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
#create sift object
sift = cv2.xfeatures2d.SIFT_create()
#calculate  keypoints and their orientation
keypoints,descriptors = sift.detectAndCompute(gray,None)
#plot keypoints on the image
with_keypoints = cv2.drawKeypoints(gray,keypoints)
#plot the image
plt.imshow(with_keypoints)

Ускоренные надежные функции (SURF) — это расширенная версия SIFT. Он работает намного быстрее и более устойчив к преобразованиям изображений. В SIFT масштабное пространство аппроксимируется с помощью лапласиана гауссиана.

Но что же такое лапласиан гауссова?

Лапласиан — это ядро, используемое для вычисления краев изображения. Ядро лапласиана работает, аппроксимируя вторую производную изображения. Следовательно, он очень чувствителен к шуму. Обычно ядро Гаусса применяется к изображению перед ядром Лапласа, давая ему название лапласиана Гаусса. В SURF лапласиан Гаусса вычисляется с использованием прямоугольного фильтра (ядра). Свертка с блочным фильтром может выполняться параллельно для разных масштабов, что является основной причиной повышенной скорости SURF (по сравнению с SIFT).

#import required libraries
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#show OpenCV version
print(cv2.__version__)
#read the image and convert to grayscale
image = cv2.imread('index.png')
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
#instantiate surf object
surf = cv2.xfeatures2d.SURF_create(400)
#calculate  keypoints and their orientation
keypoints,descriptors = surf.detectAndCompute(gray,None)
with_keypoints = cv2.drawKeypoints(gray,keypoints)
plt.imshow(with_keypoints)

Вот так прошло мое знакомство с Face recognition.

Советуем почитать