es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo mejorar el resultado de la coincidencia de plantillas?

Me gustaría detectar envases de jugo de un determinado tipo en un estante de la tienda.

Ejemplo de imagen del estante:
Introducir una descripción de la imagen aquí

Ejemplo de imagen de una caja:
Introducir una descripción de la imagen aquí

Mi enfoque de código hasta ahora:

import numpy as np
import cv2
import json
from skimage.measure import label
import sys
import matplotlib.pyplot as plt
from PIL import Image

def retornar_cajas(img, template):
    w, h = template.shape[::-1]
    res_img = np.int16(img.copy())

    img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    match = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)

    loc = np.where(match >= 0.4)
    lbl, n = label(match >= 0.4, connectivity=2, return_num=True)

    lbl = np.int16([np.round(np.mean(np.argwhere(lbl == i), axis=0)) for i in range(1, n + 1)])

    centers = [[pt[0]+w//2, pt[1]+h//2] for pt in lbl]

    for pt in zip(*loc[::-1]):
        cv2.rectangle(res_img, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)

    return res_img, centers

def color(img):
    return cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)

def gray(img):
    return cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

def predecir_imagen(img, consulta):
    template = gray(consulta)
    res_img, centros = retornar_cajas(img, template)
    return res_img, centros

Y el resultado

Introducir una descripción de la imagen aquí

está lejos de ser preciso. ¿Cómo puedo mejorarlo? Obviamente puedo cambiar el umbral o redimensionar la imagen/la plantilla, pero no parece ser universal y robusto. ¿Existen formas de mejorar esta coincidencia para diferentes estantes y cajas? Tal vez algún preprocesamiento de la imagen.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Un enfoque para mejorar la coincidencia de estantes y cajas diferentes es preprocesar la imagen para realzar las características que se pueden usar para la coincidencia de plantillas. Esto puede incluir métodos como:

    1. Segmentación de imagen: La segmentación de la imagen en regiones más pequeñas basadas en color, textura u otras propiedades puede ayudar a aislar las cajas de jugo y reducir el área de búsqueda para la coincidencia de plantillas.
    2. Detección de bordes: Detectar los bordes de las cajas puede ayudar a realzar las características que se pueden usar para la coincidencia. Esto se puede hacer utilizando algoritmos como el detector de bordes Canny.

    3. Ecualización del histograma: Igualar el histograma de la imagen puede ayudar a mejorar el contraste y hacer que las características sean más distinguibles.

    4. Extracción de características: Extraer características como SIFT, SURF o ORB puede ayudar a identificar las cajas incluso si están parcialmente ocultas o rotadas.

    5. Aprendizaje profundo: Entrenar una red neuronal para detectar las cajas de jugo puede ser una solución más robusta y escalable, especialmente si las imágenes son diversas y hay múltiples tipos de cajas que detectar.

    Al combinar estos métodos y experimentar con diferentes parámetros, se puede mejorar la precisión y la robustez del algoritmo de coincidencia de plantillas para detectar las cajas de jugo en los estantes de la tienda.

Comments are closed.