Obligement - L'Amiga au maximum

Mardi 19 mars 2024 - 07:57  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Dossier : Le traitement d'images numériques - Transformations géométriques et déformation
(Article écrit par Barrou Diallo et extrait d'Amiga News - décembre 1996)


Lors des articles précédents (1, 2 et 3), nous avons étudié différentes méthodes en vue de traiter des images numériques, d'en améliorer les caractéristiques ou d'en extraire des informations de contours. Après avoir considéré l'image comme une fonction bidimensionnelle qui associe une valeur de luminance à chaque pixel, nous avons décrit des opérateurs qui s'appliquent point par point et sur un environnement restreint. Il en découle toutes les méthodes basées sur la notion de masques, appelés aussi filtres locaux ou noyaux de convolution. Cette fois-ci, nous allons nous intéresser à un aspect plus géométrique du traitement de l'image puisque le thème de cet article repose sur des transformations de pixels.

En effet, qui dit coordonnées de pixel sous-entend repère (si possible orthonormé) et l'on peut appliquer des opérations géométriques aussi bien sur ce repère que sur ces pixels. Elles se résument souvent concrètement aux fameuses transformations linéaires de base comme la translation, la rotation ou l'homothétie (zoom). Ces transformations peuvent être appliquées dans l'espace des réels R comme celui des complexes C. Dans ce dernier cas, de nombreuses manipulations sont possibles et des effets spéciaux comme l'effet de loupe sont d'une simplicité déconcertante. Voyons comment mettre en oeuvre toute cette théorie !

Précautions de départ

Pour transformer une image en une autre, il faut prévoir une zone destination qui correspond à l'image finale. Nous considèrerons que cette zone est de même taille (largeur, hauteur) que l'image originale pour simplifier les explications. Dans toutes les opérations de ce genre, le processus consiste à parcourir linéairement, à l'aide de boucles imbriquées (en x,y) l'image destination et, à rechercher dans l'image source le pixel correspondant au vu de la transformation escomptée. Cette démarche paraît peu intuitive a priori, car l'on aurait plutôt tendance à parcourir l'image de départ, calculer la transformation du pixel courant puis, de le stocker à ses nouvelles coordonnées dans l'image finale. En fait, cette méthode est théoriquement possible, mais elle induit des artefacts dans l'image finale. Pourquoi ? Tout simplement parce que l'on n'est pas sûr qu'à chaque pixel de départ correspond son image (au sens mathématique) dans la zone de destination. En procédant, à l'inverse, le programme recherche, en fait, tous les antécédents de la transformation dans l'image source. Il faut donc appliquer l'opération inverse (Cf. fig. 1).

Traitement images
Figure 1

Une deuxième remarque concerne, la non-existence d'antécédents. Dans ce cas, il faut pouvoir fixer une valeur qui correspond à la valeur du fond. Le moyen le plus simple consiste à remplir, avant tout traitement, l'image avec la valeur de fond que l'on souhaite.

Rotation et translation d'images

La rotation d'image d'un angle A en degré, peut s'exprimer par la multiplication de tous ses points [x,y] par une matrice de rotation :

         [ cos(A) sin(A) ]
[X Y] =  [ x y ] *  [ -sin(A) cos(A) ]

A est l'angle de rotation en degré. Comme dans la plupart des langages, les arguments des fonctions trigonométriques sont exprimés en radians. Il faut opérer une transformation pour passer des degrés en radians :

Radian(A) = Degré(A)/180*3.1415

Les coordonnées (X,Y) sont les coordonnées du point antécédent au point (x,y) dans l'image originale. Si on applique seulement la rotation, l'image finale sera décalée, il faut donc inclure une translation pour changer le centre de rotation. De façon classique, on place le centre de rotation au milieu de l'image :

centrex = largeur /2
centrey = hauteur /2

Une translation s'exprime donc comme suit :

[X Y] = [ x +tx y+ty]

Algorithme de Rotation Centrée :

Fonction Rotation (Image source, Image destination, angle_degre, centrex, centrey)

DEBUT
    PI = 3.1415
    c = cos(angle_degre/180*PI)             /* Précalcul du cosinus */
    s = sin(angle_degre/180*PI)             /* Précalcul du sinus */
    Pour tout pixel j<hauteur Faire         /* parcours en colonne */
    Début
      col21 = (j-centrey) * s
      col22 = (j-centrey) * c
    Pour tout pixel i<largeur Faire     /* parcours en ligne */
      Début
        x = (i-centrex) * c - col21 + centrex
        y = (i-centrex) * s + col22 + centrey
        Prendre la valeur entière de x et y
        Si x>0 ET x<largeur ET y>0 ET y < hauteur Alors
           destination(i,j) = source(x,y)
        Sinon
            destination(i,j) = couleur fond
      Fin
    Fin
FIN

La figure 3 montre un exemple de rotation d'image d'un angle de 60 degré.

Traitement images
Figure 2

Traitement images
Figure 3

L'homothétie d'images

Cette transformation est encore plus simple que les précédentes et est basée sur les mêmes principes. Il suffit, pour agrandir une image de multiplier chacun des points par un facteur homothétique H et de regarder dans l'image source la valeur correspondante.

[X Y] =  H * [ x y ]

Il n'est pas exclu de multiplier la composante x par un facteur Hx et la composante y par un autre facteur Hy, auquel cas, nous obtenons ce que les mathématiciens appellent une similitude de l'image.

Rappel : nous parcourons l'image destination, donc, il faut opérer la transformation inverse :

Pour une rotation d'angle A, il faut fournir l'angle opposé (-A).
Pour une translation de Tx,Ty pixels, il faut indiquer (-Tx, -Ty).
Pour un zoom grossissant de coefficient H=3,il faut DIVISER les coordonnées par 3 ou les multiplier par 1/3 !

Optimisations possibles

Ces transformations étant linéaires, de nombreux auteurs ont proposé des améliorations en termes de rapidité de calcul par exemple, Weisman et coll (1980) ont décomposé la matrice de rotation en trois opérations simples en 1D appliquées séquentiellement sur l'image :

        [ 1 tan(A) ]    [ 1 0 ]                 [ 1/cos(A) 0 ]
    R = [ 0 1 ]         [ -sin(A).cos(A) 1 ]    [ 0 1 ]

Bref, il est à noter que les possibilités d'améliorer les performances sont grandes et variées et on peut imaginer de précalculer les tables de sinus/cosinus par exemple.

Un détour par les complexes

Nous avons vu comment effectuer des manipulations sur une image à partir des coordonnées de chaque point de l'image destination. Pour cela, les coordonnées cartésiennes auxquelles nous appliquions une transformation via une matrice étaient utilisées. Voyons maintenant, une autre façon de procéder en utilisant les coordonnées de chaque point sous forme de nombres complexes. Pour ceux qui ont gardé de mauvais souvenirs de leurs cours de maths, pas de panique. Voici justement le moment de comprendre à quoi peut servir ce genre de petites bêtes curieuses. Ceux qui par contre n'en n'ont jamais entendu parlé, voyez comme il est facile de faire des transformations avec ces nombres "imaginaires".

Les nombres complexes pas si complexes que ça !

Les coordonnées (x,y) d'un point forment un nombre complexe z tel que z = x i + y (i étant un nombre imaginaire tel que i*i = -1). Cette écriture n'est pas intéressante pour nous. Par contre, z peut aussi s'exprimer ainsi :

        z = r exp(iA)
avec:   r = sqrt(x*x+y*y)       (1)
        A = atan(y/x)

srqt est la fonction "Racine carrée" et atan est la fonction "arctangente".
r et A correspondent aux coordonnées polaires et nous pouvons revenir aux coordonnées (x,y) par :

    x = r cos(A)            (2)
    y = r sin (A)

Nous venons de voir comment passer de (x,y) à la forme z = r exp(iA) et inversement. Que se passe-t-il maintenant si l'on modifie r ou A ?

Les transformations complexes

Soit un point (x,y) de l'image destination exprimé sous la forme (r,A). En modifiant r ou A et en allant chercher le point correspondant (x',y') (2) dans l'image source, nous effectuerons toutes sortes de transformations variées et complexes.

Traitement images
Figure 4

a) Application à toute l'image :

