Рубрики
Без рубрики

CV2.findhomography: Вещи, Которые Вы должны знать

cv2.findhomography-это матрица 3×3, которая отображает точки в одной точке в соответствующую точку на другом изображении. Эта матрица может быть

Автор оригинала: 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:

cv2.отслеживание объектов findhomography
cv2.отслеживание объектов findhomography
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:
Вычисление гомографии с помощью cv2.findhomography:

Выход

Этот код поддерживает список индексов дескрипторов в дескрипторах запросов и дескрипторах поездов. Затем мы находим перспективное преобразование с помощью cv2.findHomography. Mask.ravel() используется для получения непрерывного сплющенного массива. Затем мы используем cv2.polylines() для рисования функции для кадра. Наконец, мы используем cv2.imshow() для отображения конечного результата.

Заключение| cv2.findhomography

На этом мы заканчиваем нашу статью. Я надеюсь. Вы смогли понять концепцию гомографии cv2 из этой статьи.

Однако, если у вас есть какие-либо сомнения или вопросы, дайте мне знать в разделе комментариев ниже. Я постараюсь помочь вам как можно скорее.

Счастливого Пифонирования!