TNI+VO · Exercice de Programmation

EP01_06 — 🎨 Conversion RGB → Niveaux de gris (ITU-R BT.601)

1.17.6 EP01_06 🎨 Conversion RGB → Niveaux de gris (ITU-R BT.601)

Dans cette activité, vous devez écrire un programme qui convertit des pixels colorés (RVB) en niveaux de gris en utilisant la pondération physiologique de la norme ITU-R BT.601.

  • Lisez deux entiers L et C, représentant le nombre de lignes et de colonnes.
  • Lisez L × C triplets d’entiers, où chaque triplet représente les canaux R (Rouge), G (Vert) et B (Bleu) d’un pixel.
  • Pour chaque pixel, calculez la valeur de gris (\(g\)) à l’aide de la formule :

\[g = \text{round}(0.299 \times R + 0.587 \times G + 0.114 \times B)\]

  • Affichez la matrice résultante (L lignes et C colonnes) contenant les valeurs entières converties.

📌 Important :

  • Utilisez la fonction round() de votre langage pour garantir l’arrondi correct à l’entier le plus proche.
  • La sortie doit contenir uniquement les valeurs de gris, en préservant la structure de la matrice (séparées par des espaces sur la ligne).
  • Consultez un simulateur interactif pour cette question sur la Figure 1.16 (ajustez les curseurs pour voir comment chaque couleur contribue à la luminosité finale).

1.17.6.1 🧠 Pourquoi ne pas utiliser simplement la moyenne ?

L’œil humain ne perçoit pas toutes les couleurs avec la même intensité. Nous sommes beaucoup plus sensibles au Vert qu’au Bleu en raison de notre évolution biologique. La norme ITU-R BT.601 utilise des poids spécifiques pour créer une image en niveaux de gris qui semble naturellement correcte pour notre vision :

Canal Poids Perception humaine
🟢 Vert 58,7 % Sensibilité maximale (distinction du feuillage).
🔴 Rouge 29,9 % Sensibilité moyenne.
🔵 Bleu 11,4 % Faible sensibilité (tons plus sombres).

1.17.6.2 📋 Tâche (spécification pour VPL)

Entrée :

La première ligne contient l’entier L.

La deuxième ligne contient l’entier C.

Les lignes suivantes contiennent des triplets d’entiers R G B pour chaque pixel.

Sortie :

La matrice des niveaux de gris avec L lignes et C colonnes.

1.17.6.3 📌 Exemples

Entrée Sortie Observation
1
3
255 0 0 0 255 0 0 0 255
76 150 29 Remarquez comment le Vert (150) est plus lumineux que le Bleu (29)
🎨 Simulateur EP01_06 : Perception des couleurs &Poids ITU-R BT.601 RGB → Niveaux de gris

Ajustez l'intensité des canaux Rouge (R), Vert (V) et Bleu (B) pour observer comment chaque composante contribue pondéralement à la valeur finale de luminance en niveaux de gris.

RÉGLAGE DES CANAUX DE COULEUR
80
180
30
RGB d'origine
Niveaux de gris
💡 Le canal Vert (V) possède le poids le plus élevé (0,587) en raison de la plus grande sensibilité spectrale du système visuel humain aux longueurs d'onde du vert.
Figure 1.16: Simulador EP01_06 : Conversion RVB en niveaux de gris (pondération perceptuelle UIT-R BT.601)
%%writefile EP01_06.cpp
// your solution
Overwriting EP01_06.cpp
TestSuite("EP01_06.cpp").run()
✔️ EP01_06.cases existe déjà dans casos/
📋 7 cas chargé(s) depuis casos/EP01_06.cases

🔍 Test de C++ : EP01_06.cpp
⚠️ EP01_06.cpp : fichier vide (moins de 3 lignes). Tests ignorés.