Ajusta los desplazamientos horizontal (tx) y vertical (ty) para observar el mapeo inverso de coordenadas y el relleno con cero (negro) para píxeles fuera de los límites de la imagen original.
2.12.5 EP02_05 ➡️ Transposición de Imagen
En esta actividad, debes implementar el desplazamiento espacial de una imagen. La traslación mueve cada píxel de la imagen original a una nueva posición basándose en un vector de desplazamiento.
- Lee dos enteros L y C, que representan las dimensiones de la matriz.
- Lee dos enteros \(t_x\) (desplazamiento horizontal) y \(t_y\) (desplazamiento vertical).
- Lee los valores enteros de la matriz original.
- Calcula la nueva posición \((x', y')\) para cada píxel \((x, y)\) original.
- Imprime la matriz resultante con las mismas dimensiones que la original.
- Consulta en Figura 2.16 una simulación de este EP.
📌 Importante:
- Relleno: Los píxeles que “entran” en la imagen debido al desplazamiento y no tienen un correspondiente en la original deben rellenarse con 0 (negro).
- Descarte: Los píxeles que, después de la traslación, queden fuera de los límites de la matriz (\(0 \dots L-1\) o \(0 \dots C-1\)) deben ignorarse.
- Coordenadas: Considera \(x\) como el índice de la fila e \(y\) como el índice de la columna.
2.12.5.1 🧠 Desplazamiento Espacial
Trasladar una imagen significa mover todos sus puntos una distancia fija en direcciones especificadas. Matemáticamente, usando coordenadas homogéneas, la operación se describe como:
\[\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}\]
Lo que resulta en las ecuaciones simples:
- \(x' = x + t_x\)
- \(y' = y + t_y\)
2.12.5.2 📋 Tarea (especificación para VPL)
Entrada:
La primera línea contiene L.
La segunda línea contiene C.
La tercera línea contiene los enteros tx y ty.
Las líneas siguientes contienen los elementos de la matriz \(L \times C\).
Salida:
La matriz resultante con las mismas dimensiones \(L \times C\) después del desplazamiento.
2.12.5.3 📌 Ejemplos
| Entrada | Salida | Observación |
|---|---|---|
| 2 2 1 1 10 20 30 40 |
0 0 0 10 |
Desplazamiento (\(t_x=1, t_y=1\)): Cada píxel se mueve una posición hacia la derecha (horizontal) y una hacia abajo (vertical). El píxel \((0,0)=10\) va al destino \((1,1)\) (esquina inferior derecha). Las posiciones vacías se rellenan con \(0\). |
| 3 3 -1 0 1 2 3 4 5 6 7 8 9 |
2 3 0 5 6 0 8 9 0 |
Desplazamiento (\(t_x=-1, t_y=0\)): Cada píxel se mueve una posición hacia la izquierda (horizontal). La primera columna original (1, 4, 7) se descarta, las demás columnas se mueven hacia la izquierda y la última columna resultante se rellena con ceros (\(0\)). |
%%writefile EP02_05.cpp
// your solutionOverwriting EP02_05.cpp
TestSuite("EP02_05.cpp").run()✔️ EP02_05.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP02_05.cases
🔍 Probando C++: EP02_05.cpp
⚠️ EP02_05.cpp: archivo vacío (menos de 3 líneas). Pruebas omitidas.