Regola gli spostamenti orizzontale (tx) e verticale (ty) per osservare il mapping inverso delle coordinate e il riempimento con zero (nero) per i pixel fuori dai limiti dell'immagine originale.
2.12.5 EP02_05 ➡️ Traslazione dell’Immagine
In questa attività, devi implementare lo spostamento spaziale di un’immagine. La traslazione sposta ogni pixel dell’immagine originale in una nuova posizione basata su un vettore di spostamento.
- Leggi due interi L e C, che rappresentano le dimensioni della matrice.
- Leggi due interi \(t_x\) (spostamento orizzontale) e \(t_y\) (spostamento verticale).
- Leggi i valori interi della matrice originale.
- Calcola la nuova posizione \((x', y')\) per ogni pixel originale \((x, y)\).
- Stampa la matrice risultante con le stesse dimensioni dell’originale.
- Vedi una simulazione di questo EP in Figura 2.16.
📌 Importante:
- Riempimento: I pixel che “entrano” nell’immagine a causa dello spostamento e non hanno un corrispondente nell’originale devono essere riempiti con 0 (nero).
- Scarto: I pixel che, dopo la traslazione, escono dai limiti della matrice (\(0 \dots L-1\) o \(0 \dots C-1\)) devono essere ignorati.
- Coordinate: Considera \(x\) come indice di riga e \(y\) come indice di colonna.
2.12.5.1 🧠 Spostamento Spaziale
Traslare un’immagine significa spostare tutti i suoi punti di una distanza fissa in direzioni specificate. Matematicamente, usando coordinate omogenee, l’operazione è descritta come:
\[\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}\]
Che risulta nelle semplici equazioni:
- \(x' = x + t_x\)
- \(y' = y + t_y\)
2.12.5.2 📋 Compito (specifica per VPL)
Input:
La prima riga contiene L.
La seconda riga contiene C.
La terza riga contiene gli interi tx e ty.
Le righe successive contengono gli elementi della matrice \(L \times C\).
Output:
La matrice risultante con le stesse dimensioni \(L \times C\) dopo lo spostamento.
2.12.5.3 📌 Esempi
| Input | Output | Osservazione |
|---|---|---|
| 2 2 1 1 10 20 30 40 |
0 0 0 10 |
Spostamento (\(t_x=1, t_y=1\)): Ogni pixel si sposta di una posizione a destra (orizzontale) e una in basso (verticale). Il pixel \((0,0)=10\) va alla destinazione \((1,1)\) (angolo inferiore destro). Le posizioni vuote sono riempite con \(0\). |
| 3 3 -1 0 1 2 3 4 5 6 7 8 9 |
2 3 0 5 6 0 8 9 0 |
Spostamento (\(t_x=-1, t_y=0\)): Ogni pixel si sposta di una posizione a sinistra (orizzontale). La prima colonna originale (1, 4, 7) viene scartata, le altre colonne si spostano a sinistra, e l’ultima colonna risultante è riempita con zeri (\(0\)). |
%%writefile EP02_05.py
# Codice PythonOverwriting EP02_05.py
TestSuite("EP02_05.py").run()✔️ EP02_05.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP02_05.cases
🔍 Test di Python: EP02_05.py
⚠️ EP02_05.py: file vuoto (meno di 3 righe). Test saltati.