TNI+VO · Exercice de Programmation

EP02_01 — ☀️ Réglage de la luminosité et du contraste

2.12.1 EP02_01 ☀️ Réglage de la luminosité et du contraste

Dans cette activité, l’objectif est d’implémenter un opérateur ponctuel pour la transformation linéaire d’intensité, en appliquant le réglage dynamique de la luminosité et du contraste sur une image numérique.

2.12.1.1 📋 Directives d’implémentation

L’algorithme doit suivre le flux d’exécution ci-dessous :

  1. Dimensions : Lire les entiers \(L\) (lignes) et \(C\) (colonnes) de la matrice.
  2. Paramètres : Lire la valeur réelle \(\alpha\) (facteur de contraste) et l’entier \(\beta\) (facteur de luminosité).
  3. Données : Lire les valeurs entières de la matrice d’origine.
  4. Mappage : Pour chaque pixel \(p\), calculer la nouvelle valeur \(p'\) à l’aide de l’équation :

\[p' = \text{clip}(\text{round}(\alpha \cdot p + \beta))\]

  1. Sortie : Afficher la matrice résultante avec les dimensions \(L \times C\).

2.12.1.2 📌 Contraintes informatiques

  • Arrondi (Round) : On applique l’arrondi mathématique à l’entier le plus proche avant la conversion de type.
  • Saturation (Clipping) : Les valeurs doivent être confinées à l’intervalle \([0, 255]\) pour préserver le standard 8 bits :

\[\text{clip}(x) = \max(0, \min(255, x))\]

  • Simulation : L’effet des paramètres \(\alpha\) et \(\beta\) sur la correction histogrammique peut être observé dans la Figure 2.12.

2.12.1.3 🧠 Fondements théoriques

Les modifications altèrent l’histogramme de l’image pour ajuster le profil d’éclairage et la distinction tonale.

Paramètre Fonction Impact visuel
\(\alpha\) (Alpha) Scalaire Module le Contraste. Si \(\alpha > 1\), il étend l’histogramme ; si \(0 \le \alpha < 1\), il le compresse.
\(\beta\) (Beta) Additif Module la Luminosité. S’il est positif, il translate l’histogramme vers la droite ; s’il est négatif, vers la gauche.
\(\text{clip}\) Limiteur Restreint la plage dynamique, empêchant les erreurs de sous-dépassement et de dépassement.

2.12.1.4 📦 Spécification d’entrée et de sortie (VPL)

Entrée :

  • Ligne 1 : Entier \(L\).
  • Ligne 2 : Entier \(C\).
  • Ligne 3 : Valeurs de alpha (\(\alpha\)) et beta (\(\beta\)).
  • Lignes suivantes : Éléments numériques de la matrice d’origine.

Sortie :

  • Matrice transformée structurée en \(L\) lignes et \(C\) colonnes.

2.12.1.5 📌 Exemples

Le tableau suivant présente un exemple pratique du comportement attendu de l’algorithme, mettant en évidence l’action des opérateurs d’arrondi et de saturation.

Entrée Sortie Observation
1
4
1.5 -30
0 100 180 255
0 120 240 255 Notez l’effet de saturation sur le dernier pixel

Exécution des Tests

Pour évaluer les tests, exécutez TestSuite("EP02_01.extension").run() dans une nouvelle cellule, en remplaçant l’extension par celle du langage utilisé (.py, .java, .c, .cpp, .js ou .r). Le système télécharge les cas de test depuis GitHub, exécute le programme et calcule la note automatiquement.

☀️ Simulateur EP02_01 : Ajustement du Luminosité et Contraste Linéaire p' = clip(α·p + β)

Ajustez les paramètres de contraste (α) et de luminosité (β) pour appliquer la transformation ponctuelle d'intensité et observez l'écrêtage de saturation dans l'intervalle [0, 255].

1.0
0
Entrée Originale (p)
Résultat Transformé (p')
Formule appliquée : clip( round(1.0 · p + (0)) )
Figure 2.12: Simulateur EP02_01 : Ajustement de la Luminosité et du Contraste Linéaire (p’ = αp + β)