¿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