PDI+VC · Exercício de Programação

EP02_05 — ➡️ Translação de Imagem

2.12.5 EP02_05 ➡️ Translação de Imagem

Nesta atividade, você deve implementar o deslocamento espacial de uma imagem. A translação move cada pixel da imagem original para uma nova posição com base em um vetor de deslocamento.

  • Leia dois inteiros L e C, representando as dimensões da matriz.
  • Leia dois inteiros \(t_x\) (deslocamento horizontal) e \(t_y\) (deslocamento vertical).
  • Leia os valores inteiros da matriz original.
  • Calcule a nova posição \((x', y')\) para cada pixel \((x, y)\) original.
  • Imprima a matriz resultante com as mesmas dimensões da original.
  • Ver na Figura 2.16 uma simulação deste EP.

📌 Importante:

  • Preenchimento: Pixels que “entram” na imagem devido ao deslocamento e não possuem correspondente na original devem ser preenchidos com 0 (preto).
  • Descarte: Pixels que, após a translação, ficarem fora dos limites da matriz (\(0 \dots L-1\) ou \(0 \dots C-1\)) devem ser ignorados.
  • Coordenadas: Considere \(x\) como o índice da linha e \(y\) como o índice da coluna.

2.12.5.1 🧠 Deslocamento Espacial

Transladar uma imagem significa mover todos os seus pontos por uma distância fixa em direções especificadas. Matematicamente, usando coordenadas homogêneas, a operação é descrita 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}\]

Que resulta nas equações simples:

  • \(x' = x + t_x\)
  • \(y' = y + t_y\)

2.12.5.2 📋 Tarefa (especificação para VPL)

Entrada:

A primeira linha contém L.

A segunda linha contém C.

A terceira linha contém os inteiros tx e ty.

As linhas seguintes contêm os elementos da matriz \(L \times C\).

Saída:

A matriz resultante com as mesmas dimensões \(L \times C\) após o deslocamento.

2.12.5.3 📌 Exemplos

Entrada Saída Observação
2
2
1 1
10 20
30 40
0 0
0 10
Deslocamento (\(t_x=1, t_y=1\)): Cada pixel move uma posição para a direita (horizontal) e uma para baixo (vertical). O pixel \((0,0)=10\) vai para o destino \((1,1)\) (canto inferior direito). As posições vazias são preenchidas com \(0\).
3
3
-1 0
1 2 3
4 5 6
7 8 9
2 3 0
5 6 0
8 9 0
Deslocamento (\(t_x=-1, t_y=0\)): Cada pixel move uma posição para a esquerda (horizontal). A primeira coluna original (1, 4, 7) é descartada, as demais colunas movem-se para a esquerda, e a última coluna resultante é preenchida com zeros (\(0\)).
📍 Simulador EP02_05: Translação Geométrica 2D p'(i, j) = p(i − ty, j − tx)

Ajuste os deslocamentos horizontal (tx) e vertical (ty) para observar o mapeamento reverso de coordenadas e o preenchimento com zero (preto) para pixels fora dos limites da imagem original.

0
0
Original (4×4)

Transladada (tx, ty)

tx = 0, ty = 0 → nenhum deslocamento (imagem original preservada)
Figura 2.16: Simulador EP02_05: Translação Geométrica de Imagem (Deslocamento tx e ty com Preenchimento de Borda)
%%writefile EP02_05.cpp
// sua solução
Overwriting EP02_05.cpp
TestSuite("EP02_05.cpp").run()
✔️ EP02_05.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP02_05.cases

🔍 Testando C++: EP02_05.cpp
⚠️ EP02_05.cpp: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.