TNI+VO · Exercice de Programmation

EP06_02 — 🟢 Filtrage des marqueurs par circularité

6.14.2 EP06_02 🟢 Filtrage des marqueurs par circularité

Après la segmentation d’une image, il est courant que plusieurs composants connexes soient identifiés. Dans des applications telles que la rectification de documents, seuls certains de ces composants correspondent aux marqueurs de référence utilisés pour l’alignement de l’image. Un critère fréquemment employé pour sélectionner ces marqueurs est la circularité, qui mesure à quel point la forme d’un composant est proche d’un cercle.

Dans cet exercice, chaque composant est décrit par son aire \(A\) et son périmètre \(P\). L’objectif est de calculer sa circularité et de décider, à partir d’un seuil fourni, si le composant doit être accepté ou rejeté comme candidat marqueur.

6.14.2.1 📋 Directives d’implémentation

  1. Quantité : Lire l’entier \(N\) (nombre de candidats) et le seuil de circularité \(C_{\text{limiar}}\) (nombre réel).
  2. Données des candidats : Pour chacun des \(N\) candidats, lire l’aire \(A\) (entier) et le périmètre \(P\) (nombre réel).
  3. Circularité : Calculer \(C=\frac{4\pi A}{P^2}\), où :
  • \(A\) est l’aire du composant ;
  • \(P\) est le périmètre du composant ;
  • \(C\) est la circularité.
  1. Cas dégénéré : Si \(P=0\), considérer \(C=0\) et classer directement le candidat comme REJETÉ.
  2. Classification : Si \(C>C_{\text{limiar}}\), classer le candidat comme ACCEPTÉ ; sinon, le classer comme REJETÉ.
  3. Arrondi : Afficher la valeur de \(C\) avec quatre décimales.
  4. Sortie : Pour chaque candidat, imprimer la valeur de \(C\) suivie de la classification. À la fin, imprimer le nombre total de candidats acceptés.

6.14.2.2 📌 Contraintes computationnelles

  • Utiliser la constante \(\pi\) de la bibliothèque standard du langage (par exemple, math.pi), sans approximations.
  • La comparaison doit être effectuée avec la valeur de \(C\) en précision complète, avant l’arrondi pour l’affichage.
  • Le critère d’acceptation est strict (\(C>C_{\text{limiar}}\)).
  • Si \(P=0\), la division ne doit pas être effectuée.

6.14.2.3 🧠 Fondement théorique

La circularité est un descripteur géométrique défini par \(C=\frac{4\pi A}{P^2}\), où :

  • \(A\) est l’aire du composant ;
  • \(P\) est le périmètre du composant ;
  • \(C\) est la circularité.

Pour un cercle parfait, \(C=1\). À mesure que la forme devient plus allongée ou irrégulière, le périmètre croît plus rapidement que l’aire, réduisant la valeur de \(C\).

Forme Circularité approximative Interprétation
Cercle \(1{,}0000\) Forme circulaire.
Carré \(0{,}7854\) Forme approximativement compacte.
Forme allongée ou irrégulière \(C\ll1\) Faible circularité.
\(P=0\) \(0\) (convention adoptée) Contour dégénéré.

La circularité est invariante par translation, rotation et mise à l’échelle, et est largement utilisée pour distinguer les composants approximativement circulaires des autres formats.

6.14.2.4 📦 Spécification d’entrée et de sortie (VPL)

Entrée :

  • Ligne 1 : entier \(N\).
  • Ligne 2 : nombre réel \(C_{\text{limiar}}\).
  • Les \(N\) lignes suivantes : aire \(A\) (entier) et périmètre \(P\) (réel), séparés par un espace.

Sortie :

  • Une ligne pour chaque candidat, au format C ACCEPTÉ ou C REJETÉ, avec \(C\) présenté avec quatre décimales.
  • Dernière ligne : Total acceptés : X.

6.14.2.5 📌 Exemples

Entrée Sortie Observation
3
0.6
78 31.4
100 40
50 60
0.9941 ACCEPTÉ
0.7854 ACCEPTÉ
0.1745 REJETÉ
Total acceptés : 2
Candidat approximativement circulaire, forme compacte et forme allongée.
1
0.9
10 0
0.0000 REJETÉ
Total acceptés : 0
Périmètre nul : contour dégénéré.
🎮 Simulateur EP06_02 : Filtre de marqueurs par circularité C = 4πA / P²
Ajustez le seuil et observez quels candidats (disques, carrés et formes irrégulières) survivent au filtre.
–
Figure 6.22: Simulateur EP06_02 : Filtre de Marqueurs par Circularité
%%writefile EP06_02.py
# Code Python
Overwriting EP06_02.py
TestSuite("EP06_02.py").run()
✔️ EP06_02.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP06_02.cases

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