Content-type: text/html
La convolution consiste à remplacer chaque pixel par la moyenne des pixels qui l'entourent. La puissance de la convolution et l'aire à égaliser sont déterminées par une matrice de convolution. Les nombres non signés dans le fichier de convolution sont décalés de -maxval/2 pour les transformer en nombres signés et sont alors normalisés, donc les vraies valeurs du fichier de convolution sont seulement relatifs.
Voici un exemple de fichier de convolution ; il fait une égalisation des neuf voisins immédiats, donnant une image lissée :
P2 3 3 18 10 10 10 10 10 10 10 10 10
Pour voir comment cela fonctionne, faites le calcul suivant : 10 - 18/2 donne 1. L'intervalle des valeurs possibles est de 0 à 18, et après le décalage de -9 à 9. L'étape de normalisation donne un intervalle de -1 à 1, et les valeurs sont échelonnées de façon correspondante et deviennent 1/9 - exactement ce que vous voulez. La matrice pour un lissage de 5x5 pixels devrait avoir au maximum 50 couleurs ; 26 seront utilisées.
Le fichier de convolution sera souvent une image en échelle de gris, et donc la même convolution sera appliquée à chaque couleur. Sinon, si vous voulez utilisez une image en couleur et faire des convolutions pour différentes couleurs, c'est tout de même possible.
Au coin de l'image égalisée, où la matrice de convolution devrait s'étendre après le coin, pnmconvol copie directement les pixels en entrée vers la sortie.