Infographie et Image Informatique Introduction
Transcription
Infographie et Image Informatique Introduction
Infographie et Image Informatique Gérard-Michel COCHARD [email protected] Sébastien CHOPLIN [email protected] Introduction 1. Image matricielle et image vectorielle 1. Image matricielle 2. Image vectorielle 2. Couleur 1. Niveaux de gris 2. Couleurs 3. Couleur vraie et couleur indexée 3. Modes de représentation des images 1. Codage matriciel 2. Codage vectoriel 3. Courbes fractales 4. Compression et compactage 5. Formats et standards 1. Formats d'image matricielle 2. Formats d'image vectorielle 1. Image matricielle et image vectorielle Les images numériques, destinées à être visualisées sur les écrans d'ordinateur, se divisent en 2 grandes classes : les images matricielles et les images vectorielles. 1. Image matricielle Encore appelée image bitmap, l'image matricielle se représente sous forme d'une matrice de points (image binaire : points allumés et points éteints; image couleur : points de couleur définie). Ces points codés sont rangés en lignes et en colonnes avec la correspondance simple suivante : un élément de la matrice (point codé) correspond à un point de l'écran de l'ordinateur. Les avantages principaux de l'image matricielle sont les suivants : ■ ■ ■ ■ ■ Les mécanismes d'affichage sont simples du fait du codage des points; le dispositifs principaux de visualisation sont d'ailleurs des dispositifs qui affichent des suites de points (balayage). Les images complexes ne peuvent être codées que sous forme matricielle, la disposition des points de l'image ne suivant pas nécessairement un ordre logique. L'application d'algorithmes de traitement d'image est facilitée par la structure matricielle de l'image La conversion de format est également facilitée puisque elle se résume à une transformation matricielle Chaque partie d'une image matricielle est, en principe, indépendante d'une autre partie non jointive; par suite une dégradation d'une partie de l'image n'entraîne pas la dégradation totale de l'image. Les inconvénients principaux sont les suivants : ■ ■ L'image matricielle contient un nombre fixe de points appelé résolution (nombre de points par ligne x nombre de points par colonne); un dispositif de restitution contient, lui-aussi un nombre fixé de points qui constitue une résolution généralement différente de la première. Les modifications spatiales d'une image matricielle, simples dans leur principe, impliquent toutefois un temps de calcul important et présentent certains problèmes : perte d'information par réduction de taille, effets d'escalier, ... ■ ■ Dans une image matricielle, le nombre de points à traiter est très grand, ce qui rend nécessaire l'emploi de processeurs performants. Les fichiers bitmap sont de gros consommateurs d'espace mémoire; un document de haute résolution nécessite couramment une dizaine de Mo par image ! 2. Image vectorielle L'image vectorielle est adaptée au travail sur des objets dont on connaît les paramètres de traçage ; elle est décrite en termes de formes élémentaires : lignes, cercles, rectangles, splines, courbes de Bézier, .... Les formes sont décrites par des attributs géométriques et par des attributs d'épaisseur, de couleur, de type, .... Une opération d'affichage ou d'impression nécessite une conversion en mode point (calculs) à cause des périphériques qui sont généralement en mode point. Les avantages de l'image vectorielle sont les suivants : ■ ■ ■ ■ Indépendance vis à vis des périphériques : une image vectorielle est une image symbolique interprétable (théoriquement) par chaque type de périphérique. Les modifications spatiales de l'image sont relativement souples car elles consistent en opérations géométriques ne conduisant pas à la perte d'information. L'image vectorielle est bien adaptée aux travaux de schématique : CAO, DAO. La taille d'une image vectorielle n'est fonction que de sa complexité; une image très complexe est de l'ordre de 1 à 2 Mo. Les inconvénients sont les suivants : ■ ■ Les images d'origine analogique comme les photographies sont difficilement transformées en images vectorielles du fait de leur complexité. L'affichage implique des calculs car il faut transformer l'image vectorielle en une image matricielle. Un fichier vectoriel est en fait un programme; une dégradation d'une partie du fichier est désastreuse (un fichier en mode " texte " comme un fichier Postscript permet d'atténuer cette difficulté). 2. Couleur La couleur d'un objet dépend de sa géométrie, de la source de lumière qui l'éclaire, de l'environnement, du système visuel humain. L'appréciation d'une couleur comprendra donc une partie subjective et une partie objective. 1. Niveaux de gris L'image est caractérisée par une quantité de lumière affectée à chaque point et correspondant à un niveau de gris mesuré par une intensité. Il est commode d'associer une échelle quantitative aux niveaux d'intensité : 0 pour le noir, 1 pour le blanc. Entre les deux il y a les gris. Supposons que l'on veuille définir n intensités différentes, du noir vers le blanc. Soit I0 l'intensité la plus basse( noir), et 1 l'intensité la plus forte (blanc). Les différents niveaux sont : I0=0, I1=rI0, I2=rI1=r2I0, ... , Donc r=(1/I0)1/(n-1) et In-1=rn-1I0=1 Ij=rjI0=I0(n-1-j)/(n-1) Mais les écrans élémentaires sont biniveaux (point allumé ou éteint). Comment, dans ce cas, rendre compte des niveaux de gris (halftone)? Le problème se pose, par exemple, pour la reproduction de photographies noir/blanc sur des journaux. La solution est de tracer des points "circulaires" noirs dont l'aire est proportionnelle à la noirceur 1 - I. Les écrans graphiques sont des surfaces à pointillisme : pour remplacer les petits disques de rayon variable, on groupe les pixels en blocs carrés. Chacun de ces blocs rend compte d'une nuance de gris. Ainsi, pour de blocs 2x2, on a 5 niveaux : Pour des blocs 3x3, on a 10 niveaux d'intensité : Plus généralement, avec des blocs nxn, on peut représenter n2 +1 niveaux d'intensité. On peut synthétiser cela avec une matrice de seuil : 684 D(3) = 1 0 3 527 dont la signification est simple : on allume tous les pixels dont la valeur de l'intensité est inférieure à l'intensité I. Pour n = 2, la matrice de seuil est : D(2) = 02 31 On peut définir les matrices de seuil par une loi de récurrence permettant de calculer D(n) en fonction de D(n/2) et de U(n/2) qui est une matrice carrée de 1 à n/2 lignes et n/2 colonnes. D(n) = 4D(n/2)+D(2)00U(n/2) 4D(n/2)+D(2)01U(n/2) 4D(n/2)+D(2)10U(n/2) 4D(n/2)+D(2)11U(n/2) En appliquant cette relation, on obtient en particulier : 0 8 2 10 12 4 14 6 D(4) = 3 11 1 9 15 7 13 5 Précision: Proposons de trouver les éléments de ma matrice D(4) (4 lignes et 4 colonnes : représentation de 17 nuances). La relation de récurrence s'écrit dans ce cas concret : D(4) 4*D(2)+0*U(2) 4*D(2)+2*U(2) U(2) 1 1 D(2) 0 2 avec : et = = = 4*D(2)+3*U(2) 4*D(2)+1*U(2) 11 31 L'élément (en fait un groupe de 4 éléments ) situé en bas à gauche de la matrice D(4) sera ainsi : 4*D(2)+3*U(2) = 4* 02 11 0 8 33 3 11 +3* = + = 31 11 12 4 33 15 7 En agissant ainsi pour les autres groupes d'éléments, on obtient bien la matrice D(4) indiquée dans le cours. 2. Couleurs Produire des images avec des effets de transparence, des textures, des ombrages, nécessite une grande quantité de couleurs qu'il faut évidemment coder. Rappelons que la lumière est une onde électromagnétique qui possède une distribution spectrale en fréquence ou en longueur d'onde. La lumière visible (par l'oeil humain) correspond à un spectre compris entre 380 et 770 nanomètres (de l'ultra violet à l'infra rouge). Une lumière monochromatique correspond à une longueur d'onde bien précise (en fait à une bande de largeur 1 nanomètre). On montre expérimentalement que l'on peut reconstituer toute lumière visible à partir de trois lumières monochromatiques bien choisies, appelées couleurs primaires. En 1931, la CIE (Commission Internationale de l'Energie) a défini trois courbes spectrales x( λ), y(λ), z(λ) (en particulier y(λ) est la courbe de sensibilité de l'oeil) Pour une lumière de distribution spectrale P(λ), on a : X = ∫ P(λ) x(λ) d λ Y = ∫ P(λ) y(λ) d λ Z = ∫ P(λ) z(λ) d λ Le trois nombres X,Y,Z caractérisent la couleur de distribution P(λ) et sont appelés les valeurs de trichromicité. Par suite, à toute couleur correspond un vecteur dans un espace à trois dimensions : C = X.x' + Y.y' + Z.z' où x', y', z' sont des vecteurs unitaires représentatifs de chaque couleur primaire. On peut normaliser en posant x = x'/(x'+y'+z') y = y'/(x'+y'+z') z = z'/(x'+y'+z') On a donc x + y + z = 1, ce qui permet de calculer z en fonction de x et y. Les trois couleurs primaires X, Y, Z sont reliées linéairement aux couleurs primaires plus naturelles R, V, B (rouge, vert, bleu) : X 2,7690 1,7518 1,1300 R Y = 1,0000 4,5907 0,0601 x V Z 0,0000 0,0565 5,5943 B Remarque: ceci est un produit matriciel qui revient à dire que : X = 2,7690 R + 1,7518 V + 1,1300 B Y = 1,0000 R + 4,5907 V + 0,0601 B Z = 0,0000 R + 0,0565 V + 5,5943 B Pour la lumière visible, le diagramme de chromaticité du CIE est donné ci-contre Pour désigner les couleurs en informatique graphique, on peut utiliser plusieurs modèles. 1. Le modèle RVB ou RGB (Rouge, Vert, Bleu) Les trois axes correspondent aux couleurs primaires Rouge, Vert, Bleu. La diagonale principale représente les niveaux de gris. Ce modèle prend toute son importance au niveau de moniteurs de télévision et des écrans à balayage; en effet, c'est par superposition de rouge, de vert et de bleu que l'affichage couleur est réalisé. 2. Le modèle CMJ ou CMY (Cyan, Magenta, Jaune) Les couleurs primaires sont ici les complémentaires des précédentes. Ce système utilisé par certaines imprimantes couleurs à impact, à jet d'encre; on parle alors de quadrichromie ou de modèle CMYK (K pour noir !) : 4 cartouches d'encre sont nécessaires à l'impression couleur, la cartouche d'encre noire permet d'obtenir un noir parfait, le mélange des autres couleurs ne donnant pas un résultat satisfaisant. 3. Le modèle YIQ Il s'agit d'un recodage de RGB par NTSC (National Television Standards Committee): Y 0,30 0,59 0,11 R I = 0,60 -0,27 -0,32 x V Q 0,21 -0,52 0,31 B 4. Le modèle TSL (Teinte, Saturation, Luminance) ou HSV (Hue, Saturation, Value) Plus proche de la perception de la couleur, ce modèle utilise un espace en forme d'hexagone dont l'axe est celui de la luminance L . Pour L = 1, on a les couleurs d'intensité maximale. La teinte T est donnée par l'angle entre l'axe rouge et un point de l'hexagone. La saturation S est donnée par la distance entre l'axe de la luminance et un point de l'hexagone 5. Le modèle TSI (Teinte, Saturation, Intensité) ou HLS (Hue, Lightness, Saturation) Ce modèle, également proche de la perception de la couleur utilise un espace en forme de double cône. L'axe allant du noir au blanc est l'axe de l'Intensité; la teinte est déterminée par l'angle polaire et la saturation par le rayon polaire. 3. Couleur vraie et couleur indexée On peut diviser les systèmes graphiques en deux catégories : ■ ceux qui codent un pixel sur 16, 24 ou 32 bits. On parle dans ce cas de "vraie ■ couleur". En effet, avec 24 bits, on peut avoir 16,7 millions de nuances colorées ce qui est largement au-dessus de la sensibilité de l'oeil, mais utile pour la retouche photographique par exemple. ceux qui codent un pixel sur 8 bits ou moins. On peut avoir au maximum 256 nuances. Toutefois, avec la technique de la palette, on peut obtenir le même nombre de couleurs que précédemment. On parle alors de couleur indexée. Expliquons en le mécanisme. Dans tous les modèles précédents, la couleur est codée avec trois nombres. Si un pixel est codé sur p bits, on peut obtenir 2p couleurs différentes à l'affichage: ■ p = 8 correspond à 256 couleurs, suffisant pour des graphiques, mais pas pour des images réalistes ■ p = 24 correspond à 16 millions de couleurs : très satisfaisant, mais place importante de l'image, d'où la notion de palette de couleur : les p bits ne représentent plus une couleur mais une adresse dans une table de couleurs (palette); l'élément correspondant de la table, codé sur b bits, représente une couleur. Pour p = 12 bits, on a 212 adresses, soit 4096 adresses; les éléments de la palette peuvent être de longueur b = 3x8 (pour les trois doses de couleurs primaires) et représentent donc 4096 couleurs parmi 16 millions. 3. Modes de représentation des images 1. Codage matriciel 1. Codage brut par point Un écran étant une matrice de pixels, on représente une image par une matrice dont chaque élément code un pixel; ainsi si une image possède m lignes et n colonnes, donc m.n points ou pixels : ■ ■ image binaire (pixels noirs ou blancs) : 1 pixel est codé sur 1 bit (0 ou 1) --> matrice de m.n bits image à nuances de gris (2l nuances) : 1 pixel est codé sur l bits --> matrice de m.n.l bits image couleur (2l quantités de R, V, B) : 1 pixel est codé sur 3.l bits --> 3 matrices de m.n.l bits Donnons quelques ordres de grandeur : pour une image 512x512 pixels : ■ image binaire : fichier de 32 Ko ■ image à 256 nuances de gris : chaque pixel étant codé sur 8 bits, on a un fichier de 256 Ko ■ image à 256 nuances de R,V,B : le fichier est équivalent à 3 fois le précédent : fichier de 768 Ko. On constate que pour des images de haute qualité (beaucoup de couleurs, haute définition), les fichiers images seront très volumineux d'où la nécessité de les compresser. ■ 2. Codage par plage Le principe consiste à ne pas répéter des suites de points identiques se situant sur une même ligne. En se basant sur la figure ci-dessous, on obtient le codage suivant : ligne * (B,21) ligne ** (B,6) (N,7) (B,8) ligne *** (B,5) (N,5) (B,3) (N,5) (B,3) ligne **** (N,3) (B,2) (N,4) (B,2) (N,3) (B,1) (N,3) (B,3) ligne ***** (B,1) (N,1) (B,1) (N,1) (B,1) (N,1) (B,1) (N,1) (B,1) (N,1) (B,1) (N,1) (B,1) (N,1) (B,1) (N,1) (B,1) (N,1) (B,3) 3. Arbres quaternaires (Quad Trees) Un arbre quaternaire résulte de la division d'une image, supposée carrée, en 4 quadrants; chaque quadrant est à son tour divisé en 4 sous-quadrants et ainsi de suite. La figure cidessous explicite le principe du codage par arbre quaternaire. ■ ■ liste ordonnée des pixels noirs : 030 031 032 033 120 121 122 123 132 210 211 213 300 301 302 310 liste compactée : 4 codes consécutifs ne différant que par les premiers chiffres du code, on met x comme dernier chiffre : 03x 12x 132 210 211 213 300 301 302 310 2. Codage vectoriel 1. Description dynamique Elle s'exprime sous forme des programmes de tracé : 2. Codage de Freeman Sous sa forme la plus simple, le codage de Freeman décrit un pixel par rapport au pixel précédent par la direction du tracé. 8 directions de base sont définies : ■ ■ codage simple : 5 4 5 6 6 4 4 3 2 2 2 2 1 1 0 0 6 7 7 codage à répétition : (5,1) (4,1) (5,1) (6,2) (4,2) (3,1) (2,4) (1,2) (0,2) (6,1) (7,2) 3. Courbes fractales Les courbes fractales, introduites par B. Mandelbrot (1975), consistent à répéter un même motif des milliers de fois, avec, en général l'introduction d'une facteur aléatoire dans le processus de génération. On les utilise en rendu réaliste, notamment pour réaliser des effets de texture. Si, au lieu d'utiliser un facteur aléatoire, on utilise des règles bien définies, on parle alors de courbes graftales. La figure ci-dessous donne un exemple de construction d'une courbe fractale. 4. Compression et compactage Une image matricielle 640x480 en 256 couleurs (codage sur 8 bits) représenterait 307 Ko environ. 4 images satureraient donc une disquette courante de 1,4 Mo. La numérisation d'images animées implique des problèmes plus sérieux: pour des images du type précédent et une fréquence vidéo de 25 images/s, une séquence d'une seconde occuperait près de 8 Mo et une séquence d'une heure 27,6 Go. Par ailleurs, le taux de transfert des supports magnétooptiques comme les CD-ROMs est de l'ordre de 300 Ko/s. Il devient donc indispensable de "réduire" la taille des images dans un rapport d'environ 27. Pour une image de qualité photographique (16 M de couleurs codées sur 24 bits), il faut 3 fois plus, soit un facteur de compression de 75. Par ailleurs, la capacité d'un CD-ROM est limitée à 650 Mo, ce qui permet de stocker seulement 2000 images non compressées, soit 1 min 30 sec de vidéo! Il est donc incontournable de réduire la taille des images pour des raisons de taille et de débit. La réduction de la taille des images appartient à deux classes de méthodes : le compactage (réduction du volume sans perte d'information) et la compression (réduction du volume avec perte d'information). Les techniques employées reposent sur les méthodes suivantes : ■ ■ ■ élimination des redondances : emploi d'un facteur de répétition élimination de certaines informations : suppression des détails les moins perceptibles pour les images animées, enregistrement seulement des différences entre deux images successives. On trouvera ci-dessous une description sommaire de quelques techniques courantes; on se reportera au chapitre 6 pour plus de détails. ■ ■ ■ codage RLC (Run Length Coding) : toute suite d'octets identiques est remplacée par l'octet suivi du nombre d'occurrences (par exemple sur 3 octets); ainsi la séquence 666666666 est codée 6/9. codage de Huffman : le principe est le codage statistique de blocs de bits sur un nombre variable de bits en fonction de la fréquence d'apparition des blocs. Les blocs peu fréquents auront un codage " long " et les blocs très fréquents, un codage " court ". Bien entendu, il est nécessaire d'effectuer une première passe pour calculer les fréquences. codage LZW (Lempel, Ziv, Welch) : des blocs répétitifs de bits sont répertoriés dans une table et codés par leur adresse dans cette table. Un important processus de normalisation a été effectué ces dernières années ce qui a permis d'aboutir aux normes JPEG pour les images fixes et MPEG pour les images animées; ces normes impliquent l'emploi de plusieurs procédés de compression. 5. Formats et standards Les modes de codage des images numériques sont malheureusement très nombreux ; certains se sont toutefois imposés comme " standards " de fait; par ailleurs des processus de normalisation sont en cours. Nous passons en revue ci-dessous les formats d'image numérique les plus courants. Formats d'image matricielle ■ ■ ■ ■ ■ ■ ■ BMP origine Microsoft pour Windows 3.x; environnement PC; de plus en plus répandu PCX origine Paintbrush de Z-soft; utilisé en environnement PC; permet de traiter des images 8 bits; non adapté aux images 16, 24, 32 bit; algorithme de compression : RLC GIF assez répandu; d'origine Compuserve; utilisé dans un environnement PC; codage effectué sur 8 bits (256 couleurs); algorithme de compression : LZW TIFF origine Aldus et Microsoft, pour les images scannées; utilisé en environnement PC et Mac; plusieurs algorithmes de compression : RLC, LZW PICT format de base de QuickDraw de Mac; traite aussi le vectoriel; environnement Mac TGA origine Truevision; algorithme de compression RLC; environnement PC FAX utilisé pour la transmission de documents (télécopie); codage binaire; application d'un codage RLC puis d'un codage de Huffman 2. Formats d'image vectorielle ■ ■ ■ ■ ■ ■ ■ PICT déjà mentionné plus haut DXF origine Autocad, standard en CAO; adapté au travail en 2D; connu et très répandu HPGL origine Hewlett Packard; format répandu pour les périphériques de traçage EPS origine : format du langage Postscript pour Adobe; environnement PC et Mac CGM format dérivé de GKS; universel, normalisé IGES permet l'échange de données en CAO; environnement des stations de travail EDIGEO adapté à la cartographie; normalisé par l'AFNOR Bibliographie J.P. COUWENBERGH L'indispensable pour maîtriser la couleur Coll. Marabout FOLEY, VAN DAM, FEINER, HUGHES Computer Graphics Addison Wesley Ch. LEPECQ et N. RIMOUX Les fichiers graphiques sur ordinateurs Armand Colin S. RIMMER Gérer vos fichiers graphiques Addison Wesley Y. GARDAN, M. LUCAS Techniques graphiques intéractives et CAO Hermes M.KUNT,G.GRANDLUND,M.KOCHER Traitement numérique des images Presses Polytechniques et Universitaires Romandes