+ All Categories
Home > Documents > Transformations géométriques et modifications d'images · 2 Transformations géométriques et...

Transformations géométriques et modifications d'images · 2 Transformations géométriques et...

Date post: 26-Feb-2020
Category:
Upload: others
View: 5 times
Download: 0 times
Share this document with a friend
24
Jean-Marc Ledermann, 2016 Transformations géométriques et modifications d'images Programmes en Visual Basic TABLE DES MATIÈRES § 1 Présentation 2 § 2 Permutations de pixels 5 § 3 Transformations affines 8 § 4 Affinités et images fractales 13 § 5 Transformations non affines 17
Transcript

Jean-Marc Ledermann, 2016

Transformations géométriques

et

modifications d'images

Programmes en Visual Basic

TABLE DES MATIÈRES

§ 1 Présentation 2

§ 2 Permutations de pixels 5

§ 3 Transformations affines 8

§ 4 Affinités et images fractales 13

§ 5 Transformations non affines 17

2 Transformations géométriques et modifications d'images

A B

C

A' B'

C'

§ 1 Présentation

Les activités proposées dans ce fascicule consistent à décrire des transformations géométriques (translations, rotations, homothéties, changements d'échelle, symé-tries …) sous forme mathématique …

puis à appliquer ces transformations sur des images.

Une transformation géométrique 𝜑 peut être donnée en exprimant les coordon-nées 𝑥′ et 𝑦′ d'un point 𝑃′, image par 𝜑 de 𝑃, en fonction des coordonnées 𝑥 et 𝑦 du point 𝑃.

𝜑: {𝑥′ = 𝑓(𝑥, 𝑦)

𝑦′ = 𝑔(𝑥, 𝑦)

où 𝑥′ = 𝑓(𝑥, 𝑦) et 𝑦′ = 𝑔(𝑥, 𝑦) sont des fonctions à 2 variables 𝑥 et 𝑦.

Exemple 1

Appliquons la transformation 𝜑: {𝑥′ = 𝑥 + 5𝑦′ = −𝑦

à quelques points du plan.

Le point 𝐴(0; 1) a comme image le point 𝐴′(5; – 1).

Le point 𝐵(2; 1) a comme image le point 𝐵′(7; −1).

Le point 𝐶(2; 2,5) a comme image le point 𝐶′(7; – 2,5).

Le triangle 𝐴𝐵𝐶 a comme image le triangle 𝐴′𝐵′𝐶′.

𝑃(𝑥; 𝑦 𝑃′(𝑥′; 𝑦′)

§ 1 Présentation 3

L'algorithme principal d'un programme informatique qui applique une transfor-mation géométrique à un graphique affiché à l'écran consiste à calculer l'image de chaque point (pixel) de ce graphique puis à dessiner ce nouveau point en lui don-nant la couleur du point de départ correspondant.

Exemple 2

Le programme ci-dessous applique la transformation 𝜑: {𝑥′ = 𝑥 + 300𝑦′ = 300 − 𝑦

à tous les

points d'une image de 200 x 200 pixels.

Private Sub Command1_Click() For x = 0 To 199 For y = 0 To 199 ' Calcule l'image d'un point Let nx = x + 300 Let ny = 300 – y ' Lit la couleur du point original Let C = Picture1.Point(x, y) ' Marque le point image Picture1.PSet (nx, ny), C Next y Next x End Sub

Dans la zone graphique l'image originale est affichée à partir du coin supérieur gauche.

Dans la pratique, on dispose de deux zones graphiques, l'une, nommée par exemple Picture1, contient le dessin source, l'autre, Picture2, le dessin transformé.

La 1re zone graphique a les mêmes dimensions que le dessin qu'elle contient alors que la deuxième doit être suffisamment grande pour contenir le dessin transformé.

Dans le programme, une seule instruction est modifiée, la ligne

Picture1.PSet (nx,ny), C

est remplacée par

Picture2.PSet (nx,ny), C

Exemple 3

Le programme ci-dessous applique la transformation à tous les points d'une image de 200 x 200 pixels.

Private Sub Command1_Click() For x = 0 To 199 For y = 0 To 199 Let nx = x ^ 2 / (y + 200) Let ny = y ^ 2 / (x + 200) Let C = Picture1.Point(x, y) Picture2.PSet (nx, ny), C Next y Next x End Sub

𝜑: {𝑥′ =

𝑥2

𝑦+200

𝑦′ =𝑦2

𝑥+200

4 Transformations géométriques et modifications d'images

Exercice 1

Écrire un programme qui effectue 4 co-pies d'une image contenue dans une zone graphique.

Exercice 2

Écrire un programme qui effectue 4 co-pies d'une image contenue dans une zone graphique et produit les symétries illustrées ci-contre.

Exercice 3

a) Écrire un programme qui effectue le zoom de facteur ½ d'une image contenue dans une zone graphique.

Améliorer le programme de sorte que la couleur de chaque pixel de l’image construite soit la moyenne de 4 pixels de l’image originale.

b) Compléter le programme de sorte qu'il effectue 8 copies de l'image.

c) Compléter le programme de sorte qu'il effectue 32 copies de l'image.

§ 2 Permutations de pixels 5

alkj

ihgf

edcb

lkji

hgfe

dcba

§ 2 Permutations de pixels

À partir d’une image originale, on construit une nouvelle image de mêmes dimen-sions en permutant ses pixels. Une permutation est une application bijective de l’ensemble des pixels de l’image vers le même ensemble.

Exemple 1

Considérons une petite image rectangulaire de 3 lignes et 4 colonnes. Les 12 pixels qui la constituent sont ici désignés par les lettres abcdefghijkl.

La permutation dcbahgfelkji de ces lettres fournit une nouvelle image obtenue à partir de la première par une symétrie d’axe vertical.

Exemple 2

La permutation bcdefghijkla revient à décaler les lettres comme si elles étaient écrites autour d’un cercle. Cette transformation est une permutation cir-culaire d'une unité.

Rappel

• La division entier de 𝑎 par 𝑏 se note 𝑎 Div 𝑏 (ou 𝑎 \ 𝑏), par exemple 13 Div 3 = 4.

• Le reste de la division entier de 𝑎 par 𝑏 se note 𝑎 Mod 𝑏, par ex. 13 Mod 5 = 3.

Exercice

Pour référencer un élément d’un tableau, on peut utiliser ses coordonnées (𝑥; 𝑦) ou son rang 𝑟.

Donner les formules de pas-sage coordonnées ⟷ rang.

Exercice 4

Écrire un programme qui effectue une permutation circulaire dont le décalage est donné dans une zone de texte.

Composition de permutations

De manière générale, les permutations possibles des pixels d’une image sont en nombre fini. Plus précisément si l’image comporte n pixels, le nombre de permuta-tions vaut n! . Ce nombre de permutations de pixels est ainsi énorme même pour une petite image. Il y a par exemple 24 permutations pour une image 2x2 et 362'880 permutations pour une image 3x3.

Lorsque que l’on compose deux permutations de pixels, on obtient une nouvelle permutation, si bien qu’en répétant une même permutation de pixels, on va obtenir de nouvelles permutations. Cette manière de générer de nouvelles permutations est toutefois limitée par le nombre total de permutations.

ijkl

efgh

abcd

lkji

hgfe

dcba

(0;0) (1;0) (2;0) (3;0) 0 1 2 3

(0;1) (1;1) (2;1) (3;1) ou 4 5 6 7

(0;2) (1;2) (2;2) (3;2) 8 9 10 11

6 Transformations géométriques et modifications d'images

Ordre d’une permutation

À partir d’une permutation 𝑓, on peut construire par composition toute une suite de permutations : 𝑓 , 𝑓 ∘ 𝑓 , 𝑓 ∘ 𝑓 ∘ 𝑓 , 𝑓 ∘ 𝑓 ∘ 𝑓 ∘ 𝑓 ,…. .

Comme il n’existe qu’un nombre fini de permutations, on peut montrer qu'en répé-tant une permutation, on finit par obtenir l'identité.

Pour une image et une permutation 𝑓 données, le plus petit nombre 𝑛 tel que la

composition 𝑓 ∘ 𝑓 ∘ … ∘ 𝑓⏟ 𝑛 fois

donne la transformation identique est appelé l’ordre

de la permutation. Cet ordre est un diviseur de p! où p est le nombre de pixels de l’image.

Exemples

1) L’ordre d’une symétrie axiale vaut 2 quelle que soit la taille de l’image.

2) L’ordre de la permutation circulaire d’une unité, pour une image formée de p pixels, est égal à p.

3) L'ordre de la permutation du photomaton illustrée ci-dessous vaut 7, cet ordre dépend de la taille de l'image initiale.

