EDI+VA · Esercizio di Programmazione

EP08_09 — 🟠 Gradiente di Illuminazione e Soglia Adattativa

8.14.9 EP08_09 🟠 Gradiente di Illuminazione e Soglia Adattativa

In questa variazione, gli oggetti sono immersi in uno sfondo con illuminazione non uniforme (gradiente morbido di illuminazione). La sogliatura semplice a valore singolo fallisce, richiedendo una pre-elaborazione più robusta.

8.14.9.1 📋 Linee guida di implementazione

  1. Input: immagine in scala di grigi \(H \times W\) con variazione di sfondo da \(20\) a \(180\).
  2. Pre-elaborazione:
  • Applicare Soglia Adattativa (es.: cv2.adaptiveThreshold con finestra gaussiana di \(15 \times 15\) e costante \(C = 3\)) per isolare gli oggetti indipendentemente dalla variazione dello sfondo.

    cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, ksize, C) // 255

    ksize e C vengono letti dopo l’immagine.

  • Operazione morfologica di Chiusura (\(3 \times 3\)) per sigillare eventuali difetti nei contorni.

  1. Misurazione e Classificazione: estrarre le misure.

  2. Ordinamento e Output: ordinare per (bbox[0], bbox[1]) e stampare la tabella includendo la colonna class.

    • Per ordinare, usare medidas.sort(key=lambda m: (m['bbox'][1], m['bbox'][0])), con medidas = mm.measure(img, precision=0.02).

8.14.9.2 📌 Esempi

Input Output
16 32
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
…
k 20
id area perimeter cx cy x y w h circularity solidity vertices
1 9.0 12.0 10.0 5.0 8 3 5 5 0.79 1.000 4
2 28.3 18.8 25.0 12.0 22 9 7 7 1.00 1.000 3
🧮 Simulatore EP08_09: Gradiente di Illuminazione e Soglia Adattativa & Misurazione OpenCV Adattativo vs Globale → Misurazione
FASE DEL PROCESSAMENTO
VISUALIZZAZIONE DELLA MATRICE DI PIXEL
TABELLA DELLE MISURAZIONI DEGLI OGGETTI (CALCOLATA CON SOGLIA ADATTATIVA OK)
id area perimetro cx cy x y w h circolarità solidità vertici
Figura 8.23: Simulatore EP08_09: Gradiente di Illuminazione, Soglia Adattativa e Misurazione OpenCV
%%writefile EP08_09.py
# Codice Python
Overwriting EP08_09.py
TestSuite("EP08_09.py").run()
✔️ EP08_09.cases esiste già in casos/
📋 3 caso/i caricato/i da casos/EP08_09.cases

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