Pregunta

Sé que esto no es muy relevante para la programación, pero necesito saber cómo funciona una matriz de convolución de una función PHP GD. He buscado mucho en Google, pero no puedo encontrar nada que lo explica muy bien.

¿Fue útil?

Solución

entré en una carga de la teoría detrás de los filtros de convolución aquí:

¿Cómo gaussiano una imagen sin necesidad de utilizar cualquiera de las funciones gaussianas incorporado?

Otros consejos

La operación reemplaza cada píxel con la media ponderada de los píxeles alrededor de ella, donde los pesos se dan en la matriz. Aquí está una matriz de convolución ejemplo:

1 1 1
1 1 1
1 1 1

Lo que esto hace es reemplazar cada píxel con el valor medio del bloque de 3x3 centrada en ese píxel. Aquí hay otro:

0 0 0
0 1 0
0 0 0

Esta matriz no hace nada, se le da la vuelta inicial.

Los pesos pueden ser negativos, también. Esta matriz resta el valor medio de los píxeles al lado de un pixel:

 0 -1  0
-1  4 -1
 0 -1  0

matrices de convolución le permiten hacer afinarse distorsión y efectos de enfoque. Se puede sintonizar la direccionalidad y la respuesta en frecuencia de los filtros que utilizan una matriz de convolución, si es lo suficientemente grande. Sin embargo, se utiliza generalmente para rápida-n-sucia difuminación y afilado.

No sé específicamente para PHP, pero en general una matriz de convolución se utiliza para implementar ciertos tipos de efectos de procesamiento de imágenes.

Un ejemplo sencillo tomado del manual de PHP en GD http: // www .php.net / manual / es / function.imageconvolution.php :

Supongamos que tiene una matriz como la siguiente:

$M = array(array( 2,  0,  0),
           array( 0, -1,  0),
           array( 0,  0, -1));

Cuando se aplica que la matriz de convolución de una imagen, a continuación, para cada píxel situado en (x, y) en la imagen, el píxel correspondiente en la salida se convierte en:

$I = $in_image;
$out_image[x,y] = $I[x-1,y-1]*$M[0][0] + $I[x,y-1]*$M[0][1] + $I[x+1,y-1]*$M[0][2]
                + $I[x-1,y]  *$M[1][0] + $I[x,y]  *$M[1][1] + $I[x+1,y]  *$M[1][2]
                + $I[x-1,y+1]*$M[2][0] + $I[x,y+1]*$M[2][1] + $I[x+1,y+1]*$M[2][2];

En otras palabras, la matriz de convolución se usa para calcular cada píxel resultado como una combinación lineal de los píxel de origen y los píxeles que lo rodean.

El parámetro divisor se utiliza para dividir todo el resultado por algo (esto es generalmente la suma de todos los valores en la matriz) y el desplazamiento se usa para añadir un término constante para el valor de salida final.

matriz de convolución funciona en cada canal del píxel de la imagen de forma independiente.
Así que hay que aprender sobre canales primero.
A continuación, se puede "jugar" con esta matriz interactiva si tiene un Photoshop: ir al menú Filters-> Otros-> Personalizado. El elemento central de la matriz representa píxel actual, todos los demás representan píxeles circundantes. Y no se olvide sobre el valor "Escala" en la parte inferior.
Creo, que puede comprender la forma en que funciona esta matriz.
Puede echar un vistazo a esta cosa aquí . Se describe la matriz de convolución así.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top