Exercice 5

On appelle photomaton la transformation qui, à partir d'une image carrée ayant un nombre pair de lignes et de colonnes, crée une nouvelle image formée de 4 images plus petites, extraites de l'image de départ.

Cette nouvelle image est créée par la méthode suivante.

Chaque groupe de 4 points contigus constituant un petit carré de l'image de dé-part est éclaté; chacun des points est envoyé vers l'une des petites images d'ar-rivées. Ces nouveaux points sont placés dans chacune des petites images fi-nales, à l'endroit correspondant à l'emplacement du petit carré dans l'image de départ.

§ 2 Permutations de pixels 7

• La première petite image est donc formée de la copie des points de l'image ini-tiale de coordonnées (𝑥; 𝑦) où 𝑥 est pair et 𝑦 est pair.

• La seconde petite image est formée de la copie des points de coordonnées (𝑥; 𝑦) où 𝑥 est impair et 𝑦 est pair.

• La troisième petite image est formée de la copie des points de coordonnées (𝑥; 𝑦) où 𝑥 est pair et 𝑦 est impair.

La quatrième petite image est formée de la copie des points de coordonnées (𝑥; 𝑦) où 𝑥 est impair et 𝑦 est impair.

a) Écrire un programme qui, à partir d'une image affichée sur la partie gauche de l'écran, construit son image par la transformation du photomaton sur la partie droite de l'écran.

b) Modifier votre programme de sorte qu'un bouton de commande permette de dessi-ner à droite la transformée de l'image de gauche et qu'un deuxième bouton de com-mande permette de dessiner à gauche la transformée de l'image de droite. Vérifier que l'on retrouve bien l'image de départ en appliquant plusieurs fois la transformation du photomaton.

Pour déterminer l'ordre d'une permutation, on peut prendre au hasard un pixel et observer ses déplacements. Le nombre minimal de transformations à effectuer pour que le pixel choisi retourne à sa position initiale est un diviseur de l’ordre de la permutation.

Après quelques essais, on devine l’ordre de la permutation. Pour assurer que l’ordre deviné est effectivement correct, il faudrait toutefois tester le déplacement de tous les pixels.

c) Écrire un programme qui affiche la trajectoire, pour le photomaton, d'un pixel pris au hasard et donne le nombre minimal de transformations à effectuer pour que ce pixel retourne à sa position initiale.

Vérifier que cet ordre varie avec les dimensions de l’image (données dans des zones de texte).

On peut montrer que

• 𝑂(𝑚 × 𝑛) = PPCM( 𝑂(𝑚 × 𝑚), 𝑂(𝑛 × 𝑛) ).

• 𝑂(𝑛 × 𝑛) = plus petite valeur de 𝑘 telle que 2𝑘– 1 soit un multiple de 𝑛– 1.

où 𝑂(𝑚 × 𝑛) = ordre de la transformation du photomaton pour une image de for-mat 𝑚 × 𝑛.

Exemple pour une image de 10 × 12

26 – 1 = 63 =7 ∙ 9 210 – 1 = 1023 = 93 ∙ 11

𝑂(10 × 12) = PPCM( 6, 10) = 30

8 Transformations géométriques et modifications d'images

§ 3 Transformations affines

