Detección de Esquinas y Blobs
Detección de esquinas
La detección de esquinas se utiliza para identificar cambios bruscos de intensidad donde se encuentran dos bordes. Es útil en la coincidencia de características, el seguimiento de objetos y el reconocimiento de estructuras.
Métodos populares:
- Detector de esquinas de Harris (
cv2.cornerHarris
): detecta esquinas basándose en los cambios de gradiente;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Convert to float32
gray = np.float32(gray)
# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None) # Improve visibility
# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Parámetros:
src
: imagen de entrada en escala de grises (debe serfloat32
);blockSize
: tamaño de la ventana local para calcular los gradientes;ksize
: tamaño de apertura del operador Sobel (impar, por ejemplo,3
,5
,7
);k
: parámetro libre del detector de Harris (valores típicos:0.04 - 0.06
).
- Detector de esquinas Shi-Tomasi (
cv2.goodFeaturesToTrack
): selecciona las esquinas más fuertes en una imagen;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)
# Draw detected corners in blue
for corner in corners:
x, y = np.int32(corner[0])
cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Parámetros:
image
: imagen de entrada en escala de grises;maxCorners
: número máximo de esquinas a detectar;qualityLevel
: calidad mínima de las esquinas detectadas (rango:0.01 - 0.1
);minDistance
: distancia mínima entre las esquinas detectadas.
Parámetros del método cv2.circle()
para resaltar objetos:
image
: la imagen sobre la que se dibujará el círculo;center_coordinates
: las coordenadas centrales del círculo, representadas como una tupla de dos valores: (X, Y);radius
: el radio del círculo;color
: el color del borde del círculo. En formato BGR, pasado como una tupla (por ejemplo,(255, 0, 0)
para azul);thickness
: el grosor del borde del círculo en píxeles. Un valor de-1
rellenará todo el círculo con el color especificado.
Detección de Blobs
La detección de blobs encuentra regiones de intensidad similar en una imagen, útil para la detección y seguimiento de objetos.
Uno de los métodos más populares para la detección de blobs es SimpleBlobDetector
cv2.SimpleBlobDetector
: detecta puntos clave que representan blobs según el tamaño, la forma y la intensidad.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()
# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001
# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)
# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Parámetros:
minThreshold
,maxThreshold
: rango de intensidad para la detección de blobs;filterByArea
: habilita el filtrado según el tamaño del blob;minArea
,maxArea
: especifica las restricciones de tamaño para los blobs detectados;
filterByCircularity
: habilita el filtrado según la redondez;minCircularity
: valores bajos detectan blobs alargados;
filterByConvexity
: habilita el filtrado según la convexidad;minConvexity
: valores bajos permiten formas cóncavas;
filterByInertia
: habilita el filtrado según la elongación;minInertiaRatio
: valores bajos detectan blobs alargados.
Swipe to start coding
Se proporcionan las imágenes de una fábrica (factory
) y de girasoles (sunflowers
):
- Convertir la imagen
factory
a escala de grises y almacenar en la variablegray_factory
; - Convertir la imagen
sunflowers
a escala de grises y almacenar en la variablegray_sunflowers
; - Es necesario convertir la matriz de la imagen a
float32
para el Detector de Harris, realizar la conversión y almacenar engray_float
; - Aplicar la detección de esquinas de Harris y almacenar en
harris_corners
(parámetros recomendados:blockSize=2, ksize=3, k=0.04
); - Utilizar
dilate()
para mejorar la visibilidad deharris_corners
; - Aplicar la detección de esquinas Shi-Tomasi a la imagen y almacenar en
shi_tomasi_corners
(parámetros recomendados:gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10
) - Crear un objeto
SimpleBlobDetector_Params
para inicializar los parámetros y almacenar enparams
; - Crear un detector de blobs con los parámetros especificados y almacenar en
detector
; - Detectar los puntos clave de los blobs y almacenar en
keypoints
.
Solución
¡Gracias por tus comentarios!
single
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Can you explain the difference between Harris and Shi-Tomasi corner detectors?
How do I choose between corner detection and blob detection for my application?
Can you provide more details on tuning the parameters for SimpleBlobDetector?
Awesome!
Completion rate improved to 3.45
Detección de Esquinas y Blobs
Desliza para mostrar el menú
Detección de esquinas
La detección de esquinas se utiliza para identificar cambios bruscos de intensidad donde se encuentran dos bordes. Es útil en la coincidencia de características, el seguimiento de objetos y el reconocimiento de estructuras.
Métodos populares:
- Detector de esquinas de Harris (
cv2.cornerHarris
): detecta esquinas basándose en los cambios de gradiente;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Convert to float32
gray = np.float32(gray)
# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None) # Improve visibility
# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Parámetros:
src
: imagen de entrada en escala de grises (debe serfloat32
);blockSize
: tamaño de la ventana local para calcular los gradientes;ksize
: tamaño de apertura del operador Sobel (impar, por ejemplo,3
,5
,7
);k
: parámetro libre del detector de Harris (valores típicos:0.04 - 0.06
).
- Detector de esquinas Shi-Tomasi (
cv2.goodFeaturesToTrack
): selecciona las esquinas más fuertes en una imagen;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)
# Draw detected corners in blue
for corner in corners:
x, y = np.int32(corner[0])
cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Parámetros:
image
: imagen de entrada en escala de grises;maxCorners
: número máximo de esquinas a detectar;qualityLevel
: calidad mínima de las esquinas detectadas (rango:0.01 - 0.1
);minDistance
: distancia mínima entre las esquinas detectadas.
Parámetros del método cv2.circle()
para resaltar objetos:
image
: la imagen sobre la que se dibujará el círculo;center_coordinates
: las coordenadas centrales del círculo, representadas como una tupla de dos valores: (X, Y);radius
: el radio del círculo;color
: el color del borde del círculo. En formato BGR, pasado como una tupla (por ejemplo,(255, 0, 0)
para azul);thickness
: el grosor del borde del círculo en píxeles. Un valor de-1
rellenará todo el círculo con el color especificado.
Detección de Blobs
La detección de blobs encuentra regiones de intensidad similar en una imagen, útil para la detección y seguimiento de objetos.
Uno de los métodos más populares para la detección de blobs es SimpleBlobDetector
cv2.SimpleBlobDetector
: detecta puntos clave que representan blobs según el tamaño, la forma y la intensidad.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()
# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001
# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)
# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Parámetros:
minThreshold
,maxThreshold
: rango de intensidad para la detección de blobs;filterByArea
: habilita el filtrado según el tamaño del blob;minArea
,maxArea
: especifica las restricciones de tamaño para los blobs detectados;
filterByCircularity
: habilita el filtrado según la redondez;minCircularity
: valores bajos detectan blobs alargados;
filterByConvexity
: habilita el filtrado según la convexidad;minConvexity
: valores bajos permiten formas cóncavas;
filterByInertia
: habilita el filtrado según la elongación;minInertiaRatio
: valores bajos detectan blobs alargados.
Swipe to start coding
Se proporcionan las imágenes de una fábrica (factory
) y de girasoles (sunflowers
):
- Convertir la imagen
factory
a escala de grises y almacenar en la variablegray_factory
; - Convertir la imagen
sunflowers
a escala de grises y almacenar en la variablegray_sunflowers
; - Es necesario convertir la matriz de la imagen a
float32
para el Detector de Harris, realizar la conversión y almacenar engray_float
; - Aplicar la detección de esquinas de Harris y almacenar en
harris_corners
(parámetros recomendados:blockSize=2, ksize=3, k=0.04
); - Utilizar
dilate()
para mejorar la visibilidad deharris_corners
; - Aplicar la detección de esquinas Shi-Tomasi a la imagen y almacenar en
shi_tomasi_corners
(parámetros recomendados:gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10
) - Crear un objeto
SimpleBlobDetector_Params
para inicializar los parámetros y almacenar enparams
; - Crear un detector de blobs con los parámetros especificados y almacenar en
detector
; - Detectar los puntos clave de los blobs y almacenar en
keypoints
.
Solución
¡Gracias por tus comentarios!
single