Автор оригинала: Team Python Pool.
Привет, кодеры!! В этой статье мы познакомимся с cv2.findhomography в Python. Но прежде чем вдаваться в подробности, давайте получим базовое представление об этой теме.
Что такое гомография?
Гомография представляет собой матрицу 3×3, которая отображает точки в одной точке в соответствующую точку на другом изображении. Эту матрицу можно представить в виде:
Если 2 точки не находятся в одной плоскости, мы должны использовать 2 омографа. Аналогично, для n плоскостей мы должны использовать n омографов.
Выравнивание изображения с помощью гомографии
Рассмотрим множество соответствующих точек (x1,y1) и (x2,y2). Затем Гомография отображает их следующим образом:
Приведенное выше уравнение справедливо для ВСЕХ множеств соответствующих точек, учитывая, что они лежат на одной плоскости в реальном мире.
Как вычислить гомографию?
Чтобы вычислить омографию между двумя изображениями, мы должны знать, по крайней мере, четыре соответствующие точки между ними. OpenCV надежно оценивает гомографию, которая наилучшим образом соответствует всем соответствующим точкам. Точечные соответствия обнаруживаются путем сопоставления таких объектов, как ПРОСЕИВАНИЕ или СЕРФИНГ между изображениями.
Чтобы вычислить гомографию между двумя изображениями, мы можем использовать метод findhomography ().
h, status =
cv2.findHomography(points1, points2)
cv2.отслеживание объектов findhomography:
Мы будем использовать следующее изображение для понимания гомографии cv2:
import cv2 import numpy as np .imread("img.jpg", cv2.IMREAD_GRAYSCALE) .VideoCapture(0)
Здесь мы загрузили приведенное выше изображение с помощью метода cv2.imread (). Затем мы используем метод cv2.VideoCapture() для инициализации веб-камеры системы.
Сопоставление признаков и омография для поиска объектов:
Сопоставление объектов-это процесс поиска соответствующих объектов из двух одинаковых наборов данных на основе расстояния поиска.
Для этой цели мы будем использовать алгоритм просеивания и сопоставление признаков типа фланна.
В этом коде мы сначала создали алгоритм SIFT с помощью метода cv2.xfeatures2d.SIFT_create (). Затем мы нашли ключевые точки и дескрипторы с помощью SIFT с помощью detectAndCompute(). После этого мы инициализировали два словаря, index_params и search_params. Наконец, используя сопоставление объектов типа Фланна, мы собрали соответствующие объекты двух наборов данных.
Теперь мы преобразуем видеозахват в href="http://homepages.inf.ed.ac.uk/rbf/HIPR2/grayimage.htm">оттенки серого. href="http://homepages.inf.ed.ac.uk/rbf/HIPR2/grayimage.htm">оттенки серого.
_,.read() .cvtColor(frame, cv2.COLOR_BGR2GRAY) kp_grayframe,.detectAndCompute(grayframe, None) .knnMatch(desc_image, desc_grayframe,) good_points=[] for m, n in matches: if(m.distance < 0.6*n.distance): good_points.append(m)
Используя cap.read(), мы читаем кадр. Затем мы преобразуем этот кадр в оттенки серого с помощью функции cvtColor(). Затем мы используем SIFT, чтобы найти ключевые точки и дескрипторы. Используя алгоритм KNN, мы находим ближайшее совпадение. Затем мы инициализируем список good_points[], чтобы отслеживать только хорошие точки. Наконец, мы используем цикл for для добавления точек в соответствии с расстоянием дескрипторов.
Вычисление гомографии с помощью cv2.findhomography:
.float32([kp_image[m.queryIdx] .pt for m in good_points]).reshape(-1, 1, 2) .float32([kp_grayframe[m.trainIdx] .pt for m in good_points]).reshape(-1, 1, 2) matrix,.findHomography(query_pts, train_pts, cv2.RANSAC, 5.0) .ravel().tolist() .polylines(frame, [np.int32(dst)], True, (255, 0, 0), 3) cv2.imshow("Homography", homography)
Выход
Этот код поддерживает список индексов дескрипторов в дескрипторах запросов и дескрипторах поездов. Затем мы находим перспективное преобразование с помощью cv2.findHomography. Mask.ravel() используется для получения непрерывного сплющенного массива. Затем мы используем cv2.polylines() для рисования функции для кадра. Наконец, мы используем cv2.imshow() для отображения конечного результата.
Заключение| cv2.findhomography
На этом мы заканчиваем нашу статью. Я надеюсь. Вы смогли понять концепцию гомографии cv2 из этой статьи.
Однако, если у вас есть какие-либо сомнения или вопросы, дайте мне знать в разделе комментариев ниже. Я постараюсь помочь вам как можно скорее.
Счастливого Пифонирования!