Vision des couleurs et cration dimages Pascal Lamboley
Vision des couleurs et création d’images Pascal Lamboley et Jean-Marcel Piriou
Sommaire l l l La vision des couleurs par l’œil humain La vision des couleurs chez les insectes, mammifères, primates Le RVB comme famille libre et génératrice des couleurs visibles? Couleurs additives, soustractives, monochromatiques Le format image PPM Gestion des transparences couleur
Vision des couleurs par l’œil humain: cônes et bâtonnets Bâtonnets (1 type): vision nocturne Cônes (3 types): vision diurne
Vision des couleurs par l’œil humain: spectres d’absorption des cônes (vision diurne) • Couleurs et convolution • Pigeons, insectes, mammifères non primates • Trichromie humaine et berceau africain • Daltonisme / Vision féminine • RVB libre et génératrice?
Vision et résolution Œil humain: pouvoir séparateur de 1. E-4 rad environ Écran de PC / station: 1280 x 1024 points, écran de 60 cm vu à 70 cm 7. E-4 rad Projecteur RVB: 1024 x 768 points, écran de 2 m vu à 7 m 3. E-4 rad Mammifères Œil du condor
Persistance rétinienne et animation Œil humain: persistance rétinienne de 1/20 s Cinéma muet: 16 images/s sensation de saccadé Cinéma actuel: 24 à 30 images/s dessins animés Vidéo: 30 images/s Site WEB W 3: de 5 à 15 images/s Un mouvement fluide demande plus de 23 images/s Quid du chien et de la mouche au cinéma?
La vision: un cocktail de plusieurs ingrédients Sens chromatique Résolution Renouvellement des images Vision du relief, du mouvement
Couleurs additives primaires: rouge, vert, bleu Téléviseurs, moniteurs, projecteurs
Couleurs soustractives primaires: cyan, magenta, jaune - Cyan = bleu + vert = blanc – rouge filtre le rouge! - Magenta = rouge + bleu = blanc – vert filtre le vert! - Jaune = rouge + vert = blanc – bleu filtre le bleu! Imprimantes, aquarelles
Lien couleurs additives / soustractives Les couleurs additives et soustractives primaires entretiennent entre elles une relation très simple: elles sont inverses vidéo!…
Couleurs monochromatiques Leur spectre est un Dirac à une longueur d’onde donnée Rayonnement monochromatique bleu: active le seul cône bleu Rayonnement monochromatique jaune: active également les cônes rouges et verts
Le format image PPM (Portable Pix. Map): une écriture directe des triplets RVB P 6# 600 400# 255# (255)(000)(000)(200)… # = retour chariot Pour une image de Nx points en X et Ny points en Y, la taille du fichier PPM associé sera de (3*Nx*Ny+ quelques octets pour l’en-tête) Exemple: 600 x 400 environ 720 ko
Exemple d’écriture de fichier PPM: dégradé de rouge program demo ! ! Taille de l'image. ! ix=600 ; iy=400 ! ! En-tête du fichier PPM. ! open(1, file='image_rouge. ppm', form='formatted') write(1, fmt='(a)') 'P 6' write(1, fmt='(2 i 6)') ix, iy write(1, fmt='(i 6)') 255 ! ! Ecriture des triplets RVB. ! do jy=1, iy do jx=1, ix zratiox=real(jx-1)/real(ix-1) ir=max(0, min(255, int(256. *zratiox))) iv=0 ib=0 write(1, fmt='(3 a)', advance='no') char(ir), char(iv), char(ib) enddo close(1) end
Exemple d’écriture de fichier PPM: RVB avec R+V+B constant program demo integer, allocatable : : irvb(: , : ) ! ! Taille de l'image. ! ix=600 ; iy=400 ; allocate (irvb(3, ix, iy)) ! ! Ecriture des triplets RVB. ! do jy=1, iy zratioy=real(jy-1)/real(iy-1) do jx=1, ix zratiox=real(jx-1)/real(ix-1) irvb(1, jx, jy)=max(0, min(255, int(256. *zratiox))) ! Rouge en X. irvb(2, jx, jy)=max(0, min(255, int(256. *zratioy))) ! Vert en Y. irvb(3, jx, jy)=max(0, min(255, 255 -irvb(1, jx, jy)-irvb(2, jx, jy))) ! Bleu: le complément à 1. enddo ! ! Ecriture du fichier PPM. ! call img_ecr('demo 3. ppm', ix, iy, irvb) end
Exemple de lecture / écriture de fichier PPM: filtrage program palette integer, allocatable : : irvb(: , : ) real, allocatable : : zchamp(: , : ) character*200 clppm 1, clppm 2 clppm 1='perroquet. ppm' clppm 2='demo 5. ppm' ! !------------------------! Lecture d'une image. !------------------------! call img_taille(clppm 1, ix, iy) ! Taille de l’image d’entrée. allocate (irvb(3, ix, iy)) ! Allocation du tableau des triplets RVB. call img_lec(clppm 1, ix, iy, irvb) ! Lecture des triplets sur le tableau irvb. ! !------------------------! Filtrage des 2/3 du bleu. !------------------------! do jy=1, iy do jx=1, ix irvb(3, jx, jy)=max(0, min(255, irvb(3, jx, jy)/3)) enddo ! ! Ecriture du fichier PPM. ! call img_ecr(clppm 2, ix, iy, irvb) end
Application au tracé de champs météorologiques 1. Colorisation de champs 2 D 2. Saisie de palettes externes 3. Fondus et transparences
1. Colorisation de champs 2 D program palette integer, allocatable : : irvb(: , : ) real, allocatable : : zchamp(: , : ) ! ! Taille de l'image. ! ix=8640 ; iy=4320 ; allocate (zchamp(ix, iy)) ; allocate (irvb(3, ix, iy)) ! !------------------------! Lecture du champ. !------------------------! open(1, file='relief_5 km. dta', form='unformatted') ; read(1) zchamp ; close(1) ! !------------------------! Application d'une palette. !------------------------! call palette_noir_vert_jaune_rouge(ix, iy, zchamp, irvb) ! ! Ecriture du fichier PPM. ! call img_ecr('demo 4. ppm', ix, iy, irvb) end
Subroutine palette_noir_vert_jaune_rouge(kx, ky, pchamp, krvb) Integer krvb(3, kx, ky) Real pchamp(kx, ky) Integer, parameter : : jppal = 4 Integer ipalette(3, jppal) ! ! Tabulation des points de passage. ! ipalette(1, 1)=000 ; ipalette(2, 1)=000 ; ipalette(3, 1)=000 ! Noir. ipalette(1, 2)=000 ; ipalette(2, 2)=255 ; ipalette(3, 2)=000 ! Vert. ipalette(1, 3)=255 ; ipalette(2, 3)=255 ; ipalette(3, 3)=000 ! Jaune. ipalette(1, 4)=255 ; ipalette(2, 4)=000 ; ipalette(3, 4)=000 ! Rouge. ! ! Extrêmes du champ réel d’entrée. ! zmin=minval(pchamp) ; zmax=maxval(pchamp) ! ! La valeur du champ est convertie en couleurs, ! Selon une ligne brisée comportant jppal points de passage. ! do jy=1, ky do jx=1, kx zpassage= real(jppal)*(pchamp(jx, jy)-zmin)/(zmax-zmin) ipassage=max(1, min(jppal, 1+int(zpassage))) ipassage 1=min(jppal, ipassage+1) zf=zpassage-int(zpassage) do jcoul=1, 3 zoctet= (1. -zf)*real(ipalette(jcoul, ipassage)) & & + zf* real(ipalette(jcoul, ipassage 1)) krvb(jcoul, jx, jy)=max(0, min(255, nint(zoctet))) enddo end
2. Exemple de saisie de palette externe
Exemple de saisie de palette externe
3. Epaisseur optique et gestion des transparences couleur
Epaisseur optique et gestion des transparences couleur a. F
Epaisseur optique et gestion des transparences couleur • Pour gérer une couche hémi-transparente, on peut souvent se placer dans un cadre plus simple: • On a un fond et un premier plan. • Le fond est défini en chaque point par sa couleur: Rf, Vf, Bf. • Idem premier plan: Rpp, Vpp, Bpp. • Si la transparence t est la même pour R, V et B, si l’émission est égale à l’absorption (loi de Kirchhof), et r=0 on obtient - R = (1 -t) Rpp + t Rf - V = (1 -t) Vpp + t Vf - B = (1 -t) Bpp + t Bf
Fondu: transparence fonction de l’abscisse
Transparence fonction de la nébulosité
Transparence fonction de la nébulosité
Transparence fonction de la nébulosité
Transparence fonction de la nébulosité
Passage PPM autres formats: usage de convert GIF JPG PS, EPS TIFF ETC!… PPM
Conclusions vision et base RVB 1. La vision colorimétrique humaine se ramène assez bien à trois degrés de liberté 2. Le format PPM permet de lire/écrire aisément des images via FORTRAN ou C 3. Convert permet de passer dans les deux sens de PPM aux autres formats GIF, JPG, TIFF, etc. . .
- Slides: 36