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. Típicamente de tamaño 3×3, 5×5 o 7×7 (dimensiones impares), 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: Los kernels con simetría central producen filtros isotrópicos (independientes de la dirección)
- Tamaño: Los kernels más grandes afectan áreas más amplias pero aumentan el costo computacional cuadráticamente
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 - crear filtros personalizados no requiere bibliotecas especializadas más allá del álgebra lineal básica.
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.