Dans cette activité, vous devez implémenter la rotation d’une image autour de son centre géométrique. Cette opération nécessite le mappage des coordonnées et l’utilisation de techniques d’interpolation pour déterminer les nouvelles valeurs des pixels.
Lisez deux entiers L et C, représentant les dimensions de la matrice.
Lisez une valeur réelle \(\theta\) (angle en degrés) et une chaîne de caractères représentant la méthode d’interpolation (nearest ou bilinear).
Lisez les valeurs entières de la matrice originale.
Effectuez la rotation autour du centre de l’image \((L/2, C/2)\).
Affichez la matrice résultante avec les mêmes dimensions que l’originale.
Mappage inverse : Pour éviter les « trous » dans l’image finale, parcourez chaque pixel \((x', y')\) de l’image de destination et calculez sa position correspondante \((x, y)\) dans l’image originale en utilisant la matrice de rotation inverse.
Interpolation :
nearest : Attribue la valeur du pixel le plus proche de la coordonnée calculée.
bilinear : Calcule une moyenne pondérée basée sur les 4 voisins les plus proches.
Bords : Les pixels dont l’origine \((x, y)\) tombe en dehors des limites de l’image originale doivent être remplis avec 0.
2.12.6.1 🧠 Transformation par angle
La rotation d’un point \((x, y)\) par rapport à l’origine d’un angle \(\theta\) est donnée par la matrice de transformation. Pour effectuer une rotation autour d’un centre \((x_c, y_c)\), on translate d’abord le centre vers l’origine, on effectue la rotation, puis on translate en retour :
Conseil : Utilisez le mappage inverse pour garantir que tous les pixels de l’image de sortie soient correctement remplis.
2.12.6.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 l’angle theta (en degrés) et la méthode interp (nearest ou bilinear).
Les lignes suivantes contiennent les éléments de la matrice \(L \times C\).
Sortie :
La matrice tournée avec L lignes et C colonnes.
2.12.6.3 📌 Exemples
Entrée
Sortie
Observation
2
2
90 nearest
1 2
3 4
3 1
4 2
Rotation de 90° dans le sens horaire : la colonne 0 devient la ligne 0 (de bas en haut). \((0,0)=1→(1,0)\), \((1,0)=3→(0,0)\), \((0,1)=2→(1,1)\), \((1,1)=4→(0,1)\).
3
3
45 bilinear
0 0 0
0 255 0
0 0 0
0 180 0
180 255 180
0 180 0
Rotation de 45° : le pixel central reste \(255\) ; les voisins directs reçoivent une valeur interpolée \(\approx 180\) par bilinéaire ; les coins restent à \(0\).
Ajustez l'angle de rotation (θ) via le curseur ou les raccourcis rapides pour observer la transformation trigonométrique des coordonnées autour du centre de l'image.
0°
● Carré vert avec marqueur orange (coin supérieur droit) – rotation autour du centre.
θ = 0° → cos = 1.000, sin = 0.000 → Matrice identité
Figure 2.17: Simulateur EP02_06 : Rotation d’image autour de l’origine par un angle θ
%%writefile EP02_06.py# Code Python
Overwriting EP02_06.py
TestSuite("EP02_06.py").run()
✔️ EP02_06.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP02_06.cases
🔍 Test de Python : EP02_06.py
⚠️ EP02_06.py : fichier vide (moins de 3 lignes). Tests ignorés.