Obligement - L'Amiga au maximum

Vendredi 24 novembre 2017 - 21:18  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

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

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


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


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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Dossier : Le traitement d'images numériques - introduction
(Article écrit par Barrou Diallo et extrait d'Amiga News - septembre 1996)


Depuis ses tout débuts, l'Amiga a été une machine orientée vers les aspects graphiques et de nombreux logiciels et outils d'analyse d'image peuvent en témoigner. Sa conception, basée sur une architecture interne distribuée en microprocesseurs spécialisés dans l'affichage d'images et l'animation (les fameuses puces AGA et autres) ont fait de lui un leader incontestable dans le monde des arts graphiques et du cinéma. Parallèlement, de nombreux logiciels professionnels de traitement d'images sont nés et sont venus enrichir une logithèque d'outils graphiques déjà conséquente. Le traitement d'images, discipline vaste et complexe, reste aujourd'hui l'un des pôles d'activité les plus innovants et des plus prometteurs. Ses applications sont variées et vont de la simple amélioration d'images issues d'un scanner à des domaines scientifiques tels que la visionique, l'imagerie radar et satellite ou l'imagerie médicale.

Dans cette tribune, nous essayerons dans un premier temps de faire le point sur certaines techniques de traitement d'images et de poser les problématiques auxquelles sont confrontés les utilisateurs et les programmeurs. Les images que l'on souhaite traiter peuvent être d'origines diverses et variées comme je l'ai souligné plus haut mais, intrinsèquement, les moyens employés pour les traiter restent les mêmes. Les méthodes exposées sont généralistes et peuvent s'appliquer à tout type d'image.

Définition d'une image

Un objet mathématique

Une image peut être considérée comme un signal contenant une série de valeurs indépendantes et donc, on peut appliquer à l'image la quasi-totalité des opérations mathématiques (+, -, *, /) et logiques (ET, OU, NON, etc.). En additionnant deux images par exemple, on les parcourt et effectue la somme de chacune des valeurs deux à deux. Le résultat est l'incrustation d'une image sur l'autre. Cette incrustation prendra différentes formes selon l'opérateur utilisé :

Procédure OperationImage (image1, image2, ImageDestination, Opération)
  début
    Pour tout pixels x,y faire
        ImageDestination (x,y) = Appliquer(Opération, image1, image2)
  fin

Exemple de la fonction Emboss

La fonction Emboss commune à beaucoup de logiciels d'imagerie peut donner des résultats très impressionnants et cela de façon simple. Elle consiste à décaler une image de tx pixels horizontalement et de ty pixels verticalement, à effectuer le négatif de l'image et enfin à additionner l'image de départ à celle transformée. Nous pouvons résumer cela par ce petit algorithme en pseudo-code :

Procedure EmbossImage (ImageSource, ImageDestination, tx, ty)
    début
      temporaire1 = DecaleImage (ImageSource, tx, ty)
      temporaire2 = NegatifImage (temporaire1)
      Imagedestination = AdditionneImage(ImageSource, temporaire2)
    fin

La figure 2 représente l'application de cette opération sur une image de microscopie électronique à balayage d'un insecte (figure 1).

Traitement images
Figure 1

Traitement images
Figure 2

Les formats d'images

Les images couramment utilisées sont codées dans des formats compressés afin qu'elles occupent le moins de place possible sur disque. C'est le cas des formats IFF, GIF ou JPEG par exemple. Il est à préciser que ce dernier possède un très bon taux de compression mais introduit une perte d'informations qui peut être importante en traitement d'images. Il est donc à éviter. Pour effectuer un traitement, il est d'usage de transformer les images de leur format original en un format simple. Le format le plus canonique est celui où tous les points de l'image sont stockés de façon continue sur un octet dans un fichier sans entête. C'est ce qu'on appelle le format RAW ou brut. Les logiciels comme ADPro effectuent cette conversion sans problèmes. Souvent les images sont codées en couleur et les traitements sont prévus pour fonctionner en niveaux de gris (ou luminance). Concrètement, cette distinction ne pose pas de problème et les opérations effectuées sur une composante (le niveau de gris) doivent être répétées pour les composantes couleur (R, G et B).

Le codage de la couleur

Il est de plus en plus fréquent d'utiliser des images en 24 bits (16 millions de couleurs). Chacun des canaux de couleur comporte une valeur et la composition de ces trois valeurs forme la couleur finale. Malgré tout, pour simplifier les explications, nous considèrerons que l'image ne comporte qu'un canal de gris et donc voyons comment passer de la couleur en gris :

Le moyennage (blur)

La façon la plus simple est moyenner les valeurs des composantes en ne tenant pas compte de la luminosité de chacun des canaux : gris = (R + G + B ) / 3

La transformation NTSC

Elle consiste en l'additionner des composantes RGB en les pondérant par des valeurs suivantes : gris = 0.299 * R + 0.587 * G + 0.114 * G

Ce codage en niveaux de gris est utilisé en vidéo et télévision et permet d'obtenir le meilleur rendu final. Le parcours de l'image et les calculs en flottant étant très consommateurs de temps machine, je vous propose cette petite macro C qui effectue la même chose en entier :

#define RGB_TO_GRAYSCALE(r,g,b) ( ( (r*11) + (g<<4) + (b*5) ) >>5)

Cette série de décalage est évidemment bien plus rapide que le passage en virgule flottante que nous impose la formule de base.

Beaucoup d'opérations sur les images s'effectuent grâce à ce que les spécialistes appellent des masques de convolution. Derrière ce nom technique se cache une méthodologie importante : la notion d'environnement. Concrètement, on parcourt tous les pixels de l'image et le programme applique une opération qui prend en compte un certain voisinage du pixel courant. Ce voisinage est aussi appelé fenêtre ou masque de convolution. La valeur finale du pixel courant sera donc remplacée par une opération locale et faisant intervenir ses voisins. Ainsi, la plupart des algorithmes prennent en paramètre un masque binaire qui décrit les pixels voisins qui doivent intervenir dans les calculs (ceux à 1) et ceux dont la valeur n'intervient pas (ceux à 0).

Exemples de masque 3x3 :

        111        101         111
  (1)   111   (2)  010    (3)  101
        111        101         111

Dans le cas (1), tous les pixels sont pris en compte. Le masque (2) est un masque dit "en croix", le masque (3) ne fait, lui, jamais intervenir le pixel courant dans les calculs. Seul inconvénient de cette méthode : la gestion des bords. En effet, pour un masque 3x3, il faut commencer le traitement à la 2e ligne et à la 2e colonne de l'image et s'arrêter à l'avant-dernière ligne et avant dernière colonne. Cela a pour conséquence l'apparition d'une bande noire autour de l'image. Une des solutions consiste à copier tout autour de l'image (là où l'algorithme n'ira jamais les valeurs sont à 0) les valeurs correspondant à l'original.

La réduction du bruit

Les images sont souvent encombrées d'artefacts dus aux procédés d'acquisition ou à des algorithmes de compression malveillants. Pour pouvoir réduire des défauts que l'on nomme "bruit", des algorithmes basés sur des masques de convolutions sont utilisés. Pour plus de clarté dans le reste de l'exposé, nommons chacun des pixels d'un masque 3x3, sachant qu'un masque peut être de taille supérieure (5x5, 7x7 ou 11x11) :

                    ( P1   P2   P3 )
Masque type :       ( P4   P5   P6 )
                    ( P7   P8   P9 )

P5, le pixel courant, est le centre du masque.

Le filtre moyenneur

Il consiste simplement à remplacer tous les pixels de l'image par la moyenne arithmétique de leur valeur et de celle de leurs voisins. Le voisinage est défini comme plus haut et on choisit le pixel dont le correspondant dans le masque est à 1. Valeur pixel = (P1+P2+...+P8+P9) / 9

La moyenne peut être pondérée et favoriser l'entourage du pixel par ce filtre :

             (   0    1/8  0    )
Valeur =     (   1/8  1/4  1/8  )
             (   0    1/8  0    )

Bien sûr cette moyenne doit être, en fin de calcul, transformée en valeur entière tenant sur 1 octet non signé (de 0 à 255) afin de former de nouveau une image visible à l'écran.

Le filtre médian

Il consiste à calculer la médiane des valeurs du voisinage du pixel courant par exemple :

Médiane de (2, 5, 8) = 5
Médiane de (10, 12, 17) = 12

Ce filtre est moins destructif que le filtre moyenneur et élimine plus efficacement le bruit. Pour exemple, la figure 3 est le résultat de l'application de ce filtre médian sur une image bruitée au départ (figure 1).

Traitement images
Figure 3

Le réhaussement de contraste

Les caractéristiques visuelles des images peuvent être améliorées grâce à l'application de transformations sur leur histogramme. Un histogramme est un graphique qui présente le niveau de gris en abscisse et en ordonnée, le nombre de fois ce niveau de gris apparaît dans l'image. Prenons par exemple l'histogramme de la figure 1. On peut considérer qu'il reflète trois populations (A, B et C) de pixels séparées par les frontières F1 et F2. Le but d'une segmentation, par exemple, serait de retrouver automatiquement ces frontières. Parfois, la dynamique de l'image n'occupe pas toute la plage disponible (0 à 255) et donc un réhaussement de contraste consisterait à reétaler les niveaux de gris par une simple règle de 3 : valeur = ((valeur courante -Min) /Max ) * 255

Avec Min et Max, les minimum et maximum globaux de l'image.

Traitement images

La figure 5 représente un cliché de cerveau humain acquis en Résonance Magnétique Nucléaire. Les acquisitions sont souvent très peu contrastées comme on peut le constater sur cette planche. La figure 6 montre la même image après reéchelonnage de la dynamique par la méthode présentée ci-dessus, et l'on peut observer une nette amélioration dans le contraste global de l'image.

Traitement images
Figure 5

Traitement images
Figure 6

Il existe bien d'autres méthodes : les valeurs de niveaux de gris peuvent aussi être reéchelonnées par une fonction linéaire du type : f(valeur) = a*valeur + b

Les coefficients a et b représentent donc la transformation que l'on veut appliquer aux niveaux de gris. Par cette formule, il arrive que les valeurs calculées dépassent 255 ou soient inférieures à 0 et dans ce cas, il faut les fixer à 255 ou 0.

Conclusion

Nous avons exposé brièvement et de façon applicable quelques algorithmes de traitement d'images et les bases de départ pour des programmes plus compliqués. Voici les différents thèmes qui pourront, à partir de cette introduction, être étudiés :
  • La binarisation d'images et la détection de contours,
  • La segmentation automatique et la reconnaissance d'objets,
  • La segmentation hiérarchique et la vectorisation.
En attendant, je me permets de vous conseiller quelques petites lectures intéressantes :

M.C. Coster et J.L. Chermant : Précis d'analyse d'images, Editions du CNRS, 1985.
A.K. Jain : Fundamentals of Digital Image Processing, Prentice-Hall, 1989.


[Retour en haut] / [Retour aux articles] [Article suivant]