En este artículo, vamos a ver sobre la detección de funciones en visión artificial con OpenCV en Python. La detección de características es el proceso de verificar las características importantes de la imagen; en este caso, las características de la imagen pueden ser bordes, esquinas, crestas y manchas en las imágenes.
En OpenCV, hay una serie de métodos para detectar las características de la imagen y cada técnica tiene sus propias ventajas y defectos.
Nota: Las imágenes que damos a estos algoritmos deben ser en blanco y negro. Esto ayuda a los algoritmos a centrarse más en las funciones.
Imagen en uso:
Método 1: Detección de esquina Haris
La detección de esquinas de Haris es un método en el que podemos detectar las esquinas de la imagen deslizando un cuadro deslizante por toda la imagen al encontrar las esquinas y aplicará un umbral y las esquinas se marcarán en la imagen. Este algoritmo se utiliza principalmente para detectar las esquinas de la imagen.
Sintaxis:
cv2.cornerHarris(image, dest, blockSize, kSize, freeParameter, borderType)
Parámetros:
- Imagen: la imagen de origen para detectar las características
- Dest – Variable para almacenar la imagen de salida
- Tamaño de bloque: tamaño del vecindario
- Ksize – Parámetro de apertura
- Tipo de borde: el tipo revelador de píxeles.
Ejemplo: Detección y coincidencia de características usando OpenCV
Python3
# Importing the libraries import cv2 import numpy as np # Reading the image and converting the image to B/W image = cv2.imread('book.png') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gray_image = np.float32(gray_image) # Applying the function dst = cv2.cornerHarris(gray_image, blockSize=2, ksize=3, k=0.04) # dilate to mark the corners dst = cv2.dilate(dst, None) image[dst > 0.01 * dst.max()] = [0, 255, 0] cv2.imshow('haris_corner', image) cv2.waitKey()
Producción:
Método 2: Detección de esquina Shi-Tomasi
Shi y Tomasi idearon un algoritmo de detección de esquinas diferente que es en su mayoría similar al algoritmo de detección de esquinas de Haris en el que la única diferencia será el valor del kernel en el que podemos encontrar solo las n esquinas más fuertes de la imagen. Esto puede ser de gran ayuda, ya que solo necesitamos las características limitadas y muy importantes de la imagen.
Sintaxis:
cv2.goodFeaturesToTrack(imagen, maxc, Calidad, maxD)
Parámetros:
- imagen: la imagen de origen que necesitamos para extraer las características.
- maxc – Número máximo de esquinas que queremos [Los valores negativos dan todas las esquinas]
- Calidad: parámetro de nivel de calidad (valor preferido = 0,01)
- maxD – Distancia máxima (valor preferido=10)
Ejemplo: Detección y coincidencia de características usando OpenCV
Python3
# Importing the libraries import cv2 import numpy as np # Reading the image and converting into B?W image = cv2.imread("book.png") gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Applying the function corners = cv2.goodFeaturesToTrack( gray_image, maxCorners=50, qualityLevel=0.02, minDistance=20) corners = np.float32(corners) for item in corners: x, y = item[0] x = int(x) y = int(y) cv2.circle(image, (x, y), 6, (0, 255, 0), -1) # Showing the image cv2.imshow('good_features', image) cv2.waitKey()
Producción:
Método 3: SIFT (Transformación de características de escala invariable)
Mientras que Haris y shi-Tomasi son los algoritmos para detectar las esquinas de la imagen. SIFT es uno de los algoritmos importantes que detectan objetos irrelevantes para la escala y la rotación de la imagen y la referencia. Esto ayuda mucho cuando comparamos los objetos del mundo real con una imagen, aunque es independiente del ángulo y la escala de la imagen. Este método devolverá los puntos clave de las imágenes que necesitamos marcar en la imagen.
Sintaxis:
tamizar = cv2.xfeatures2d.SIFT_create()
kp, des = sift.detectAndCompute(gray_img, Ninguno)
Esta función devuelve puntos clave que luego usamos con el método drawkeypoints() para dibujar los puntos clave.
Nota: Los círculos de la imagen representan los puntos clave, donde el tamaño del círculo representa directamente la fuerza de los puntos clave.
Ejemplo: Detección y coincidencia de características usando OpenCV
Python3
# Importing the libraries import cv2 # Reading the image and converting into B/W image = cv2.imread('book.jpg') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Applying the function sift = cv2.xfeatures2d.SIFT_create() kp, des = sift.detectAndCompute(gray_image, None) # Applying the function kp_image = cv2.drawKeypoints(image, kp, None, color=( 0, 255, 0), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow('SIFT', kp_image) cv2.waitKey()
Producción:
Método 4: Algoritmo FAST para detección de esquinas
SURF es rápido en comparación con SIFT, pero no tan rápido de usar con dispositivos en tiempo real como teléfonos móviles y cámaras de vigilancia. Entonces, se introdujo el algoritmo FAST con un tiempo de computación muy rápido. Sin embargo, FAST nos brinda solo los puntos clave y es posible que necesitemos calcular descriptores con otros algoritmos como SIFT y SURF. Con un algoritmo rápido, podemos detectar esquinas y también manchas.
Sintaxis:
rápido = cv2.FastFeatureDetector_create()
fast.setNonmaxSuppression(Falso)
kp = fast.detect(gray_img, Ninguno)
Ejemplo: Detección y coincidencia de características usando OpenCV
Python3
# Importing the libraries import cv2 # Reading the image and converting into B/W image = cv2.imread('book.png') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Applying the function fast = cv2.FastFeatureDetector_create() fast.setNonmaxSuppression(False) # Drawing the keypoints kp = fast.detect(gray_image, None) kp_image = cv2.drawKeypoints(image, kp, None, color=(0, 255, 0)) cv2.imshow('FAST', kp_image) cv2.waitKey()
Producción:
Método 5: ORB (Oriented FAST and Rotated Brief)
ORB es una forma muy eficaz de detectar las características de la imagen en comparación con SIFT y SURF. ORB está programado para encontrar menos características en la imagen en comparación con el algoritmo SIFT y SURF porque detecta las características más importantes en menos tiempo que ellos, pero este algoritmo se considera un algoritmo muy efectivo en comparación con otros algoritmos de detección.
Sintaxis:
orbe = cv2.ORB_create(nfeatures=2000)
kp, des = orb.detectAndCompute(gray_img, Ninguno)
Ejemplo: Detección y coincidencia de características usando OpenCV
Python3
# Importing the libraries import cv2 # Reading the image and converting into B/W image = cv2.imread('book.png') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Applying the function orb = cv2.ORB_create(nfeatures=2000) kp, des = orb.detectAndCompute(gray_image, None) # Drawing the keypoints kp_image = cv2.drawKeypoints(image, kp, None, color=(0, 255, 0), flags=0) cv2.imshow('ORB', kp_image) cv2.waitKey()
Producción:
Publicación traducida automáticamente
Artículo escrito por sanjaysdev0901 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA