PDI+VC · Ejercicio de Programación

EP06_04 — 🟡 Estimador de Inclinación por Mediana Angular ( Deskew )

6.14.4 EP06_04 🟡 Estimador de Inclinación por Mediana Angular (Deskew)

Tras la detección de bordes y la aplicación de la Transformada de Hough, se obtiene un conjunto de rectas candidatas a la orientación predominante del documento. Cada recta proporciona una estimación del ángulo de inclinación, calculada por

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

Sin embargo, no todas las rectas corresponden a las líneas del documento: algunas resultan de ruidos, sombras u otros elementos de la imagen. En este ejercicio, implementará la etapa de estimación robusta del ángulo de inclinación, filtrando los valores plausibles y calculando su mediana.

6.14.4.1 📋 Directrices de Implementación

  1. Cantidad: Leer el entero \(M\), correspondiente al número de ángulos estimados.
  2. Ángulos: Leer los \(M\) valores reales, en grados.
  3. Filtrado: Mantener únicamente los ángulos que satisfagan estrictamente \(-45 < \text{ángulo} < 45\).
  4. Ausencia de candidatos: Si ningún ángulo permanece tras el filtrado, imprimir exactamente SEM_CORRECAO.
  5. Mediana: Si existen ángulos válidos:
    • si la cantidad es impar, la mediana es el elemento central de la secuencia ordenada;
    • si es par, la mediana es la media aritmética de los dos elementos centrales.
  6. Salida: Imprimir la mediana redondeada a dos cifras decimales (redondeo estándar, round half away from zero, con np.floor(img + 0.5)).

6.14.4.2 📌 Restricciones Computacionales

  • Intervalo abierto: los ángulos iguales a \(-45\) o \(45\) no deben considerarse.
  • Precisión: calcular la mediana utilizando los valores originales; el redondeo debe realizarse únicamente en la salida.
  • Caso vacío: si no hay ángulos válidos, no debe calcularse ninguna mediana.

6.14.4.3 🧠 Fundamentación Teórica

Situación Resultado
Mayoría de los ángulos concentrados en torno a la inclinación real La mediana aproxima la orientación del documento.
Pocos ángulos discrepantes (outliers) La mediana sufre poca influencia de esos valores.
Ángulos fuera del intervalo \((-45^\circ,45^\circ)\) Se descartan antes del cálculo.
Ningún ángulo válido No se aplica corrección (SEM_CORRECAO).

La mediana se utiliza por ser más robusta que la media en presencia de pocos valores discrepantes, produciendo una estimación más estable de la inclinación predominante del documento.

6.14.4.4 📦 Especificación de Entrada y Salida (VPL)

Entrada:

  • Línea 1: Entero \(M\).
  • Línea 2: \(M\) números reales, correspondientes a los ángulos en grados.

Salida:

  • Una única línea que contenga el ángulo estimado, con dos cifras decimales, o la palabra SEM_CORRECAO si ningún ángulo es válido.

6.14.4.5 📌 Ejemplos

Entrada Salida Observación
5
-50 -10.5 2.3 2.3 47
2.30 Solo se consideran los ángulos en el intervalo \((-45,45)\); la mediana es \(2{,}3\).
4
-46 50 45 -45
SEM_CORRECAO Ningún ángulo pertenece al intervalo abierto \((-45,45)\).
🎮 Simulador EP06_04: Estimador de Inclinación por Mediana Angular (Deskew) mediana(-45° < θ < 45°)
Arrastra el ángulo del ruido extra hacia dentro o fuera del intervalo [-45°, +45°] y observa cómo la mediana permanece estable.
Muestras de Ángulos (Verde = Dentro del Rango, Rojo = Ruido Descartado)
–
Figura 6.24: Simulador EP06_04: Estimador de Pendiente por Mediana Angular
%%writefile EP06_04.py
# Código Python
Overwriting EP06_04.py
TestSuite("EP06_04.py").run()
✔️ EP06_04.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP06_04.cases

🔍 Probando Python: EP06_04.py
⚠️ EP06_04.py: archivo vacío (menos de 3 líneas). Pruebas omitidas.