ORB es una fusión del detector de puntos clave RÁPIDO y el descriptor BREVE con algunas funciones adicionales para mejorar el rendimiento. FAST es Características de la prueba de segmento acelerado que se utiliza para detectar características de la imagen proporcionada. También utiliza una pirámide para producir características multiescala. Ahora no calcula la orientación y los descriptores de las características, por lo que aquí es donde BRIEF entra en el papel.
ORB usa descriptores BRIEF pero como BRIEF funciona mal con la rotación. Entonces, lo que hace ORB es rotar el BREVE de acuerdo con la orientación de los puntos clave. Usando la orientación del parche, se encuentra su array de rotación y rota el BRIEF para obtener la versión rotada. ORB es una alternativa eficiente a los algoritmos SIFT o SURF utilizados para la extracción de características, en el costo de cómputo, el rendimiento coincidente y, principalmente, las patentes. SIFT y SURF están patentados y se supone que debes pagarles por su uso. Pero ORB no está patentado.
En este tutorial, vamos a aprender cómo encontrar las características en una imagen y relacionarlas con las otras imágenes en un video continuo.
Algoritmo
- Tome la imagen de consulta y conviértala a escala de grises.
- Ahora inicialice el detector ORB y detecte los puntos clave en la imagen y la escena de consulta.
- Calcule los descriptores que pertenecen a ambas imágenes.
- Haga coincidir los puntos clave con Brute Force Matcher.
- Muestre las imágenes coincidentes.
A continuación se muestra la implementación.
Imagen de entrada:
Python3
import numpy as np import cv2 # Read the query image as query_img # and train image This query image # is what you need to find in train image # Save it in the same directory # with the name image.jpg query_img = cv2.imread('query.jpg') train_img = cv2.imread('train.jpg') # Convert it to grayscale query_img_bw = cv2.cvtColor(query_img,cv2.COLOR_BGR2GRAY) train_img_bw = cv2.cvtColor(train_img, cv2.COLOR_BGR2GRAY) # Initialize the ORB detector algorithm orb = cv2.ORB_create() # Now detect the keypoints and compute # the descriptors for the query image # and train image queryKeypoints, queryDescriptors = orb.detectAndCompute(query_img_bw,None) trainKeypoints, trainDescriptors = orb.detectAndCompute(train_img_bw,None) # Initialize the Matcher for matching # the keypoints and then match the # keypoints matcher = cv2.BFMatcher() matches = matcher.match(queryDescriptors,trainDescriptors) # draw the matches to the final image # containing both the images the drawMatches() # function takes both images and keypoints # and outputs the matched query image with # its train image final_img = cv2.drawMatches(query_img, queryKeypoints, train_img, trainKeypoints, matches[:20],None) final_img = cv2.resize(final_img, (1000,650)) # Show the final image cv2.imshow("Matches", final_img) cv2.waitKey(3000)
Producción: