Question

Je sais que ce n'est pas très pertinent à la programmation, mais je dois savoir comment une matrice de convolution fonctionne pour une fonction de GD PHP. J'ai beaucoup cherché sur Google, mais ne trouve rien qui explique bien.

Était-ce utile?

La solution

Je suis entré dans une charge de la théorie derrière les filtres convolution ici:

Comment puis-je rendre une image floue gaussienne sans utiliser de gaussiennes en fonctions intégrées

Autres conseils

L'opération remplace chaque pixel par la moyenne pondérée des pixels qui l'entourent, où les poids sont donnés par la matrice. Voici une matrice de convolution exemple:

1 1 1
1 1 1
1 1 1

Qu'est-ce que cela fait est de remplacer chaque pixel avec la valeur moyenne du bloc 3x3 centrée sur ce pixel. Voici une autre:

0 0 0
0 1 0
0 0 0

Cette matrice ne fait rien, il vous donne l'arrière d'origine.

Les poids peuvent être trop négatif,. Cette matrice soustrait la valeur moyenne des pixels à côté d'un pixel:

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

matrices de convolution vous permettent de faire peaufiné le flou et les effets d'affûtage. Vous pouvez régler la directionnalité et la réponse en fréquence des filtres en utilisant une matrice de convolution, si elle est assez grande. Cependant, il est généralement utilisé pour le flou et la netteté rapide n-sale.

Je ne sais pas spécifiquement pour PHP, mais en général une matrice de convolution est utilisée pour mettre en œuvre certains types d'effets de traitement d'image.

Un exemple simple tiré du manuel PHP GD sur http: // www .php.net / manuel / fr / function.imageconvolution.php :

Disons que vous avez une matrice comme ceci:

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

Lorsque vous appliquez cette matrice de convolution à une image, puis pour chaque pixel situé en (x, y) dans l'image, le pixel correspondant dans la sortie devient:

$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 d'autres termes, la matrice de convolution est utilisé pour calculer chaque pixel de résultat sous la forme d'une combinaison linéaire de l'élément d'image source et les pixels qui l'entourent.

Le paramètre du diviseur est utilisé pour diviser l'ensemble de résultat par quelque chose (ce qui est généralement la somme de toutes les valeurs de la matrice) et le décalage est utilisé pour ajouter une constante à la valeur de sortie finale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top