Vision des couleurs et création d’images Pascal Lamboley et Jean-Marcel Piriou
Sommaire 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 Couleurs et convolution Pigeons, insectes, mammifères non primates Pigeons, insectes, mammifères non primates Trichromie humaine et berceau africain Trichromie humaine et berceau africain Daltonisme / Vision féminine Daltonisme / Vision féminine RVB libre et génératrice? 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: 1280x1024 points, écran de 60 cm vu à 70 cm 7.E-4 rad Projecteur RVB: 1024x768 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 W3: 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 Couleurs additives primaires: rouge, vert, bleu Téléviseurs, moniteurs, projecteurs
Couleurs soustractives 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 PixMap): une écriture directe des triplets RVB P6# # 255# (255)(000)(000)(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: 600x400 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)') 'P6' write(1,fmt='(2i6)') ix,iy write(1,fmt='(i6)') 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='(3a)',advance='no') char(ir),char(iv),char(ib) enddo 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 enddo ! ! Ecriture du fichier PPM. ! call img_ecr('demo3.ppm',ix,iy,irvb) end
Exemple de lecture / écriture de fichier PPM: filtrage program palette integer, allocatable :: irvb(:,:,:) real, allocatable :: zchamp(:,:) character*200 clppm1,clppm2 clppm1='perroquet.ppm' clppm2='demo5.ppm' ! ! ! Lecture d'une image. ! ! call img_taille(clppm1,ix,iy) ! Taille de l’image d’entrée. allocate (irvb(3,ix,iy)) ! Allocation du tableau des triplets RVB. call img_lec(clppm1,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 enddo ! ! Ecriture du fichier PPM. ! call img_ecr(clppm2,ix,iy,irvb) end
Application au tracé de champs météorologiques 1.Colorisation de champs 2D 2.Saisie de palettes externes 3.Fondus et transparences
1. Colorisation de champs 2D 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_5km.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('demo4.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))) ipassage1=min(jppal,ipassage+1) zf=zpassage-int(zpassage) do jcoul=1,3 zoctet= (1.-zf)*real(ipalette(jcoul,ipassage)) & & + zf* real(ipalette(jcoul,ipassage1)) krvb(jcoul,jx,jy)=max(0,min(255,nint(zoctet))) enddo 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 aF
Epaisseur optique et gestion des transparences couleur 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 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.
Fondu: transparence fonction de l’abscisse
Transparence fonction de la nébulosité
Passage PPM autres formats: usage de convert GIFJPG TIFF PPM PS, EPS ETC!…
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...