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

EP02_01 — ☀️ Ajuste de Brilho e Contraste

2.12.1 EP02_01 ☀️ Ajuste de Brilho e Contraste

Nesta atividade, o objetivo é implementar um operador de ponto para transformação linear de intensidade, aplicando o ajuste dinâmico de brilho e contraste em uma imagem digital.

2.12.1.1 📋 Diretrizes de Implementação

O algoritmo deve seguir o fluxo de execução abaixo:

  1. Dimensões: Ler os inteiros \(L\) (linhas) e \(C\) (colunas) da matriz.
  2. Parâmetros: Ler o valor real \(\alpha\) (fator de contraste) e o inteiro \(\beta\) (fator de brilho).
  3. Dados: Ler os valores inteiros da matriz original.
  4. Mapeamento: Para cada pixel \(p\), calcular o novo valor \(p'\) pela equação:

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

  1. Saída: Exibir a matriz resultante com as dimensões \(L \times C\).

2.12.1.2 📌 Restrições Computacionais

  • Arredondamento (Round): Aplica-se o arredondamento matemático para o inteiro mais próximo antes da conversão de tipo.
  • Saturação (Clipping): Os valores devem ser confinados ao intervalo \([0, 255]\) para preservar o padrão de 8 bits:

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

  • Simulação: O efeito dos parâmetros \(\alpha\) e \(\beta\) na correção histogramática pode ser observado na Figura 2.12.

2.12.1.3 🧠 Fundamentação Teórica

As alterações modificam o histograma da imagem para ajustar o perfil de iluminação e a distinção tonal.

Parâmetro Função Impacto Visual
\(\alpha\) (Alpha) Escalar Modula o Contraste. Se \(\alpha > 1\), expande o histograma; se \(0 \le \alpha < 1\), comprime.
\(\beta\) (Beta) Aditiva Modula o Brilho. Se positivo, translada o histograma para a direita; se negativo, para a esquerda.
\(\text{clip}\) Limitador Restringe a faixa dinâmica, impedindo erros de underflow e overflow.

2.12.1.4 📦 Especificação de Entrada e Saída (VPL)

Entrada:

  • Linha 1: Inteiro \(L\).
  • Linha 2: Inteiro \(C\).
  • Linha 3: Valores de alpha (\(\alpha\)) e beta (\(\beta\)).
  • Linhas seguintes: Elementos numéricos da matriz original.

Saída:

  • Matriz transformada estruturada em \(L\) linhas e \(C\) colunas.

2.12.1.5 📌 Exemplos

A tabela a seguir apresenta um exemplo prático do comportamento esperado do algoritmo, destacando a atuação dos operadores de arredondamento e saturação.

Entrada Saída Observação
1
4
1.5 -30
0 100 180 255
0 120 240 255 Note o efeito de saturação no último pixel

Executando os Testes

Para avaliar os testes, execute TestSuite("EP02_01.extensão").run() numa nova célula, trocando a extensão pela da linguagem usada (.py, .java, .c, .cpp, .js ou .r). O sistema baixa os casos de teste do GitHub, executa o programa e calcula a nota automaticamente.

☀️ Simulador EP02_01: Ajuste de Brilho e Contraste Linear p' = clip(α·p + β)

Ajuste os parâmetros de contraste (α) e brilho (β) para aplicar a transformação pontual de intensidade e observe o truncamento de saturação no intervalo [0, 255].

1.0
0
Entrada Original (p)
Resultado Transformado (p')
Fórmula aplicada: clip( round(1.0 · p + (0)) )
Figura 2.12: Simulador EP02_01: Ajuste de Brilho e Contraste Linear (p’ = αp + β)