Ver índice
Filtros de convolución

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


Filtros de convolución

Una imagen digital no es otra cosa que una especie de hoja de papel cuadriculado en el que cada una de las cuadrículas tiene asignado un color concreto especificado por medio de su código de color tal como hemos visto en la página anterior. Cada uno de esos elementos que hemos llamado cuadrículas es un pixel.

Una matriz de convolución no es otra cosa que una matriz cuadrada formada por nueve cuadrículas (matriz de dimensión 3 x 3) que contiene valores numéricos enteros.

Aplicar un filtro de convolución no es otra que superponer simbólicamente la matriz de convolución sobre la cuadrícula que conforma la imagen (El area sombreada de amarillo en la imagen sería delimitaría sobre ella la zona de superposición). El proceso aritmético de aplicación del filtro consistiría en multiplicar el valor de cada cuadrícula de la matriz de convolución por el situado debajo suyo en esa superposición imaginaria. Los resultados de todos esos productos se sumarían obteniendo un valor que sustituiría al valor del pixel central del area marcada (en rojo en la imagen).

El valor anterior puede ser corregido por medio de un factor multiplicador del resultado y también por medio un parámetro de desplazamiento (offset) que permitiría incrementar (o reducir, ya que admite valores negativos) en un valor entero el resultado anterior.

En este esquema tienes el proceso de cálculo del nuevo valor para el pixel central que es el marcado con fondo rojo.

La convolución en PHP

Para aplicar este filtro en PHP es necesario empezar creando una matriz de convolución. Dado que esa matriz ha de ser obligatoriamente de 3 x 3 la matriz de convolución puede definirse de alguna de estas formas:

$matriz_de_convolución = array(array(a11,a12,a13), array(a21,a22,a23), array(a31,a32,a33))

o también definiendo independientemente cada fila:

$fila1 = array(a11,a12,a13)
$fila2 = array(a21,a22,a23)
$fila3 = array(a31,a32,a33)

y formando luego la matriz con las tres filas. Es decir:

$matriz_de_convolución = array($fila1, $fila2,$fila3)

Una vez disponemos de la matriz de convolución podremos utilizar la función:

imageconvolution ( $imagen , $matriz_de_convolución, multiplicador, desplazamiento)

o, si preferimos definir la matriz de convolución en la propia llamada a la función, escribiendo:

imageconvolution ( $imagen , array(array(a11,a12,a13), array(a21,a22,a23), array(a31,a32,a33)), multiplicador, desplazamiento)

Dónde $imagen es el identificador de imagen, matriz_de_convolucion es el array ya comentado, multiplicador será el factor multiplicador del resultado de la convolución y desplazamiento un valor entero que se sumaría a los resultados anteriores. El resultado sería la nueva imagen modificada después de haber aplicado la matriz de convolución a cada uno de los pixels que la conforman.

Dado que los resultados no son facilmente predecibles hemos incluido simulador que te permitirá ir modificando valores y observar los efectos producidos por esos cambios.

Imagen original Imagen transformada Código fuente de la imagen
Si modificas las opciones de la parte inferior podrás visualizar aquí el código fuente de los scripts que transforman la imagen original de acuerdo con los parámetros elegidos para cada opción
Matriz de convolución
Divisor:
Desplazamiento:

A modo de ejemplo, desde estos enlaces podrás visualizar los efectos indicados y a la vez las matrices de convolución utilizadas.

Sin convolución      Enfocar      Desenfocar      Repujado