Regola la soglia di separazione (T) e gli spostamenti di luminosità (δ₁ e δ₂) per applicare trasformazioni di intensità differenziate nelle regioni scure e chiare dell'immagine.
1.17.8 EP01_08 🎨 Rimappatura per Intervallo di Intensità
In questa attività, devi scrivere un programma che applichi trasformazioni lineari distinte a diverse regioni di intensità dell’immagine.
- Leggi due interi L e C, che rappresentano le dimensioni della matrice.
- Leggi gli interi T (soglia), δ₁ (delta 1) e δ₂ (delta 2).
- Leggi i valori interi della matrice.
- Per ogni pixel \(p\), applica la regola di rimappatura condizionale:
\[\text{risultato} = \begin{cases} p + \delta_1 & \text{se } p < T \\ p + \delta_2 & \text{se } p \ge T \end{cases}\]
- Stampa la matrice risultante con i nuovi valori di intensità.
📌 Importante:
- δ₁ è l’offset applicato ai pixel scuri (al di sotto della soglia).
- δ₂ è l’offset applicato ai pixel chiari (maggiori o uguali alla soglia).
- I casi di test garantiscono che il risultato sia sempre nell’intervallo valido da 0 a 255, quindi non è necessario gestire saturazione o arrotondamenti.
- L’output deve mantenere la struttura di matrice (L righe e C colonne).
1.17.8.1 🧠 Trasformazione Condizionale dei Pixel
Nell’elaborazione digitale delle immagini (PDI), spesso dobbiamo trattare le regioni in modo indipendente. Questa tecnica consente, ad esempio, di schiarire solo le ombre di una fotografia (aumentando i pixel scuri) senza bruciare la luminosità delle aree già chiare, o viceversa.
| Intervallo di Intensità | Condizione | Operazione |
|---|---|---|
| Pixel scuri | \(p < T\) | \(p + \delta_1\) |
| Pixel chiari | \(p \ge T\) | \(p + \delta_2\) |
1.17.8.2 📋 Compito (specifica per VPL)
Input:
La prima riga contiene gli interi L e C.
La seconda riga contiene gli interi T, δ₁ e δ₂.
Le righe successive contengono gli elementi della matrice.
Output:
La matrice trasformata con L righe e C colonne, con valori separati da spazi.
1.17.8.3 📌 Esempi
| Input | Output | Osservazione |
|---|---|---|
2 4128 60 -400 100 150 25580 128 200 30 |
60 160 110 215140 88 160 90 |
I pixel < 128 sommano 60. I pixel ≥ 128 sottraggono 40. |
%%writefile EP01_08.cpp
// your solutionOverwriting EP01_08.cpp
TestSuite("EP01_08.cpp").run()✔️ EP01_08.cases esiste già in casos/
📋 8 caso/i caricato/i da casos/EP01_08.cases
🔍 Test di C++: EP01_08.cpp
⚠️ EP01_08.cpp: file vuoto (meno di 3 righe). Test saltati.