Regola i parametri di contrasto (α) e luminosità (β) per applicare la trasformazione puntuale di intensità e osserva il troncamento della saturazione nell'intervallo [0, 255].
2.12.1 EP02_01 ☀️ Regolazione di Luminosità e Contrasto
In questa attività, l’obiettivo è implementare un operatore puntuale per la trasformazione lineare di intensità, applicando la regolazione dinamica di luminosità e contrasto su un’immagine digitale.
2.12.1.1 📋 Linee Guida di Implementazione
L’algoritmo deve seguire il flusso di esecuzione di seguito:
- Dimensioni: Leggere gli interi \(L\) (righe) e \(C\) (colonne) della matrice.
- Parametri: Leggere il valore reale \(\alpha\) (fattore di contrasto) e l’intero \(\beta\) (fattore di luminosità).
- Dati: Leggere i valori interi della matrice originale.
- Mappatura: Per ogni pixel \(p\), calcolare il nuovo valore \(p'\) tramite l’equazione:
\[p' = \text{clip}(\text{round}(\alpha \cdot p + \beta))\]
- Output: Visualizzare la matrice risultante con le dimensioni \(L \times C\).
2.12.1.2 📌 Vincoli Computazionali
- Arrotondamento (Round): Si applica l’arrotondamento matematico all’intero più vicino prima della conversione di tipo.
- Saturazione (Clipping): I valori devono essere limitati all’intervallo \([0, 255]\) per preservare lo standard a 8 bit:
\[\text{clip}(x) = \max(0, \min(255, x))\]
- Simulazione: L’effetto dei parametri \(\alpha\) e \(\beta\) sulla correzione istogrammatica può essere osservato nella Figura 2.12.
2.12.1.3 🧠 Fondamenti Teorici
Le modifiche alterano l’istogramma dell’immagine per regolare il profilo di illuminazione e la distinzione tonale.
| Parametro | Funzione | Impatto Visivo |
|---|---|---|
| \(\alpha\) (Alpha) | Scalare | Modula il Contrasto. Se \(\alpha > 1\), espande l’istogramma; se \(0 \le \alpha < 1\), lo comprime. |
| \(\beta\) (Beta) | Additiva | Modula la Luminosità. Se positivo, trasla l’istogramma verso destra; se negativo, verso sinistra. |
| \(\text{clip}\) | Limitatore | Restringe la gamma dinamica, prevenendo errori di underflow e overflow. |
2.12.1.4 📦 Specifica di Input e Output (VPL)
Input:
- Riga 1: Intero \(L\).
- Riga 2: Intero \(C\).
- Riga 3: Valori di
alpha(\(\alpha\)) ebeta(\(\beta\)). - Righe successive: Elementi numerici della matrice originale.
Output:
- Matrice trasformata strutturata in \(L\) righe e \(C\) colonne.
2.12.1.5 📌 Esempi
La tabella seguente presenta un esempio pratico del comportamento atteso dell’algoritmo, evidenziando l’azione degli operatori di arrotondamento e saturazione.
| Input | Output | Osservazione |
|---|---|---|
| 1 4 1.5 -30 0 100 180 255 |
0 120 240 255 | Si noti l’effetto di saturazione sull’ultimo pixel |
Esecuzione dei Test
Per valutare i test, eseguire TestSuite("EP02_01.extensão").run() in una nuova cella, sostituendo l’estensione con quella del linguaggio utilizzato (.py, .java, .c, .cpp, .js o .r). Il sistema scarica i casi di test da GitHub, esegue il programma e calcola automaticamente il voto.