Un filtre calcule un pixel avec ses voisins
Un filtre remplace chaque pixel par un nombre calculé avec les pixels qui l’entourent : le flou le plus simple prend leur moyenne.
Il calme le bruit, ces points parasites d’une page numérisée ou d’une photo prise de nuit, avant toute mesure. Sans lui, un seuil ou un comptage se trompe.
À la fin de cette leçon
Remarque
Je peux calmer le bruit d’une image avec un filtre et dire ce que le filtre change.
Mots clés
| Mot | Ce que ça veut dire |
|---|---|
| Bruit | des variations au hasard qui ne sont pas dans la scène |
| Filtre | une règle qui change chaque pixel selon ses voisins |
| Noyau | la petite grille de poids appliquée à chaque voisinage |
| Convolution | l’opération qui applique un noyau à toute l’image |
| Flou moyen | un filtre qui remplace un pixel par la moyenne de ses voisins |
| Filtre médian | un filtre qui prend la valeur du milieu des voisins |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un noyau 3 sur 3 pondère les voisins
Pour un pixel donné, on regarde le carré de 3 sur 3 pixels dont il est le centre : lui et ses huit voisins. Un noyau est une grille 3 sur 3 de poids.
On multiplie chaque pixel du carré par le poids qui lui correspond, puis on additionne. Pour le flou moyen, les neuf poids valent 1 et on divise la somme par 9.
Exemple travaillé : un point parasite et la moyenne
| Colonne 0 | Colonne 1 | Colonne 2 |
|---|---|---|
| 10 | 12 | 11 |
| 13 | 255 | 12 |
| 11 | 10 | 13 |
| Somme : 347 | Moyenne : 347 / 9 = 38,6 | Arrondi : 39 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Faire la moyenne des neuf pixels
# Un morceau de 3 lignes sur 3 colonnes, avec un point parasite au centre.
morceau = [
[10, 12, 11],
[13, 255, 12],
[11, 10, 13],
]
total = 0
for ligne in morceau:
for valeur in ligne:
total = total + valeur
print("somme :", total)
print("moyenne :", round(total / 9))
# Remplacez le 255 par 12, puis relancez.
# Que devient la moyenne quand le point parasite disparaît ?
Un flou calme le bruit d’une page numérisée
La page numérisée scan.png est parsemée de points parasites, comme une photocopie sale. Le script blur.py lui applique un flou gaussien, un flou qui donne plus de poids aux voisins proches.
Il mesure ensuite l’écart de valeurs d’un morceau vide de la page, sans écriture : moins il varie, moins il y a de bruit.
Flouter la page avec blur.py
docker exec jupyter python3 steps/blur.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une erreur fréquente
Attention
Beaucoup pensent qu’un flou ne fait que du bien. Il calme le bruit, mais il adoucit aussi les vrais bords : l’écriture de la page devient plus floue. Plus le noyau est grand, plus le bruit et les détails disparaissent ensemble.
Le filtre médian supprime les points isolés
Le filtre médian prend la valeur du milieu des voisins rangés du plus petit au plus grand. Un point isolé, très clair ou très sombre, finit au bout de la liste et n’est jamais choisi.
Avec 12, 255 et 11, la moyenne vaut 92,7 et la médiane 12. La médiane ignore le point parasite, la moyenne le subit.
Médiane contre moyenne de trois valeurs
docker exec jupyter python3 -c "import numpy as np; v=[10, 12, 255, 11, 13]; print(np.mean(v[1:4]), np.median(v[1:4]))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écart du morceau avant et après médian
docker exec jupyter python3 -c "import numpy as np; from PIL import Image; from scipy import ndimage; s=np.array(Image.open('images/scan.png'))[10:50, 10:90]; print(round(float(s.std()), 1), round(float(ndimage.median_filter(s, size=3).std()), 1))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Pour aller plus loin
Dans votre carnet, changez le 2 de GaussianBlur(2) en 5 et mesurez de nouveau l’écart du morceau vide. Puis ouvrez scan_blurred.png.
L’écart baisse-t-il encore ? Et l’écriture reste-t-elle lisible ? Dites en une phrase le prix d’un flou plus fort.