Ajustez les coefficients de cisaillement horizontal (shx) et vertical (shy) pour observer la déformation angulaire de l'image via le mappage inverse des coordonnées.
2.12.8 EP02_08 🔀 Cisaillement (Shear)
Dans cette activité, vous devez implémenter la transformation de cisaillement sur une image. Le cisaillement est une transformation affine qui décale chaque point dans une direction fixe, d’une valeur proportionnelle à sa distance par rapport à une droite parallèle à cette direction, produisant un effet d’inclinaison.
- Lire deux entiers L et C, représentant les dimensions de la matrice.
- Lire deux valeurs réelles \(sh_x\) (cisaillement horizontal) et \(sh_y\) (cisaillement vertical).
- Lire une chaîne de caractères représentant la méthode d’interpolation (
nearestoubilinear). - Lire les valeurs entières de la matrice originale.
- Appliquer la transformation en conservant la taille originale de l’image (en coupant ce qui dépasse les limites).
- Afficher la matrice résultante avec les dimensions \(L \times C\).
- Voir dans Figure 2.19 une simulation de cet EP.
📌 Important :
- Mappage inverse : Pour chaque pixel \((x', y')\) de l’image de destination, calculer la position correspondante dans l’origine \((x, y)\) en utilisant la matrice de cisaillement inverse.
- Remplissage : Les coordonnées qui aboutissent à des positions hors de la matrice originale doivent être remplies avec 0.
- Coordonnées : Pour les besoins de cette implémentation, considérez \(x\) comme l’indice de ligne et \(y\) comme l’indice de colonne.
2.12.8.1 🧠 Distorsion affine
Le cisaillement modifie la géométrie de l’image en inclinant ses axes. La relation entre les coordonnées originales \((x, y)\) et les coordonnées transformées \((x', y')\) est donnée par :
\[\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & sh_x & 0 \\ sh_y & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}\]
Cela donne les équations :
- \(x' = x + sh_x \cdot y\)
- \(y' = y + sh_y \cdot x\)
2.12.8.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 shx et shy.
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 transformée avec les mêmes dimensions \(L \times C\).
2.12.8.3 📌 Exemples
| Entrée | Sortie | Observation |
|---|---|---|
| 3 3 0.5 0.0 nearest 10 20 30 40 50 60 70 80 90 |
10 20 30 0 40 50 0 0 70 |
Cisaillement horizontal : la ligne \(i\) se décale de \(\lfloor i \cdot 0.5 \rfloor\) pixels. Ligne \(0→0\)px, ligne \(1→0\)px, ligne \(2→1\)px. Les pixels décalés vers l’extérieur sont éliminés et les positions vides sont remplies avec \(0\). |
| 2 2 0.0 1.0 nearest 10 20 30 40 |
10 0 30 20 |
Cisaillement vertical : la colonne \(j\) se décale de \(\lfloor j \cdot 1.0 \rfloor\) pixels vers le bas. Colonne \(0→0\)px (inchangée), colonne \(1→1\)px : \(20\) descend à \((1,1)\) et \((0,1)\) devient \(0\). |
%%writefile EP02_08.py
# Code PythonOverwriting EP02_08.py
TestSuite("EP02_08.py").run()✔️ EP02_08.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP02_08.cases
🔍 Test de Python : EP02_08.py
⚠️ EP02_08.py : fichier vide (moins de 3 lignes). Tests ignorés.