Rotation de l'image d'un angle B :

r, A+B

Agrandissement de l'image d'un facteur n :

r*n, A

Diminution de l'image d'un facteur n :

r/n , A

Effet de vagues :

r + L cos(r), A

avec : L paramètre de la largeur des vagues

b) Transformation limitée à un cercle de rayon R

Effet loupe grossissante :

r*(cos(r/R*PI/2)*S+1), A

Traitement images
Figure 5

Loupe rétrécissante :

r/(cos(r/R*PI/2)*S+1), A

Effet Distorsion :

r, A+cos(r/R*PI/2)*N

avec N = nombre de tour

Traitement images
Figure 6

Traitement images
Figure 7

Traitement images
Figure 8

Effet Vagues :

r+S*cos(r/R*PI/2*N), A

Traitement images
Figure 9

avec N = nombre de vagues, S = facteur d'amplification.

Remarque : les calculs ne se font que pour r<R.

Avec toutes ses petites formules, il vous est ainsi possible de transformer des images grâce à des effets spéciaux très amusants. Ce ne sont que des exemples et la combinaison de ces effets peut donner des résultats impressionnants. Notons aussi, que ces transformations sont plus simples dans l'espace des complexes que dans celui des réels. Les paramètres peuvent être changés à volonté et donner lieu a des animations.

Conclusion

Nous avons étudié quelques transformations géométriques linéaires. Il en existe beaucoup d'autres, un peu plus complexes mathématiquement, mais qui permettent des déformations élastiques des images, c'est-à-dire que chaque point subit une loi de déformation différente de celle de son voisin. Ces transformations connaissent des applications courantes en CAO/DAO mais aussi dans le cadre des problématiques de recalage d'images. Ces problèmes consistent à faire, par exemple, correspondre deux acquisitions différentes d'un même objet en déformant l'un sur l'autre et de les comparer ensuite.

Je tiens à remercier chaleureusement Florent Dolidon dans l'aide qu'il m'a apportée lors de la rédaction de cet article et pour la relecture assidue du manuscript.


[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]