EDI+VA · Esercizio di Programmazione

EP06_04 — 🟡 Stimatore dell’Inclinazione tramite Mediana Angolare ( Deskew )

6.14.4 EP06_04 🟡 Stimatore dell’Inclinazione tramite Mediana Angolare (Deskew)

Dopo il rilevamento dei bordi e l’applicazione della Trasformata di Hough, si ottiene un insieme di rette candidate all’orientamento predominante del documento. Ogni retta fornisce una stima dell’angolo di inclinazione, calcolata come

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

Tuttavia, non tutte le rette corrispondono alle righe del documento: alcune derivano da rumori, ombre o altri elementi dell’immagine. In questo esercizio, implementerai la fase di stima robusta dell’angolo di inclinazione, filtrando i valori plausibili e calcolandone la mediana.

6.14.4.1 📋 Linee Guida di Implementazione

  1. Quantità: Leggere l’intero \(M\), corrispondente al numero di angoli stimati.
  2. Angoli: Leggere gli \(M\) valori reali, in gradi.
  3. Filtraggio: Mantenere solo gli angoli che soddisfano strettamente \(-45 < \text{angolo} < 45\).
  4. Assenza di candidati: Se nessun angolo rimane dopo il filtraggio, stampare esattamente SEM_CORRECAO.
  5. Mediana: Nel caso in cui esistano angoli validi:
    • se la quantità è dispari, la mediana è l’elemento centrale della sequenza ordinata;
    • se è pari, la mediana è la media aritmetica dei due elementi centrali.
  6. Uscita: Stampare la mediana arrotondata a due cifre decimali (arrotondamento standard, round half away from zero, con np.floor(img + 0.5)).

6.14.4.2 📌 Vincoli Computazionali

  • Intervallo aperto: angoli uguali a \(-45\) o \(45\) non devono essere considerati.
  • Precisione: calcolare la mediana utilizzando i valori originali; l’arrotondamento deve essere effettuato solo in uscita.
  • Caso vuoto: se non ci sono angoli validi, non deve essere calcolata alcuna mediana.

6.14.4.3 🧠 Fondamenti Teorici

Situazione Risultato
Maggior parte degli angoli concentrata attorno all’inclinazione reale La mediana approssima l’orientamento del documento.
Pochi angoli discordanti (outliers) La mediana subisce poca influenza da questi valori.
Angoli al di fuori dell’intervallo \((-45^\circ,45^\circ)\) Vengono scartati prima del calcolo.
Nessun angolo valido Non viene applicata alcuna correzione (SEM_CORRECAO).

La mediana viene utilizzata perché è più robusta della media in presenza di pochi valori discordanti, producendo una stima più stabile dell’inclinazione predominante del documento.

6.14.4.4 📦 Specifica di Ingresso e Uscita (VPL)

Ingresso:

  • Riga 1: Intero \(M\).
  • Riga 2: \(M\) numeri reali, corrispondenti agli angoli in gradi.

Uscita:

  • Una singola riga contenente l’angolo stimato, con due cifre decimali, oppure la parola SEM_CORRECAO se nessun angolo è valido.

6.14.4.5 📌 Esempi

Ingresso Uscita Osservazione
5
-50 -10.5 2.3 2.3 47
2.30 Solo gli angoli nell’intervallo \((-45,45)\) sono considerati; la mediana è \(2{,}3\).
4
-46 50 45 -45
SEM_CORRECAO Nessun angolo appartiene all’intervallo aperto \((-45,45)\).
🎮 Simulatore EP06_04: Stimatore di Inclinazione per Mediana Angolare (Deskew) mediana(-45° < θ < 45°)
Trascina l'angolo del rumore extra dentro o fuori dall'intervallo [-45°, +45°] e osserva come la mediana rimane stabile.
Campioni di Angoli (Verde = Dentro l'Intervallo, Rosso = Rumore Scartato)
–
Figura 6.24: Simulatore EP06_04: Stimatore della Pendenza per Mediana Angolare
%%writefile EP06_04.py
# Codice Python
Overwriting EP06_04.py
TestSuite("EP06_04.py").run()
✔️ EP06_04.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP06_04.cases

🔍 Test di Python: EP06_04.py
⚠️ EP06_04.py: file vuoto (meno di 3 righe). Test saltati.