Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Detección de Esquinas y Blobs | Procesamiento de Imágenes con OpenCV
Fundamentos de Visión por Computadora

bookDetecció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]
Note
Nota

Parámetros:

  • src: imagen de entrada en escala de grises (debe ser float32);
  • 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)
Note
Nota

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.
Note
Estudia Más

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)
Note
Nota

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.
Tarea

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 variable gray_factory;
  • Convertir la imagen sunflowers a escala de grises y almacenar en la variable gray_sunflowers;
  • Es necesario convertir la matriz de la imagen a float32 para el Detector de Harris, realizar la conversión y almacenar en gray_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 de harris_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 en params;
  • 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

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 8
single

single

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

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?

close

Awesome!

Completion rate improved to 3.45

bookDetecció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]
Note
Nota

Parámetros:

  • src: imagen de entrada en escala de grises (debe ser float32);
  • 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)
Note
Nota

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.
Note
Estudia Más

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)
Note
Nota

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.
Tarea

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 variable gray_factory;
  • Convertir la imagen sunflowers a escala de grises y almacenar en la variable gray_sunflowers;
  • Es necesario convertir la matriz de la imagen a float32 para el Detector de Harris, realizar la conversión y almacenar en gray_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 de harris_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 en params;
  • 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

Switch to desktopCambia al escritorio para practicar en el mundo realContinúe desde donde se encuentra utilizando una de las siguientes opciones
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 8
single

single

some-alt