6.14.6 EP06_06 🔴 Carte de Variance Locale pour la Détection de Texture
Une usine de tissus doit inspecter des rouleaux de tissu en temps réel, sans disposer d’une image de référence — chaque rouleau présente de petites variations naturelles. Dans cette situation, la stratégie présentée dans le chapitre consiste à analyser l’homogénéité locale de la texture : les régions uniformes présentent une faible variance d’intensité dans de petits voisinages, tandis que les rayures, taches et défauts de fabrication produisent des augmentations locales de cette variance.
Dans cet exercice, vous implémenterez le cœur de cette méthode, en calculant la variance locale dans une fenêtre glissante et en générant un masque binaire qui identifie les régions dont la variance dépasse un seuil.
6.14.6.1 📋 Directives d’Implémentation
Dimensions et paramètres : Lire les entiers \(L\), \(C\), \(k\) (taille de la fenêtre, toujours impaire) et \(T\) (seuil de variance).
Image : Lire les \(L \times C\) valeurs entières de la matrice de texture (intensités entre 0 et 255).
Traitement des bords : Lorsque la fenêtre dépasse les limites de l’image, utiliser la réplication de bord, c’est-à-dire répéter la valeur du pixel valide le plus proche.
Moyenne locale : Pour chaque position \((i,j)\), calculer \[ \mu(i,j)= \frac{1}{k^2} \sum_{(p,q)\in\text{fenêtre}} \text{texture}(p,q). \]
Variance locale : Calculer la variance populationnelle de la fenêtre, \[ \sigma^2(i,j)= \frac{1}{k^2} \sum_{(p,q)\in\text{fenêtre}} \left(\text{texture}(p,q)-\mu(i,j)\right)^2, \] ou, de manière équivalente, \[ \sigma^2(i,j)=\overline{x^2}-\mu(i,j)^2, \] où \(\overline{x^2}\) représente la moyenne des carrés des intensités.
Arrondi : Arrondir la variance à l’entier le plus proche (round half away from zero, avec
np.floor(res_norm + 0.5)).Seuillage : Définir \(\text{masque}(i,j)=1\) si la variance arrondie est strictement supérieure à \(T\) ; sinon, définir \(\text{masque}(i,j)=0\).
Sortie : Imprimer le masque binaire résultant.
6.14.6.2 📌 Contraintes Computationnelles
- Réplication de bord : utiliser la valeur du pixel valide le plus proche chaque fois que la fenêtre dépasse les limites de l’image.
- Variance populationnelle : utiliser le dénominateur \(k^2\), jamais \(k^2-1\).
- Comparaison stricte : le masque doit être calculé en utilisant la condition \(\sigma^2_{\text{arrondi}}>T\).
- Fenêtre impaire : la valeur de \(k\) est toujours impaire, garantissant un pixel central.
6.14.6.3 🧠 Fondement Théorique
| Situation | Variance locale | Interprétation |
|---|---|---|
| Région uniforme | Faible | Intensités similaires dans le voisinage. |
| Région contenant un défaut | Élevée | La présence d’intensités distinctes augmente la dispersion des valeurs. |
| Petite fenêtre | Plus grande sensibilité aux détails et au bruit | Détecte les altérations localisées. |
| Grande fenêtre | Réponse plus lisse | Met en évidence les défauts plus grands, mais réduit la précision de leur localisation. |
La variance locale mesure la dispersion des intensités dans un voisinage. Les régions homogènes présentent une faible variance, tandis que les altérations de la texture augmentent cette mesure, permettant d’identifier d’éventuels défauts par un simple seuillage.
6.14.6.4 📦 Spécification d’Entrée et de Sortie (VPL)
Entrée :
- Ligne 1 : Entier \(L\).
- Ligne 2 : Entier \(C\).
- Ligne 3 : Entier \(k\) (impair).
- Ligne 4 : Entier \(T\).
- Lignes suivantes \(L\) : éléments entiers de la matrice de texture.
Sortie :
- Masque binaire (valeurs 0 ou 1), avec \(L\) lignes et \(C\) colonnes.
6.14.6.5 📌 Exemples
| Entrée | Sortie | Observation |
|---|---|---|
| 3 3 3 50 10 10 10 10 10 10 10 90 10 |
0 0 0 1 1 1 1 1 1 |
Le défaut augmente la variance dans toutes les fenêtres qui le contiennent. |
| 2 2 3 5 100 100 100 100 |
0 0 0 0 |
La texture est uniforme ; la variance est nulle sur toute l’image. |
%%writefile EP06_06.py
# Code PythonOverwriting EP06_06.py
TestSuite("EP06_06.py").run()✔️ EP06_06.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP06_06.cases
🔍 Test de Python : EP06_06.py
⚠️ EP06_06.py : fichier vide (moins de 3 lignes). Tests ignorés.