Ajustez le facteur d'échelle (s) pour comparer l'interpolation par plus proche voisin (réplique discrète) avec l'interpolation bilinéaire (moyenne pondérée des 4 voisins).
2.12.7 EP02_07 🔍 Redimensionnement (Échelle)
Dans cette activité, vous devez implémenter le redimensionnement d’une image à l’aide de facteurs d’échelle. Contrairement au sous-échantillonnage simple, nous utiliserons ici des techniques d’interpolation pour permettre à la fois l’agrandissement et la réduction de l’image.
- Lisez deux entiers L et C, représentant les dimensions de la matrice originale.
- Lisez deux valeurs réelles \(s_x\) (échelle sur les lignes) et \(s_y\) (échelle sur les colonnes).
- Lisez une chaîne de caractères représentant la méthode d’interpolation (
nearestoubilinear). - Lisez les valeurs entières de la matrice originale.
- Calculez les nouvelles dimensions : \(L' = \text{round}(L \times s_x)\) et \(C' = \text{round}(C \times s_y)\).
- Affichez la matrice résultante avec les nouvelles dimensions.
- Voir dans Figure 2.18 une simulation de cet EP.
📌 Important :
Mappage inverse : Pour chaque pixel \((x', y')\) de l’image de destination, trouvez la position correspondante dans l’origine en utilisant \((x, y) = (x'/s_x, y'/s_y)\).
Interpolation :
nearest: Sélectionne la valeur du pixel le plus proche (arrondi des coordonnées).bilinear: Effectue une interpolation linéaire double entre les quatre pixels voisins les plus proches dans l’image originale.Bords : Assurez-vous que le mappage ne tente pas d’accéder à des indices hors de l’intervalle \([0, L-1]\) et \([0, C-1]\).
2.12.7.1 🧠 Interpolation pour Agrandissement/Réduction
Redimensionner une image par des facteurs \((s_x, s_y)\) exige le remplissage des vides (lors de l’agrandissement) ou la fusion d’informations (lors de la réduction). La méthode d’interpolation définit la qualité visuelle du résultat :
| Méthode | Fonctionnement | Effet visuel |
|---|---|---|
| Nearest | Prend la valeur du voisin le plus proche. | Rapide, mais génère un effet “pixelisé” ou des blocs. |
| Bilinear | Moyenne pondérée des 4 voisins (\(2 \times 2\)). | Adoucit l’image, réduisant le crénelage. |
2.12.7.2 📋 Tâche (spécification pour VPL)
Entrée :
La première ligne contient L.
La deuxième ligne contient C.
La troisième ligne contient les facteurs sx et sy.
La quatrième ligne contient la méthode interp (nearest ou bilinear).
Les lignes suivantes contiennent les éléments de la matrice \(L \times C\).
Sortie :
La matrice redimensionnée avec les dimensions \(L' \times C'\).
2.12.7.3 📌 Exemples
| Entrée | Sortie | Observation |
|---|---|---|
| 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 |
Agrandissement 2× : chaque pixel original est répliqué dans un bloc 2×2. L’image \(2\times2\) devient \(4\times4\). |
| 2 2 0.5 0.5 nearest 10 20 30 40 |
10 | Réduction 0.5× : l’image \(2\times2\) devient \(1\times1\). Avec nearest, le seul pixel de sortie échantillonne la position \((0,0)=10\). |
%%writefile EP02_07.py
# Code Python
import numpy as np
from morph import mm
# 1. Lecture des dimensions, facteurs et méthode
l = int(input())
c = int(input())
sx, sy = map(float, input().split())
interp = input().strip()
# 2. Lecture de l'image originale
img = mm.readImg(l, c)
# 3. Nouvelles dimensions
l_new = round(l * sx)
c_new = round(c * sy)
# 4. Redimensionnement avec mm.resize
# cv2.resize utilise (largeur, hauteur) = (colonnes, lignes)
resultado = mm.resize(img, (c_new, l_new), method=interp)
# 5. Affichage
print(mm.drawImg(resultado))Overwriting EP02_07.py
TestSuite("EP02_07.py").run()✔️ EP02_07.cases existe déjà dans casos/ 📋 5 cas chargé(s) depuis casos/EP02_07.cases 🔍 Test de Python : EP02_07.py ✔️ Cas1_Ampliacao_2x_Nearest : OK ✔️ Cas2_Reducao_05x_Nearest : OK ✔️ Cas3_Sem_Escala : OK ✔️ Cas4_Ampliacao_Bilinear : OK ✔️ Cas5_Escala_Assimetrica : OK 📊 Résultat : 5/5 (100.0 %) 🎉 Félicitations ! Tous les tests ont réussi.