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.
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\)). |
%%writefile EP02_05.cpp
// sua soluçãoOverwriting 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.