[Искусственный интеллект плиты] Машинное обучение 049 — Извлечение характерных точек изображений SIFT

машинное обучение искусственный интеллект Python OpenCV

[Искусственный интеллект плиты] Машинное обучение 049 — Извлечение характерных точек изображений SIFT

(Библиотеки Python и номера версий, используемые в этой статье: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2)

Характерные точки на изображении являются ключевыми точками, которые отличают изображение от других изображений.При обнаружении этих ключевых точек мы должны учитывать несколько вопросов, а именно 1. Независимо от того, как цель повернута, характеристики цели должны быть сохранены. Точки остаются неизменными (т. е. инвариантность вращения), 2 независимо от того, становится ли цель больше или меньше, ее характерные точки также должны оставаться неизменными (т. е. инвариантность масштаба), и, например, требуется инвариантность освещенности.

В настоящее время существует множество методов и операторов для описания характерных точек, наиболее распространенными из которых являются оператор описания характеристик SIFT, оператор описания характеристик SURF, оператор описания характеристик ORB, описание характеристик HOG, описание характеристик LBP и описание характеристик Harr. Чтобы узнать о разнице между этими операторами и описаниями функций, вы можете обратиться к сообщению в блоге:Описание обнаружения функции изображения (1): Принципиальный обзор функций SIFT, SURF, ORB, HOG, LBP и реализация кода OpenCV

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

Особенности SIFT имеют много преимуществ:

1. Функция SIFT — это локальная особенность изображения, которая остается инвариантной к повороту, масштабированию и изменению яркости, а также сохраняет определенную степень устойчивости к изменению угла обзора, аффинным преобразованиям и шуму;

2. Хорошее различие и богатая информация, подходящая для быстрого и точного сопоставления в массивных базах данных признаков;

3. Множество, даже несколько объектов могут генерировать большое количество векторов признаков SIFT;

4. Высокая скорость, оптимизированный алгоритм сопоставления SIFT может даже соответствовать требованиям в реальном времени;

5. Масштабируемость, легко комбинируется с другими формами собственных векторов.

Извлечение характерных точек SIFT в основном включает следующие четыре шага:

1. Обнаружение экстремумов в масштабном пространстве: поиск местоположений изображения во всех масштабах. Потенциальные точки интереса, не зависящие от масштаба и вращения, идентифицируются дифференциальной функцией Гаусса.

2. Локализация ключевых точек: в каждом потенциальном местоположении местоположение и масштаб определяются моделью точной подгонки. Ключевые точки выбираются в зависимости от того, насколько они стабильны.

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

4. Описание ключевой точки: В окрестностях каждой ключевой точки измерьте локальный градиент изображения в выбранном масштабе. Эти градиенты преобразуются в представление, которое допускает относительно большие локальные деформации формы и изменения освещения.

Чтобы узнать о математическом выводе и конкретном значении SIFT, вы можете обратиться к этому сообщению в блоге:Подробное объяснение возможностей SIFT


1. Извлеките особенности SIFT

1.1 Установите модуль opencv-contrib-python

Обычно мы используем модуль opencv-python, но в этом модуле нет метода xfeatures2d, потому что алгоритм SIFT запатентован, поэтому он был удален из opencv-python.

По поводу установки этого модуля, в интернете есть много версий.Я тоже наступил на несколько ям.Наконец-то обнаружил, что доступен следующий способ.Сначала удалите исходный модуль opencv-python(если номер версии исходного opencv -python модуль 3.4 .2.16, удалять не нужно). Затем установите версию 3.4.2.16 opencv-python и opencv-contrib-python.

способ установки:

pip install opencv-python==3.4.2.16

pip install opencv-contrib-python==3.4.2.16

1.2 Извлечение особенностей SIFT

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

sift = cv2.xfeatures2d.SIFT_create() # 构建SIFT特征点检测器对象
keypoints = sift.detect(gray, None) # 用SIFT特征点检测器对象检测灰度图中的特征点
# 将keypoints绘制到原图中
img_sift = np.copy(img)
cv2.drawKeypoints(img, keypoints, img_sift, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

# 显示绘制有特征点的图像
plt.figure(12,figsize=(15,30))
plt.subplot(121)
img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.title('Raw Img')

plt.subplot(122)
img_sift_rgb=cv2.cvtColor(img_sift,cv2.COLOR_BGR2RGB)
plt.imshow(img_sift_rgb)
plt.title('Img with SIFT features')

########################резюме########################## ######

1. Для извлечения характерных точек SIFT необходимо использовать только функцию cv2.xfeatures2d.SIFT_create().detect(), но модуль opencv-contrib-python должен быть установлен заранее.

#################################################################


Примечание. Эта часть кода была загружена в (мой гитхаб), добро пожаловать на скачивание.

Использованная литература:

1. Классические примеры машинного обучения Python, Пратик Джоши, перевод Тао Цзюньцзе и Чена Сяоли.