Kernel
Una pequeña matriz numérica utilizada en operaciones de convolución. Los valores del kernel determinan el tipo de filtro - desenfoque, detección de bordes, nitidez o relieve.
Un kernel (también llamado kernel de filtro o matriz de convolución) es una pequeña matriz numérica utilizada en la convolución de imágenes. Con tamaños como 3×3, 5×5 o 7×7, cada valor define el peso aplicado a los píxeles circundantes. Cambiando solo los valores del kernel se pueden lograr efectos completamente diferentes - desenfoque, nitidez, detección de bordes, relieve.
Principios fundamentales de diseño de kernels:
- Normalización: Los kernels cuyos elementos suman 1 preservan el brillo de la imagen (filtros de desenfoque). Los kernels que suman 0 detectan bordes
- Simetría: Un kernel con simetría central no garantiza por sí solo un filtro isotrópico (independiente de la dirección)
- Tamaño: Los kernels más grandes afectan áreas más amplias pero aumentan el costo computacional
Ejemplos prácticos de kernels:
- Desenfoque gaussiano 3×3:
[[1,2,1],[2,4,2],[1,2,1]]normalizado por 1/16. Suavizado natural - Nitidez 3×3:
[[0,-1,0],[-1,5,-1],[0,-1,0]]. Enfatiza el píxel central para realzar bordes - Sobel 3×3 (horizontal):
[[-1,0,1],[-2,0,2],[-1,0,1]]. Detecta bordes verticales - Relieve 3×3:
[[-2,-1,0],[-1,1,1],[0,1,2]]. Crea un efecto de relieve elevado
En código, OpenCV aplica kernels personalizados mediante cv2.filter2D(img, -1, kernel). Define el kernel como un array NumPy y pásalo a la función.
En aprendizaje profundo, los valores del kernel no se diseñan manualmente sino que se aprenden automáticamente de los datos de entrenamiento. Cada capa CNN contiene decenas a cientos de kernels: las capas inferiores aprenden detectores de bordes y color, mientras que las superiores reconocen partes de objetos y conceptos semánticos.