EDI+VA · Esercizio di Programmazione

EP02_02 — 🔬 Sottocampionamento Spaziale

2.12.2 EP02_02 🔬 Sottocampionamento Spaziale

In questa attività, devi implementare la riduzione della risoluzione spaziale di un’immagine attraverso il processo di sottocampionamento.

  • Leggi due interi L e C, che rappresentano le dimensioni della matrice originale.
  • Leggi un valore intero \(f\) (\(f \ge 1\)), che rappresenta il fattore di campionamento.
  • Leggi i valori interi della matrice originale.
  • La nuova immagine deve essere costruita selezionando il pixel nella posizione \((f \cdot i, f \cdot j)\) dell’immagine originale.
  • Stampa la matrice risultante con le nuove dimensioni.
  • Vedi una simulazione di questo EP in Figura 2.13.

📌 Importante:

  • Dimensioni Finali: L’immagine campionata avrà dimensioni \(\lceil L/f \rceil \times \lceil C/f \rceil\). Nel contesto della programmazione, ciò equivale alla dimensione risultante da uno slicing con passo \(f\).
  • Implementazione: Non utilizzare funzioni pronte di librerie di elaborazione delle immagini (come OpenCV o PIL) per il ridimensionamento. Implementa la logica di selezione dei pixel manualmente o tramite slicing di matrici.
  • Aliasing: Nota che questo processo può causare l’effetto di aliasing (effetto a scaletta), dove i dettagli fini vengono persi o compaiono pattern indesiderati.

2.12.2.1 🧠 Discretizzazione dello Spazio

Il sottocampionamento riduce la risoluzione spaziale di un’immagine, selezionando solo un pixel ogni \(f\) pixel in ciascuna direzione. È il processo inverso dell’interpolazione:

Parametro Funzione Effetto
Fattore \(f\) Passo di campionamento Definisce l’intervallo di selezione. Un fattore \(2\) riduce larghezza e altezza della metà.
Risoluzione Densità dei pixel Riduce la quantità totale di informazione spaziale dell’immagine.
Aliasing Effetto collaterale Comparsa di pattern a scaletta o a blocchi dovuti alla perdita di dettagli fini.

2.12.2.2 📋 Compito (specifica per VPL)

Input:

La prima riga contiene L.

La seconda riga contiene C.

La terza riga contiene il fattore f.

Le righe successive contengono gli elementi della matrice \(L \times C\).

Output:

La matrice ridotta con le dimensioni corrispondenti allo slicing per f.

2.12.2.3 📌 Esempi

Input Output Osservazione
2
4
2
10 20 30 40
50 60 70 80
10 30 Il fattore 2 seleziona i pixel (0,0) e (0,2) della prima riga. La seconda riga viene ignorata.
🔽 Simulatore EP02_02: Sottocampionamento Spaziale dell'Immagine p'(i, j) = p(i·f, j·f)

Regola il fattore di sottocampionamento (f) per osservare la riduzione della dimensione spaziale della matrice e il campionamento a salti dei pixel in alto a sinistra di ogni blocco f × f.

1
f = 1 → Risoluzione Originale (4×4)  |  f = 2 → Metà (2×2)  |  f = 3 o 4 → Campione Unico (1×1)
Originale (4×4)
Sottocampionata (Dimensione Variabile)
Fattore f = 1 → mantiene tutti i pixel originali (4×4)
Figura 2.13: Simulatore EP02_02: Sottocampionamento Spaziale (Riduzione di Risoluzione per Salto f)
%%writefile EP02_02.cpp
// your solution
Overwriting EP02_02.cpp
TestSuite("EP02_02.cpp").run()
✔️ EP02_02.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP02_02.cases

🔍 Test di C++: EP02_02.cpp
⚠️ EP02_02.cpp: file vuoto (meno di 3 righe). Test saltati.