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
- Cantidad: Leer el entero \(M\), correspondiente al número de ángulos estimados.
- Ángulos: Leer los \(M\) valores reales, en grados.
- Filtrado: Mantener únicamente los ángulos que satisfagan estrictamente \(-45 < \text{ángulo} < 45\).
- Ausencia de candidatos: Si ningún ángulo permanece tras el filtrado, imprimir exactamente
SEM_CORRECAO. - 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.
- 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_CORRECAOsi 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)\). |
%%writefile EP06_04.py
# Código PythonOverwriting 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.