PDI+VC · Ejercicio de Programación

EP02_05 — ➡️ Transposición de Imagen

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\)).
📍 Simulador EP02_05: Traslación Geométrica 2D p'(i, j) = p(i − ty, j − tx)

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.

0
0
Original (4×4)

Trasladada (tx, ty)

tx = 0, ty = 0 → sin desplazamiento (imagen original preservada)
Figura 2.16: Simulador EP02_05: Traslación Geométrica de Imagen (Desplazamiento tx y ty con Relleno de Borde)
%%writefile EP02_05.py
# Código Python
Overwriting EP02_05.py
TestSuite("EP02_05.py").run()
✔️ EP02_05.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP02_05.cases

🔍 Probando Python: EP02_05.py
⚠️ EP02_05.py: archivo vacío (menos de 3 líneas). Pruebas omitidas.