PDI+VC · Exercício de Programação

EP01_06 — 🎨 Conversão RGB → Tons de Cinza (ITU-R BT.601)

1.17.6 EP01_06 🎨 Conversão RGB → Tons de Cinza (ITU-R BT.601)

Nesta atividade, você deve escrever um programa que converta pixels coloridos (RGB) para tons de cinza utilizando a ponderação fisiológica do padrão ITU-R BT.601.

  • Leia dois inteiros L e C, representando o número de linhas e colunas.
  • Leia L × C triplas de inteiros, onde cada tripla representa os canais R (Red), G (Green) e B (Blue) de um pixel.
  • Para cada pixel, calcule o valor de cinza (\(g\)) usando a fórmula:

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

  • Imprima a matriz resultante (L linhas e C colunas) contendo os valores inteiros convertidos.

📌 Importante:

  • Utilize a função round() da sua linguagem para garantir o arredondamento correto para o inteiro mais próximo.
  • A saída deve conter apenas os valores de cinza, mantendo a estrutura de matriz (separados por espaço na linha).
  • Ver um simulador interativo para esta questão na Figura 1.16 (ajuste os sliders para ver como cada cor contribui para o brilho final).

1.17.6.1 🧠 Por que não usar apenas a média?

O olho humano não percebe todas as cores com a mesma intensidade. Somos muito mais sensíveis ao Verde do que ao Azul devido à nossa evolução biológica. O padrão ITU-R BT.601 utiliza pesos específicos para criar uma imagem em cinza que pareça naturalmente correta para nossa visão:

Canal Peso Percepção Humana
🟢 Verde 58.7% Máxima sensibilidade (distinção de folhagens).
🔴 Vermelho 29.9% Sensibilidade média.
🔵 Azul 11.4% Baixa sensibilidade (tons mais escuros).

1.17.6.2 📋 Tarefa (especificação para VPL)

Entrada:

A primeira linha contém o inteiro L.

A segunda linha contém o inteiro C.

As linhas seguintes contêm triplas de inteiros R G B para cada pixel.

Saída:

A matriz de cinzas com L linhas e C colunas.

1.17.6.3 📌 Exemplos

Entrada Saída Observação
1
3
255 0 0 0 255 0 0 0 255
76 150 29 Note como o Verde (150) é mais brilhante que o Azul (29)
🎨 Simulador EP01_06: Percepção de Cor & Pesos ITU-R BT.601 RGB → Grayscale

Ajuste a intensidade dos canais Vermelho (R), Verde (G) e Azul (B) para observar como cada componente contribui ponderadamente para o valor final de luminância em níveis de cinza.

AJUSTE DOS CANAIS DE COR
80
180
30
Original RGB
Tons de Cinza
💡 O canal Verde (G) possui o maior peso (0.587) devido à maior sensibilidade espectral do sistema visual humano aos comprimentos de onda do verde.
Figura 1.16: Simulador EP01_06: Conversão RGB para Grayscale (Ponderação Perceptual ITU-R BT.601)
%%writefile EP01_06.py
# sua solução
Writing EP01_06.py
TestSuite("EP01_06.py").run()
✔️ EP01_06.cases já existe em casos/
📋 7 caso(s) carregado(s) de casos/EP01_06.cases

🔍 Testando Python: EP01_06.py
⚠️ EP01_06.py: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.