On a vu que pour décrire une transformation qui envoie un point 𝑃(𝑥; 𝑦) du plan sur le point 𝑃′(𝑥′; 𝑦′), on peut donner les coordonnées 𝑥′ et 𝑦′ de 𝑃′ en fonction des coordonnées 𝑥 et 𝑦 de 𝑃.

La transformation est dite affine si elle peut s'écrire sous la forme

𝜑 : {𝑥′ = 𝑎 ∙ 𝑥 + 𝑏 ∙ 𝑦 + 𝑒

𝑦′ = 𝑐 ∙ 𝑥 + 𝑑 ∙ 𝑦 + 𝑓

avec 6 constantes 𝑎, 𝑏, 𝑐, 𝑑, 𝑒 et 𝑓.

C’est Euler, en 1748, qui est à l’origine du terme « transformation affine », car dit-il, « deux courbes images l’une de l’autre par une telle transformation présentent entre elles une certaine affinité »1.

Exemple

a) Une homothétie ℎ de facteur 3 centrée à l'origine est donnée par ℎ: {𝑥′ = 3𝑥𝑦′ = 3𝑦

.

L'image du point 𝐴(2; 3) est le point 𝐴′(6; 9).

b) ℎ: {𝑥′ = 3𝑥 − 6𝑦′ = 3𝑦 − 4

décrit une homothétie de facteur 3 centré en 𝐶(3; 2).

Le centre 𝐶 de cette affinité est le seul point fixe de ℎ. (3𝑥– 6 = 𝑥 ⟹ 𝑥 = 3, 3𝑦– 4 = 𝑦 ⟹ 𝑦 = 2).

c) 𝑡: {𝑥′ = 𝑥 + 3𝑦′ = 𝑦 + 2

décrit une translation de vecteur 𝑡 = (32).

Application linéaire

Étant donné une transformation affine (ou application affine ou affinité)

𝜑 : {𝑥′ = 𝑎 ∙ 𝑥 + 𝑏 ∙ 𝑦 + 𝑒

𝑦′ = 𝑐 ∙ 𝑥 + 𝑑 ∙ 𝑦 + 𝑓 , déterminons l'image 𝑣′⃗⃗⃗⃗ = 𝐴′𝐵′⃗⃗⃗⃗ ⃗⃗ ⃗⃗ ⃗ d'un vecteur �⃗� = 𝐴𝐵⃗⃗⃗⃗ ⃗⃗ .

Si 𝐴(𝑥1; 𝑦1) et 𝐵(𝑥2; 𝑦2) sont deux points du plan, �⃗� = 𝐴𝐵⃗⃗⃗⃗ ⃗⃗ = (𝑣𝑥𝑣𝑦) = (

𝑥2 − 𝑥1𝑦2 − 𝑦1

) .

Afin de trouver l'image �⃗�′ du vecteur �⃗�, déterminons les images 𝐴′ et 𝐵′ par 𝑓 des points 𝐴 et 𝐵.

𝐴′(𝑎𝑥1 + 𝑏𝑦1 + 𝑒; 𝑐𝑥1 + 𝑑𝑦1 + 𝑓) et 𝐵′(𝑎𝑥2 + 𝑏𝑦2 + 𝑒; 𝑐𝑥2 + 𝑑𝑦2 + 𝑓) et ainsi

𝐴′𝐵′⃗⃗⃗⃗ ⃗⃗ ⃗⃗ ⃗ = ((𝑎𝑥2 + 𝑏𝑦2 + 𝑒) − (𝑎𝑥1 + 𝑏𝑦1 + 𝑒)

(𝑐𝑥2 + 𝑑𝑦2 + 𝑓) − (𝑐𝑥1 + 𝑑𝑦1 + 𝑓)) = (

𝑎(𝑥2 − 𝑥1) + 𝑏(𝑦2 − 𝑦1)

𝑐(𝑥2 − 𝑥1) + 𝑑(𝑦2 − 𝑦1)).

On obtient ainsi �⃗�′ = 𝐴′𝐵′⃗⃗⃗⃗ ⃗⃗ ⃗⃗ ⃗ = (𝑎𝑣𝑥 + 𝑏𝑣𝑦𝑐𝑣𝑥 + 𝑑𝑣𝑦

).

On remarque que 𝑒 et 𝑓 n'apparaissent pas dans l'image d'un vecteur.

1 Encyclopédie Wikipédia

§ 3 Transformations affines 9

Une telle application �⃗� = (𝑣𝑥𝑣𝑦) ⟼ �⃗�′ = (

𝑎𝑣𝑥 + 𝑏𝑣𝑦𝑐𝑣𝑥 + 𝑑𝑣𝑦

) qui transforme les vecteurs

du plan est appelée application linéaire. Cette application est associée à l'applica-

tion affine 𝜑 : {𝑥′ = 𝑎 ∙ 𝑥 + 𝑏 ∙ 𝑦 + 𝑒

𝑦′ = 𝑐 ∙ 𝑥 + 𝑑 ∙ 𝑦 + 𝑓 qui, elle, agit sur des points.

Une application linéaire est donnée par sa matrice = (𝑎 𝑏𝑐 𝑑

) ,

�⃗�′ = 𝑀�⃗� = (𝑎 𝑏𝑐 𝑑

) (𝑣𝑥𝑣𝑦) = (

𝑎𝑣𝑥 + 𝑏𝑣𝑦𝑐𝑣𝑥 + 𝑑𝑣𝑦

) .

Recherche de la matrice d'une application linéaire

On constate que 𝑀 ∙ (10) = (

𝑎 𝑏𝑐 𝑑

) (10) = (

𝑎𝑐)

et que 𝑀 ∙ (01) = (

𝑎 𝑏𝑐 𝑑

) (01) = (

𝑏𝑑)

donc Les colonnes de la matrice d'une application linéaire sont les images des 2 vecteurs de base.

Cette propriété permet de trouver la matrice d'une application linéaire.

Exemple

Cherchons la matrice d'une rotation de 30°

Notons �⃗⃗�1′ l'image du vecteur de base �⃗⃗�1 par cette rotation et �⃗⃗�2′ l'image de �⃗⃗�2.

�⃗⃗�1′ = cos(30°) �⃗⃗�1 + sin(30°) �⃗⃗�2 = (cos (30°)

sin(30°)),

�⃗⃗�2′ = −sins(30°) �⃗⃗�1 + cos(30°) �⃗⃗�2 = (−sin (30°)

cos(30°))

La matrice de cette rotation est donc 𝑀 = (cos (30°) −sin (30°)sin (30°) cos (30°)

)

L'image, par exemple, du vecteur �⃗� = (12) est le vecteur

�⃗�′ = 𝑀 ∙ �⃗� = (cos(30°) − sin(30°)

sin(30°) cos(30°)) (12) = (

√3

2−1

2

1

2

√3

2

) (12) = (

√3−2

2

2√3+1

2

) .

Quelques matrices de transformations linéaires

• Rotation d'angle 𝛼 : 𝑀 = (cos (𝛼) −sin (𝛼)

sin (𝛼) cos (𝛼))

• Homothétie de facteur 𝑘 : 𝑀 = (𝑘 00 𝑘

)

• Changement d'échelles : 𝑀 = (𝑘1 00 𝑘2

)

• Symétrie d'axe 𝑂𝑥 : 𝑀 = (1 00 −1

)

