TNI+VO · Exercice de Programmation

EP06_04 — 🟡 Estimateur d’Inclinaison par Médiane Angulaire ( Deskew )

6.14.4 EP06_04 🟡 Estimateur d’Inclinaison par Médiane Angulaire (Deskew)

Après la détection des contours et l’application de la Transformée de Hough, on obtient un ensemble de droites candidates pour l’orientation prédominante du document. Chaque droite fournit une estimation de l’angle d’inclinaison, calculée par

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

Cependant, toutes les droites ne correspondent pas aux lignes du document : certaines résultent de bruits, d’ombres ou d’autres éléments de l’image. Dans cet exercice, vous implémenterez l’étape d’estimation robuste de l’angle d’inclinaison, en filtrant les valeurs plausibles et en calculant leur médiane.

6.14.4.1 📋 Directives d’Implémentation

  1. Quantité : Lire l’entier \(M\), correspondant au nombre d’angles estimés.
  2. Angles : Lire les \(M\) valeurs réelles, en degrés.
  3. Filtrage : Conserver uniquement les angles qui satisfont strictement \(-45 < \text{angle} < 45\).
  4. Absence de candidats : Si aucun angle ne subsiste après le filtrage, imprimer exactement SEM_CORRECAO.
  5. Médiane : S’il existe des angles valides :
    • si la quantité est impaire, la médiane est l’élément central de la séquence ordonnée ;
    • si elle est paire, la médiane est la moyenne arithmétique des deux éléments centraux.
  6. Sortie : Imprimer la médiane arrondie à deux décimales (arrondi standard, round half away from zero, avec np.floor(img + 0.5)).

6.14.4.2 📌 Contraintes Computationnelles

  • Intervalle ouvert : les angles égaux à \(-45\) ou \(45\) ne doivent pas être considérés.
  • Précision : calculer la médiane en utilisant les valeurs originales ; l’arrondi doit être effectué uniquement en sortie.
  • Cas vide : s’il n’y a pas d’angles valides, aucune médiane ne doit être calculée.

6.14.4.3 🧠 Fondement Théorique

Situation Résultat
Majorité des angles concentrée autour de l’inclinaison réelle La médiane approxime l’orientation du document.
Peu d’angles aberrants (outliers) La médiane subit peu d’influence de ces valeurs.
Angles hors de l’intervalle \((-45^\circ,45^\circ)\) Ils sont écartés avant le calcul.
Aucun angle valide Aucune correction n’est appliquée (SEM_CORRECAO).

La médiane est utilisée car elle est plus robuste que la moyenne en présence de quelques valeurs aberrantes, produisant une estimation plus stable de l’inclinaison prédominante du document.

6.14.4.4 📦 Spécification d’Entrée et de Sortie (VPL)

Entrée :

  • Ligne 1 : Entier \(M\).
  • Ligne 2 : \(M\) nombres réels, correspondant aux angles en degrés.

Sortie :

  • Une seule ligne contenant l’angle estimé, avec deux décimales, ou le mot SEM_CORRECAO si aucun angle n’est valide.

6.14.4.5 📌 Exemples

Entrée Sortie Observation
5
-50 -10.5 2.3 2.3 47
2.30 Seuls les angles dans l’intervalle \((-45,45)\) sont considérés ; la médiane est \(2{,}3\).
4
-46 50 45 -45
SEM_CORRECAO Aucun angle n’appartient à l’intervalle ouvert \((-45,45)\).
🎮 Simulateur EP06_04 : Estimateur d'Inclinaison par Médiane Angulaire (Deskew) médiane(-45° < θ < 45°)
Faites glisser l'angle du bruit supplémentaire à l'intérieur ou à l'extérieur de l'intervalle [-45°, +45°] et observez comment la médiane reste stable.
Échantillons d'Angles (Vert = Dans la Plage, Rouge = Bruit Écarté)
–
Figure 6.24: Simulateur EP06_04 : Estimateur de Pente par Médiane Angulaire
%%writefile EP06_04.py
# Code Python
Overwriting EP06_04.py
TestSuite("EP06_04.py").run()
✔️ EP06_04.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP06_04.cases

🔍 Test de Python : EP06_04.py
⚠️ EP06_04.py : fichier vide (moins de 3 lignes). Tests ignorés.