pnmconvol
lit deux PNM en entrée, égalise le second en utilisant le premier et écrit un
PNM en sortie.
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.