�⃗⃗�1

�⃗⃗�1′

�⃗⃗�2 �⃗⃗�2′

30o

30o

10 Transformations géométriques et modifications d'images

Recherche de transformations affines

La transformation affine 𝜑 : {𝑥′ = 𝑎 ∙ 𝑥 + 𝑏 ∙ 𝑦 + 𝑒

𝑦′ = 𝑐 ∙ 𝑥 + 𝑑 ∙ 𝑦 + 𝑓 est définie par la matrice

𝑀 = (𝑎 𝑏𝑐 𝑑

) de l'application linéaire associée et par l'image 𝑂′(𝑒; 𝑓) de l'origine

𝑂(0; 0).

La transformation 𝑃(𝑥; 𝑦) ⟼ 𝑃′(𝑥′; 𝑦′) s'exprime alors par l'égalité 𝑂𝑃′⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗ = 𝑀 ∙

𝑂𝑃⃗⃗ ⃗⃗ ⃗⃗ + 𝑂𝑂′⃗⃗⃗⃗ ⃗⃗ ⃗⃗ .

Exemples

a) La matrice de l'application linéaire associée à une homothétie ℎ de facteur 3

centré en 𝐶(3; 2) est = (3 00 3

) .

Pour déterminer l'image 𝑂′ de l'origine 𝑂 on utilise le point fixe 𝐶 = 𝐶′.

𝑂𝐶′⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗ = 𝑂𝐶⃗⃗⃗⃗ ⃗⃗ = 𝑀 ∙ 𝑂𝐶⃗⃗⃗⃗ ⃗⃗⏟ 𝑂′𝐶′⃗⃗⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗

+ 𝑂𝑂′⃗⃗⃗⃗ ⃗⃗⃗⃗ ⟹ 𝑂𝑂′⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗ = 𝑂𝐶⃗⃗⃗⃗ ⃗⃗ − 𝑀 ∙ 𝑂𝐶⃗⃗⃗⃗ ⃗⃗

𝑂𝑂′⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗ = (32) − (

3 00 3

) (32) = (

32) − (

96) = (

−6−4) , d'où 𝑂′(– 6; – 4).

La transformation est définie par ℎ : {𝑥′ = 3𝑥 − 6𝑦′ = 3𝑦 − 4

b) Pour déterminer une rotation 𝑟 de 60° de centre 𝐶(2; 0), on commence par chercher la matrice d'une rotation de 60o:

𝑀 = (cos (60°) −sin (60°)sin (60°) cos (60°)

) = (

1

2−√3

2

√3

2

1

2

) ,

puis on détermine l'image 𝑂′ de l'origine :

𝑂𝑂′⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗ = 𝑂𝐶⃗⃗⃗⃗ ⃗⃗ − 𝑀 ∙ 𝑂𝐶⃗⃗⃗⃗ ⃗⃗ = (20) − (

1

2−√3

2

√3

2

1

2

)(20) = (

20) − (

1

√3) = (

1

−√3).

On en déduit 𝑟 : {𝑥′ =

1

2𝑥 −

√3

2𝑦 + 1

𝑦′ =√3

2𝑥 +

1

2𝑦 − √3

Exercice 6

Écrire sous la forme 𝜑 : {𝑥′ = 𝑎 ∙ 𝑥 + 𝑏 ∙ 𝑦 + 𝑒

𝑦′ = 𝑐 ∙ 𝑥 + 𝑑 ∙ 𝑦 + 𝑓

a) Une homothétie de facteur 𝑘 et de centre 𝐶(𝑥𝑜; 𝑦0).

b) Une rotation d'angle 𝛼 autour d'un point 𝐶(𝑥𝑜; 𝑦0).

c) Une symétrie d'axe passant par l'origine et formant un angle 𝛼 avec 𝑂𝑥.

d) Une homothétie de facteur 4 autour de 𝐵(0; 1) suivie par une rotation d'angle 𝛼 = 45° autour de 𝐴(1; 0). Trouver le point fixe de cette transformation.

e) Le changement d'échelle qui envoie le carré unité sur le rectangle de sommets 𝐴(0; 0), 𝐵(5; 0), 𝐶(5; 3), 𝐷(0; 3).

f) L'affinité qui transforme le triangle de sommets 𝑂(0; 0), 𝐸1(1; 0), 𝐸2(0; 1) en un triangle de sommets 𝑂′(4; 5), 𝐸1′(−1; 2), 𝐸2

′(3; 0) et sa réciproque.

§ 3 Transformations affines 11

Exercice 7

a) Donner la matrice d'un changement d'échelles qui envoie le carré de 200 sur 200 sur un rectangle de 450 sur 120.

b) Écrire un programme qui transforme une image comme présentée ci-dessous.

On constate, avec l'exercice précédent, que la figure obtenue est parsemée de trous. Cela résulte du fait que l'ensemble des images ne coïncide pas entièrement avec la zone d'arrivée.

