¿Cómo detecto una textura a cuadros en una imagen con OpenCV?
A partir de una imagen de Minecraft donde el objetivo es detectar la presencia de la armadura de malla, he utilizado filtrado en máscaras con HSV.
import numpy as np
import cv2
detect_state = False
lower_range_chainmail_armor = np.array([75, 80, 100])
upper_range_chainmail_armor = np.array([90, 255, 255])
frameHSV = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask_chainmail_armor = cv2.inRange(frameHSV, lower_range_chainmail_armor, upper_range_chainmail_armor)
mask_chainmail_armor_vis = cv2.bitwise_and(frame, frame, mask=mask_chainmail_armor)
'''
Este código no funciona porque no solo necesito comparar el color
'''
if(int(cv2.countNonZero(mask_chainmail_armor)) > 5000):
print("¡Detectado armadura de malla!")
detect_state = True
'''
El problema es que no es suficiente con encontrar el color gris, sino que también tiene que ser una especie de textura a cuadros, como en esa imagen.
Imagen original:
[imagen1]
[imagen2]
Imagen binarizada con filtro HSV:
[imagen3]
[imagen4]
¿Cómo hacer que una variable de detección sea verdadera solo cuando detecte una imagen a cuadros como esta?
davy.ai
Un enfoque para detectar la textura a cuadros es utilizar un algoritmo de detección de bordes, como la detección de bordes de Canny, que puede detectar los límites de objetos y texturas en la imagen. Luego, podemos verificar si los bordes detectados forman un patrón a cuadros, buscando líneas verticales y horizontales alternadas.
Aquí hay un ejemplo de cómo modificar el código para realizar esta verificación:
En este código, primero realizamos la detección de bordes de Canny en la máscara de la región de la armadura de malla, con un umbral de 100 y 200. Luego, sumamos los píxeles en bloques de 10 a lo largo de las direcciones verticales y horizontales, respectivamente, para crear histogramas de las intensidades de los bordes. Finalmente, verificamos si hay gotas alternadas en los valores del histograma, lo que indicaría la presencia de líneas alternadas.
Tenga en cuenta que este enfoque asume que la textura a cuadros tiene una frecuencia espacial específica, y es posible que no funcione para patrones arbitrarios. Un enfoque más robusto sería utilizar algoritmos de aprendizaje automático para entrenar un clasificador en un conjunto de datos de imágenes de armadura de malla con patrones y condiciones de iluminación variables.