Ajuste o fator de escala (s) para comparar a interpolação por vizinho mais próximo (réplica discreta) com a interpolação bilinear (média ponderada dos 4 vizinhos).
2.12.7 EP02_07 🔍 Redimensionamento (Escala)
Nesta atividade, você deve implementar o redimensionamento de uma imagem utilizando fatores de escala. Diferente da subamostragem simples, aqui utilizaremos técnicas de interpolação para permitir tanto a ampliação quanto a redução da imagem.
- Leia dois inteiros L e C, representando as dimensões da matriz original.
- Leia dois valores reais \(s_x\) (escala nas linhas) e \(s_y\) (escala nas colunas).
- Leia uma string representando o método de interpolação (
nearestoubilinear). - Leia os valores inteiros da matriz original.
- Calcule as novas dimensões: \(L' = \text{round}(L \times s_x)\) e \(C' = \text{round}(C \times s_y)\).
- Imprima a matriz resultante com as novas dimensões.
- Ver na Figura 2.18 uma simulação deste EP.
📌 Importante:
Mapeamento Inverso: Para cada pixel \((x', y')\) da imagem de destino, encontre a posição correspondente na origem usando \((x, y) = (x'/s_x, y'/s_y)\).
Interpolação:
nearest: Seleciona o valor do pixel mais próximo (arredondamento das coordenadas).bilinear: Realiza uma interpolação linear dupla entre os quatro pixels vizinhos mais próximos na imagem original.Bordas: Certifique-se de que o mapeamento não tente acessar índices fora do intervalo \([0, L-1]\) e \([0, C-1]\).
2.12.7.1 🧠 Interpolação para Ampliação/Redução
Redimensionar uma imagem por fatores \((s_x, s_y)\) exige o preenchimento de vazios (na ampliação) ou a fusão de informações (na redução). O método de interpolação define a qualidade visual do resultado:
| Método | Funcionamento | Efeito Visual |
|---|---|---|
| Nearest | Pega o valor do vizinho mais próximo. | Rápido, mas gera efeito “pixelado” ou blocos. |
| Bilinear | Média ponderada dos 4 vizinhos (\(2 \times 2\)). | Suaviza a imagem, reduzindo o serrilhamento. |
2.12.7.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 fatores sx e sy.
A quarta linha contém o método interp (nearest ou bilinear).
As linhas seguintes contêm os elementos da matriz \(L \times C\).
Saída:
A matriz redimensionada com dimensões \(L' \times C'\).
2.12.7.3 📌 Exemplos
| Entrada | Saída | Observação |
|---|---|---|
| 2 2 2.0 2.0 nearest 1 2 3 4 |
1 1 2 2 1 1 2 2 3 3 4 4 3 3 4 4 |
Ampliação 2×: cada pixel original é replicado em um bloco 2×2. A imagem \(2\times2\) vira \(4\times4\). |
| 2 2 0.5 0.5 nearest 10 20 30 40 |
10 | Redução 0.5×: a imagem \(2\times2\) vira \(1\times1\). Com nearest, o único pixel de saída amostra a posição \((0,0)=10\). |
%%writefile EP02_07.py
# Código Python
import numpy as np
from morph import mm
# 1. Leitura das dimensões, fatores e método
l = int(input())
c = int(input())
sx, sy = map(float, input().split())
interp = input().strip()
# 2. Leitura da imagem original
img = mm.readImg(l, c)
# 3. Novas dimensões
l_new = round(l * sx)
c_new = round(c * sy)
# 4. Redimensionamento usando mm.resize
# cv2.resize usa (largura, altura) = (colunas, linhas)
resultado = mm.resize(img, (c_new, l_new), method=interp)
# 5. Exibição
print(mm.drawImg(resultado))Overwriting EP02_07.py
TestSuite("EP02_07.py").run()✔️ EP02_07.cases já existe em casos/ 📋 5 caso(s) carregado(s) de casos/EP02_07.cases 🔍 Testando Python: EP02_07.py ✔️ Caso1_Ampliacao_2x_Nearest: OK ✔️ Caso2_Reducao_05x_Nearest: OK ✔️ Caso3_Sem_Escala: OK ✔️ Caso4_Ampliacao_Bilinear: OK ✔️ Caso5_Escala_Assimetrica: OK 📊 Resultado: 5/5 (100.0%) 🎉 Parabéns! Todos os testes passaram.