Pour éviter cet inconvénient, il est possible de calculer l'image d'un plus grand nombre de points (For x = 0 To 199 Step 0.5 For y = 0 To 199 Step 0.5), mais il est préférable de calculer la réciproque de la transformation géométrique pour connaître la préimage de chaque pixel de la zone d'arrivée. Il faut ensuite modifier le programme de sorte qu'il parcourt tous les pixels de la zone d'arrivée et colore chacun d'eux avec la couleur de sa préimage.

Exercice 8

a) Modifier le programme de l'exercice 7 de sorte qu'il utilise la réciproque.

On constate que la qualité de l’image obtenue n’est pas excellente, il est possible de lisser les imperfections en appliquant une interpolation bilinéaire.

L’interpolation bilinéaire consiste à attribuer à chaque pixel de «l’image d’arrivée» une moyenne pondérée des couleurs des 4 pixels encadrant le point correspondant de «l’image de départ».

Les coefficients de pondération sont égaux aux surfaces correspondantes de chacun des 4 pixels de centres (𝑥0; 𝑦0), (𝑥0 + 1; 𝑦0) , (𝑥0; 𝑦0 +1) et (𝑥0 + 1; 𝑦0 + 1) comme illustré ci-contre.

Pour le pixel de centre (𝑥0; 𝑦0) par exemple, le coefficient 𝜇0,0

de pondération sera 𝜇0,0 = (1–𝑑𝑥) ∙ (1– 𝑑𝑦)

avec 𝑥0 = Int(𝑥), 𝑦0 = Int(𝑦), et 𝑑𝑥 = 𝑥– 𝑥0 et 𝑑𝑦 = 𝑦–𝑦0.

b) Compléter le programme de sorte qu'il applique une interpolation bilinéaire.

(x’ ; y’) (x0 ; y0)

(x0+1 ; y0+1)

(x ; y)

(x0; y0+1)

(x0+1 ; y0)

12 Transformations géométriques et modifications d'images

Exercice 9

Construire, avec le logiciel Cabri ou GeoGebra, l'image 𝑃′ d'un point 𝑃 par une affinité donnée par 3 points 𝑂, 𝐴 et 𝐵 et leurs images 𝑂, 𝐴′ et 𝐵′ comme indiqué ci-dessous.

Construre ensuite l'image d'un cercle.

Exercice 10

Écrire un programme qui effectue une rotation autour du centre d'une image de 201 sur 201 pixels.

Exercice 11

a) Trouver l'affinité donnée par les images de 𝑂, 𝐸1(1; 0) et 𝐸2(0; 1).

b) Écrire un programme qui permet de donner une affinité par les images de trois sommets du rectangle contenant la figure initiale puis qui dessine son image par cette affinité.

§ 4 Affinités et images fractales 13

§ 4 Affinités et images fractales

La méthode dite de Barnsley permet de construire des images fractales à partir de quelques affinités bien choisies.

Observons la fougère ci-contre que nous nommerons 𝐷.

Une première affinité, 𝑎1, transforme cette fou-gère 𝐷 en une fougère plus petite 𝐷1, de cou-leur verte dans l'image ci-contre.

𝐷1 est l'image de 𝐷 par une homothétie de fac-teur 0,85 suivie par une rotation de −3°, puis d'une translation verticale au 15% de la hau-teur ℎ de 𝐷.

Une deuxième affinité, 𝑎2, transforme cette fougère 𝐷 en une feuille de fougère 𝐷2 de cou-leur rouge dans l'image ci-contre.

𝐷2 est l'image de 𝐷 par une homothétie de fac-teur 0,3 suivie par une rotation de 45°, puis par une translation verticale au 15% de ℎ.

Une troisième affinité, 𝑎3, transforme cette fou-gère 𝐷 en une autre feuille de fougère 𝐷3 de couleur bleu dans l'image ci-contre.

𝐷3 est l'image de 𝐷 par une symétrie d'axe 𝑂𝑦, suivie d'une homothétie de facteur 0,3, d'une rotation de −50°, puis d'une translation verti-cale au 7,5% de la hauteur.

Une dernière affinité, 𝑎4, transforme cette fou-gère 𝐷 en une partie du tronc de fougère 𝐷4.

𝐷4 est l'image de 𝐷 par un changement d'échelle de facteur 0,15 selon l'axe 𝑂𝑦 et 0,001 selon l'axe 𝑂𝑥.

La fougère initiale 𝐷 est donc la réunion des images d'elle-même par les affinités 𝑎1, 𝑎2, 𝑎3 et 𝑎4.

𝐷 = 𝐷1 ∪ 𝐷2 ∪ 𝐷3 ∪ 𝐷4 où 𝐷1 = 𝑎1(𝐷), 𝐷2 = 𝑎2(𝐷), 𝐷3 = 𝑎3(𝐷) et 𝐷4 = 𝑎4(𝐷).

Ces 4 affinités qui engendrent l’image à partir d’elle-même forment un « système de fonctions itérées » (IFS).

La méthode de Barnsley propose une construction d'une image 𝐷, pouvant être dé-crite, telle cette fougère, par un système de fonctions itérées, 𝑎1, 𝑎2, 𝑎3, …, 𝑎𝑛.

Cette construction est la suivante.

Prendre un point quelconque 𝑃0(𝑥0; 𝑦0), appliquer à ce point une affinité choi-sie au hasard parmi 𝑎1, 𝑎2, 𝑎3, …, 𝑎𝑛, et obtenir ainsi un point 𝑃1(𝑥1; 𝑦1).

Réappliquer à ce point 𝑃1 une affinité choisie au hasard parmi 𝑎1, 𝑎2, 𝑎3, …, 𝑎𝑛, et obtenir ainsi un point 𝑃2(𝑥2; 𝑦2).

Réappliquer à ce point 𝑃2 une affinité choisie au hasard parmi 𝑎1, 𝑎2, 𝑎3, …, 𝑎𝑛, et obtenir ainsi un point 𝑃3(𝑥3; 𝑦3).

D4

