Python | Detección de esquinas con Shi-Tomasi Método de detección de esquinas usando OpenCV

¿Qué es un Rincón?
Una esquina se puede interpretar como la unión de dos bordes (donde un borde es un cambio repentino en el brillo de la imagen).

Detección de esquina Shi-Tomasi –

Shi-Tomasi Corner Detection fue publicado por J.Shi y C.Tomasi en su artículo ‘ Good Features to Track ‘. Aquí, la intuición básica es que las esquinas se pueden detectar buscando un cambio significativo en todas las direcciones.

Consideramos una pequeña ventana en la imagen y luego escaneamos toda la imagen, buscando esquinas.

Mover esta pequeña ventana en cualquier dirección daría como resultado un gran cambio en la apariencia, si esa ventana en particular está ubicada en una esquina.

Las regiones planas no tendrán cambios en ninguna dirección.

Si hay un borde, entonces no habrá cambios importantes a lo largo de la dirección del borde.

Resumen matemático –

Para una ventana (W) ubicada en (X, Y) con una intensidad de píxel I (X, Y), la fórmula para la detección de esquinas Shi-Tomasi es:

f(X, Y) = Σ (I(Xk, Yk) - I(Xk + ΔX, Yk + ΔY))2  where (Xk, Yk) ϵ W

De acuerdo con la fórmula:
si estamos escaneando la imagen con una ventana tal como lo haríamos con un kernel y notamos que hay un área donde hay un cambio importante sin importar en qué dirección realmente escaneamos, entonces tenemos una buena intuición que probablemente hay una esquina allí.

El cálculo de f(X, Y) será muy lento. Por lo tanto, usamos la expansión de Taylor para simplificar la función de puntuación, R.

R = min(λ1, λ2)
where λ1, λ2 are eigenvalues of resultant matrix

Uso goodFeaturesToTrack()de la función –

Sintaxis: cv2.goodFeaturesToTrack(gray_img, maxc, Q, minD)

Parámetros:
gray_img – Imagen en escala de grises con valores integrales
maxc – Número máximo de esquinas que queremos (dar un valor negativo para obtener todas las esquinas)
Q – Parámetro de nivel de calidad (valor preferido = 0.01)
maxD – Distancia máxima (valor preferido = 10)

A continuación se muestra la implementación de Python de Shi-Tomasi Corner Detection:

# Python program to illustrate 
# corner detection with 
# Shi-Tomasi Detection Method
    
# organizing imports 
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
  
# path to input image specified and  
# image is loaded with imread command
img = cv2.imread('chess.png')
  
# convert image to grayscale
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  
# Shi-Tomasi corner detection function
# We are detecting only 100 best corners here
# You can change the number to get desired result.
corners = cv2.goodFeaturesToTrack(gray_img, 100, 0.01, 10)
  
# convert corners values to integer
# So that we will be able to draw circles on them
corners = np.int0(corners)
  
# draw red color circles on all corners
for i in corners:
    x, y = i.ravel()
    cv2.circle(img, (x, y), 3, (255, 0, 0), -1)
  
# resulting image
plt.imshow(img)
  
# De-allocate any associated memory usage  
if cv2.waitKey(0) & 0xff == 27: 
    cv2.destroyAllWindows()

Aporte :

Producción :

Publicación traducida automáticamente

Artículo escrito por hachiman_20 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *