Comment une matrice de convolution fonctionne?
-
19-09-2019 - |
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.
La solution
Je suis entré dans une charge de la théorie derrière les filtres convolution ici:
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.
matrice de convolution travaille sur chaque canal du pixel de l'image de manière indépendante.
Donc, vous devez en apprendre davantage sur premier.
Ensuite, vous pouvez « jouer » avec cette matrice de manière interactive si vous avez un Photoshop: allez dans le menu Filters-> Autre-> Personnaliser. L'élément central de la matrice représente pixel courant, tous les autres représentent des pixels environnants. Et ne pas oublier la valeur « Scale » en bas.
Je pense, vous pouvez facilement comprendre la façon dont fonctionne cette matrice.
Vous pouvez jeter un oeil à cette chose . Il décrit la matrice de convolution ainsi.