D3

D2

D1

x

y

h

14 Transformations géométriques et modifications d'images

Itérer ce procédé un grand nombre de fois et ainsi obtenir un domaine 𝐷∗ formé de l'ensemble des points obtenus lors des itérations.

Un théorème, dit théorème de collage, affirme que

Si 𝑎1(𝐷) ∪ 𝑎2(𝐷) ∪ 𝑎3(𝐷) ∪ ⋯ ∪ 𝑎𝑛(𝐷) = 𝐷 alors 𝐷∗ ≅ 𝐷

Exemple 1

On considère 𝐷, le domaine formé du grand triangle ci-contre et 4 affinités, 𝑎1 qui envoie 𝐷 sur 𝐷1; 𝑎2 qui envoie 𝐷 sur 𝐷2; 𝑎3 qui envoie 𝐷 sur 𝐷3; 𝑎4 qui envoie 𝐷 sur 𝐷4.

En appliquant la méthode de Barnsley on obtient 𝐷∗, qui, selon le théorème du col-lage est approximativement le triangle de départ.

Exemple 2

L'arbre fractal ci-contre peut être construit par itérations de trois affinités.

On admettra que l'image est un carré de 200 pixels de côté, que l'axe 𝑂𝑥 supporte la base du carré, que l'axe 𝑂𝑦 est l'axe de sy-métrie vertical du carré et que le tronc de l'arbre a 60 pixels de haut.

𝑎1 est la composition d'une homothétie de facteur 0,7 et d'une rotation de 20o (autour de l'origine), suivie d'une

translation de direction 𝑡 = (060)

𝑎1 génère la partie gauche de l'arbre.

𝑎2 est la composition d'une homothétie de facteur 0,7 et d'une rotation de -20o suivie d'une translation de direction

𝑡 = (060).

𝑎2 génère la partie droite de l'arbre.

𝑎3 est la transformation donnée par la matrice

𝑀 = (0,01 00 0,3

).

𝑎3 génère le tronc de l'arbre.

Exercice 12

Déterminer sous la forme

{𝑥′ = 𝑎𝑥 + 𝑏𝑦 + 𝑒

𝑦′ = 𝑐𝑥 + 𝑑𝑦 + 𝑓

les 4 affinités qui génèrent la fougère décrite au dé-but de ce chapitre, puis écrire le programme qui la dessine.

𝑫𝟏 𝑫𝟐

𝑫𝟑

𝑫𝟒

§ 4 Affinités et images fractales 15

Exercice 13

On considère l’IFS formé des 4 affinités 𝑎1, 𝑎2, 𝑎3 et 𝑎4 qui envoient le carré unité sur les domaines 𝐷1, 𝐷2, 𝐷3 et 𝐷4 coloriés ci-contre.

a) Décrire 𝐷∗

b) Donner chacune des affinités 𝑎1, 𝑎2, 𝑎3 et 𝑎4 par sa

matrice M et son vecteur de translation t .

c) Décrire le domaine 𝐷∗ que l'on obtient en utilisant uniquement les 3 premières affinités 𝑎1, 𝑎2 et 𝑎3 dé-crites ci-dessus, puis programmer le dessin de 𝐷∗.

Exercice 14

On considère l’IFS formé des 3 premières affinités 𝑎1, 𝑎2 et 𝑎3 de l'exemple 1, 𝐷1 ∪ 𝐷2 ∪ 𝐷3 forme donc un triangle de Sierpinski. Écrire un programme qui des-sine ce triangle de Sierpinski.

Exercice 15

Le dessin donné ci-contre est le domaine 𝐷 obtenu par itérations de 2 affinités 𝑎1 et 𝑎2. Retrouver ces 2 affinités.

Indications 𝑎1 envoie 𝐷 sur 𝐷1 où 𝐷1 est la petite réplique

inférieure de 𝐷.

𝑎2 envoie 𝐷 sur 𝐷2 où 𝐷2 est le complémen-taire de 𝐷1 par rapport à D.

Trouver 𝑎1 et 𝑎2 en composant des rotations, homothéties et translations. Placer préalablement un repère orthonormé sur le dessin en choisissant judicieusement une origine 𝑂 et une unité (par exemple de cm).

Ecrire le programme qui dessine 𝐷. Améliorer les affinités pas essais successifs.

Exercice 16

Combiens d'affinités sont-elles nécessaires pour géné-rer l'image ci-contre.

Exercice 17

a) Trouver 4 affinités qui engendrent la courbe de Koch ci-contre.

b) La courbe de Koch peut également être décrite à l'aide de 2 affinités. Trouver ces 2 affinités.

𝐷1 𝐷2

𝐷3 𝐷4

(1; 0)

(0; 1)

(0; 0)

16 Transformations géométriques et modifications d'images

Exercice 18

Étant donné une image 𝐷 de hauteur ℎ, et n affinités (𝑎1, 𝑎2, 𝑎3 … 𝑎𝑛) , écrire un programme qui dessine 𝐷∗ par la méthode de Barnsley.

Chaque affinité 𝑎𝑘 est donnée par sa matrice

𝑀𝑘 = (𝑎𝑘 𝑏𝑘𝑐𝑘 𝑑𝑘

) et son vecteur de translation 𝑡𝑘 = (𝑒𝑘𝑓𝑘).

𝑒𝑘 et 𝑓𝑘 sont donnés en pourcents de la hauteur ℎ.

Le choix des affinités 𝑎1, 𝑎2, 𝑎3 … 𝑎𝑛 ne sera pas forcé-ment équiprobable, il respecte une certaine distribu-tion. Chaque affinité sera choisie au hasard avec une

probabilité 𝑝𝑘 donnée ( ∑ 𝑝𝑘𝑛𝑘=1 = 1 ).

Appliquer votre programme aux données suivantes.

n = 3 a b c d e f p

0,5 0 0 0,5 -25% 0 0,33

0,5 0 0 0,5 25% 0 0,33

0,5 0 0 0,5 0 50% 0,34

n = 4 a b c d e f p

0 0 0 0,16 0 0 0,01

