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
- Quantità: Leggere l’intero \(M\), corrispondente al numero di angoli stimati.
- Angoli: Leggere gli \(M\) valori reali, in gradi.
- Filtraggio: Mantenere solo gli angoli che soddisfano strettamente \(-45 < \text{angolo} < 45\).
- Assenza di candidati: Se nessun angolo rimane dopo il filtraggio, stampare esattamente
SEM_CORRECAO. - 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.
- 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_CORRECAOse 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)\). |
%%writefile EP06_04.py
# Codice PythonOverwriting 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.