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

EP06_04 — 🟡 Estimador de Inclinação por Mediana Angular ( Deskew )

6.14.4 EP06_04 🟡 Estimador de Inclinação por Mediana Angular (Deskew)

Após a detecção de bordas e a aplicação da Transformada de Hough, obtém-se um conjunto de retas candidatas à orientação predominante do documento. Cada reta fornece uma estimativa do ângulo de inclinação, calculada por

\[ \text{ângulo} = \operatorname{rad2deg}(\theta) - 90. \]

Entretanto, nem todas as retas correspondem às linhas do documento: algumas resultam de ruídos, sombras ou outros elementos da imagem. Neste exercício, você implementará a etapa de estimação robusta do ângulo de inclinação, filtrando os valores plausíveis e calculando sua mediana.

6.14.4.1 📋 Diretrizes de Implementação

  1. Quantidade: Ler o inteiro \(M\), correspondente ao número de ângulos estimados.
  2. Ângulos: Ler os \(M\) valores reais, em graus.
  3. Filtragem: Manter apenas os ângulos que satisfaçam estritamente \(-45 < \text{ângulo} < 45\).
  4. Ausência de candidatos: Se nenhum ângulo permanecer após a filtragem, imprimir exatamente SEM_CORRECAO.
  5. Mediana: Caso existam ângulos válidos:
    • se a quantidade for ímpar, a mediana é o elemento central da sequência ordenada;
    • se for par, a mediana é a média aritmética dos dois elementos centrais.
  6. Saída: Imprimir a mediana arredondada para duas casas decimais (arredondamento padrão, round half away from zero, , com np.floor(img + 0.5)).

6.14.4.2 📌 Restrições Computacionais

  • Intervalo aberto: ângulos iguais a \(-45\) ou \(45\) não devem ser considerados.
  • Precisão: calcular a mediana utilizando os valores originais; o arredondamento deve ser realizado apenas na saída.
  • Caso vazio: se não houver ângulos válidos, nenhuma mediana deve ser calculada.

6.14.4.3 🧠 Fundamentação Teórica

Situação Resultado
Maioria dos ângulos concentrada em torno da inclinação real A mediana aproxima a orientação do documento.
Poucos ângulos discrepantes (outliers) A mediana sofre pouca influência desses valores.
Ângulos fora do intervalo \((-45^\circ,45^\circ)\) São descartados antes do cálculo.
Nenhum ângulo válido Não é aplicada correção (SEM_CORRECAO).

A mediana é utilizada por ser mais robusta que a média na presença de poucos valores discrepantes, produzindo uma estimativa mais estável da inclinação predominante do documento.

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

Entrada:

  • Linha 1: Inteiro \(M\).
  • Linha 2: \(M\) números reais, correspondentes aos ângulos em graus.

Saída:

  • Uma única linha contendo o ângulo estimado, com duas casas decimais, ou a palavra SEM_CORRECAO caso nenhum ângulo seja válido.

6.14.4.5 📌 Exemplos

Entrada Saída Observação
5
-50 -10.5 2.3 2.3 47
2.30 Apenas os ângulos no intervalo \((-45,45)\) são considerados; a mediana é \(2{,}3\).
4
-46 50 45 -45
SEM_CORRECAO Nenhum ângulo pertence ao intervalo aberto \((-45,45)\).
🎮 Simulador EP06_04: Estimador de Inclinação por Mediana Angular (Deskew) mediana(-45° < θ < 45°)
Arraste o ângulo do ruído extra para dentro ou fora do intervalo [-45°, +45°] e veja como a mediana permanece estável.
Amostras de Ângulos (Verde = Dentro da Faixa, Vermelho = Ruído Descartado)
–
Figura 6.24: Simulador EP06_04: Estimador de Inclinação por Mediana Angular
%%writefile EP06_04.py
# Código Python
Writing EP06_04.py
TestSuite("EP06_04.py").run()
✔️ EP06_04.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP06_04.cases

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