0,2 -0,26 0,23 0,22 0 16% 0,07

-0,15 0,28 0,26 0,24 0 4,4% 0,07

0,85 0,04 -0,04 0,85 0 16% 0,85

n = 4 a b c d e f p

0 0 0 0,5 0 0 0,05

0,3 0 0 0,3 0 30% 0,15

0,42 -0,42 0,42 0,42 0 38% 0,4

0,42 0,42 -0,42 0,42 0 38% 0,4

Exercice 19

Trouver le système de fonctions itérées qui engendre le dessin ci-contre, puis utiliser le programme de l'exercice 18 pour effectuer le dessin.

Exercice 20

Programmer le dessin d'une forêt.

𝑦

𝑥

§ 5 Transformations non affines 17

§ 5 Transformations non affines

Les transformations 𝑡: {𝑥′ = 𝑓(𝑥, 𝑦)

𝑦′ = 𝑔(𝑥, 𝑦) pour lesquelles les fonctions 𝑓 et 𝑔 ne sont

pas affines ont des effets plus imprévisibles.

Exemple 1 : transformation d'un carré en un cercle

On peut envisager différentes transformations géométriques qui envoient un carré sur un cercle, en voici quelques exemples.

Pour ces transformations on place l'origine au centre des images.

Pour parcourir tous les pixels du carré initial il faut donc faire varier 𝑥 et 𝑦 entre –𝑚 et 𝑚 (pour un carré de côté 2𝑚 + 1 pixels).

• La première transformation raccourcit les hori-

zontales : 𝑡: {𝑥′ =

√𝑚2−𝑦2

𝑚𝑥

𝑦′ = 𝑦

Programme Let x0 = m : Let y0 = m For x = -m To m For y = -m To m Let c = Picture1.Point(x0 + x, y0 + y) Let nx = Sqr(m ^ 2 – y ^ 2) / m * x Let ny = y Picture2.PSet (x0 + nx, y0 + ny), c Next y Next x

• La deuxième transformation raccourcit les verti-

cales : 𝑡: {𝑥′ = 𝑥

𝑦′ =√𝑚2−𝑦2

𝑚𝑦

Programme Let x0 = m : Let y0 = m For x = -m To m For y = -m To m Let c = Picture1.Point(x0 + x, y0 + y) Let nx = x Let ny = Sqr(m ^ 2 – x ^ 2) / m *y Picture3.PSet (x0 + nx, y0 + ny), c Next y Next x

r y

√𝑚2 − 𝑦2

m

x

√𝑚2 − 𝑥2

18 Transformations géométriques et modifications d'images

• La troisième transformation raccourcit les diagonales : 𝑡: {𝑥′ = 𝑘 ∙ 𝑥𝑦′ = 𝑘 ∙ 𝑦

avec 𝑘 =𝑚

𝑚_𝑚𝑎𝑥.

et 𝑚_𝑚𝑎𝑥 = longueur du segment qui contient le point 𝑃(𝑥; 𝑦) et dont une extrémité est le centre du carré et l'autre extrémité est sur un coté du carré; m_max dépend donc du point 𝑃.

Programme For x = -m To m Step 1/2 For y = -m To m Step 1/2 If Abs(y) < Abs(x) Then Let m_max = Sqr(m ^ 2 + m*y/x) ^ 2) Else If y<>0 then Let m_max = Sqr(m ^ 2 + (m*x/y) ^ 2) Else Let m_max =m End If End If Let k = m/ m_max Let nx = k * x Let ny = k * y Let c = Picture1.Point(x0 + x, y0 + y) Picture4.PSet (x0 + nx, y0 + ny), c Next y Next x

Exemple 2 placage d'une image sur un demi-cylindre

La transformation décrite ci-dessous enroule l'image sur un demi-cylindre puis projette ce cylindre dans l'écran.

Elle est définie par

𝑡: {𝑥′ =

2𝑚

𝜋sin (

𝜋𝑥

2𝑚)

𝑦′ = 𝑦

Programme Let pi = 4 * Atn(1) For x = -m To m For y = -m To m Let alpha = x * pi / (2 * m) Let nx = 2 * m / pi * Sin(alpha) Let ny = y Let c = Picture1.Point(x0 + x, y0 + y) Picture2.PSet (x0 + nx, y0 + ny), c Next y Next x

M_max

m

P(x;y)

§ 5 Transformations non affines 19

En composant la transformation précé-dente avec le changement d'échelle

𝑒: {𝑥′ =

𝜋

2𝑥

𝑦′ = 𝑦

on obtient une image transformée de la même taille que l'image de départ.

Toutefois l'utilisation de la réciproque per-met d'éviter les traits verticaux blancs.

𝑡: {𝑥 =

2𝑚

𝜋arcsin (

𝑥′

𝑚)

𝑦 = 𝑦′

Programme Let pi = 4 * Atn(1) Let x0 = r: y0 = r For nx = -m To m For ny = -m To m Let x = 2 * r / pi * arcsin(nx / m) Let y = ny Let c = Picture1.Point(x0 + x, y0 + y) Picture2.PSet (x0 + nx, y0 + ny), c Next ny Next nx

Remarque

La fonction arcsin(𝑥) n'est pas définie en Visual Basic, il faut donc utiliser la rela-

tion arcsin(𝑥) =

{

Arctan(

𝑥

√1−𝑥2) si 𝑥 ≠ ±1

𝜋

2si 𝑥 = 1

−𝜋

2si 𝑥 = −1

Exercice 21 (Triangles)

Écrire un programme qui transforme un carré en un triangle

ou

Indication

La transformation 𝑡: {𝑥′ = 𝑘 ∙ 𝑥𝑦′ = 𝑦

où 𝑘 = 𝑘(𝑦) est une fonction qui dépend de 𝑦.

(𝑘 = 1 si 𝑦 =–𝑚 et 𝑘 = 0 si 𝑦 = 𝑚 pour la transformation de gauche ci-dessus).

20 Transformations géométriques et modifications d'images

Exercice 22 (Vases)

Écrire le programme qui déforme une image comme illustré ci-dessous

ou

Indication

Il est nécessaire de trouver une fonction 𝑘 dont le graphe décrit la forme du vase. Cette fonction 𝑘 est, pour chaque ligne de l'image, le facteur d'homothétie selon 𝑂𝑥.

Exercice 23 (Vagues)

Écrire le programme qui déforme une image en créant une vague.

ou Les vagues sont toutes semblables L'amplitude des vagues dépend de 𝑦. elle est maximale lorsque 𝑦 = 0 et nulle lorsque 𝑦 = 𝑚 ou 𝑦 = −𝑚.

Exercice 24 (Transformation du plan complexe)

Les fonctions 𝑓: 𝑧 ⟼ 𝑧′ de ℂ dans ℂ décrivent une transformation du plan de Gauss. En posant 𝑧 = 𝑥 + 𝑦𝑖 et 𝑓(𝑧) = 𝑥′ + 𝑦′𝑖, elles permettent de décrire une transformation d'image. Par exemple, une rotation de 30° autour de l'origine est

décrite par la fonction 𝑓: 𝑧 ⟼ 𝑧′ = (√3

2+1

2𝑖) 𝑧.

Programmer les transformations données ci-dessous.

𝑧′ =𝑧2

|𝑧| 𝑧′ =

2500

�̅�

100 100y

0.5

1

k

100 100y

0.5

1

k

§ 5 Transformations non affines 21

Exercice 25 (Sphère)

Trouver une transformation qui plaque un carré sur une sphère

Indication

Cette transformation peut être considérée comme la composition de 2 transformations de l'espace, la première consiste à déformer et agrandir l'image pour la plaquer sur la sphère, la deuxième consiste à projeter les points de la sphère dans l'écran.

On constate que l'image est parsemée de points blancs. Pour y remédier il faut utiliser la réci-proque de la transformation.

Coordonnées polaires

Pour certaines transformations, il est plus simple d'exprimer les points en coor-données polaires [𝑟, 𝜑] plutôt qu'en coordonnées cartésiennes (𝑥; 𝑦). Il s’agit prin-cipalement de transformations radiales et de transformations angulaires.

Si l’on désigne par 𝑥 et 𝑦 les coordonnées rectangulaires, et par 𝑟 et 𝜑 les coordon-nées polaires, le changement de coordonnées se fait par les formules

Transformation polaire → cartésienne

𝑥 = 𝑟 ∙ cos(𝜑) 𝑦 = 𝑟 ∙ sin(𝜑)

Transformation cartésienne → polaire

𝑟 = √𝑥2 + 𝑦2

𝜑 = arg(𝑥; 𝑦) =

{

arctan (

𝑦

𝑥) si 𝑥 > 0

sgn(𝑦) ∙𝜋

2 si 𝑥 = 0

arctan (𝑦

𝑥) + 𝜋 si 𝑥 < 0

𝜑 ∈ [−𝜋

2;3𝜋

2[

r

x

y

𝛼 =𝜋

2∙ 𝑟

P

1

1

𝑃

𝑃′ r

𝑟 = 𝑂𝑃

22 Transformations géométriques et modifications d'images

Exercice 26 (Transformations radiales)

a) Trouver les fonctions 𝑟(𝜑), 𝜑 ∈ [0; 2𝜋] , de sorte que la courbe d'équation pa-

ramétrique {𝑥 = 𝑟(𝜑) ⋅ cos (𝜑)𝑦 = 𝑟(𝜑) ⋅ sin (𝜑)

𝜑 ∈ [0; 2𝜋] corresponde aux tracés donnés

ci-dessous.

b) Écrire le programme qui déforme une image en transformant, pour chaque point, le rayon 𝑟 des coordonnées polaires mais en ne modifiant pas l'angle 𝜑.

La transformation de 𝑟 peut être inspirée du point a de l'exercice.

Exercice 27 (Transformations angulaire)

Écrire le programme qui déforme une image en créant un tourbillon

Indication, l'angle 𝛼 dépend de 𝑟.

1

1

1

1

1

1

12

3

22

1

r

12

3

22

1

r

12

3

22

1

r

§ 5 Transformations non affines 23

Exercice 28 (Quadrilatère)

Trouver une transformation géométrique qui envoie un carré sur un quadrilatère.

Observer le dessin ci-dessous puis exprimer les coordonnées 𝑥′ et 𝑦′ du point 𝑃′ en fonction des coordonnées 𝑥 et 𝑦 du point 𝑃.

Construire cette transformation avec Cabri-Géomètre : • La création d'une macro permettant de reporter un rapport de section est utile

dans cette construction.

• Faire appartenir le point 𝑃 à un cercle puis faire tracer le lieu géométrique du point 𝑃′ lorsque 𝑃 parcourt ce cercle permet de repré-senter la courbe image du cercle.

Écrire le programme qui effectue cette transformation, les points 𝐸, 𝐹 et 𝐺 étant donnés par des clics de la souris.

On constate qu'à l'arrivée, la figure est parsemée de trous. Pour y remédier on peut utiliser la réciproque de la transformation. Pour déterminer cette réciproque, et bien qu'il soit possible de la trouver algébri-quement, l'utilisation de Mathematica s'avère utile.

L'instruction Mathematica :

Solve[{u == g(x,y) , v == h(x,y)} , {x , y}]

Permet de calculer la réciproque d'une transformation 𝑓: {𝑢 = 𝑔(𝑥, 𝑦)

𝑣 = ℎ(𝑥, 𝑦)

F(100;100)

(0;0) E(100;0)

G(0;100)

(0;0)

E'(x2;y2)

F'(x3;y3)

G'(x4;y4)

P(x;y)

P'(x;y)

A(x;0)

B(x;100)

C(0;y) D(100;y)

A'(xA;yA)

B'(xB;yB)

C'(xC;yC)

D'(xD;yD)

24 Transformations géométriques et modifications d'images

Exercice 29 (Transformations diverses)

Choisir puis programmer l'une ou l'autre des transformations illustrées ci-dessous.


Recommended