SNT Photo Profondeur

Identification

Infoforall

3 - Profondeur d'une image


Dans l'activité précédente, nous avons vu comment encoder l'information image sous forme d'une image NOIR et BLANC.

Il est temps de voir comment faire de même avec plus de nuance de couleur !

Cela vous permettra également d'estimer le nombre de photos que vous pouvez placer sur la carte mémoire de votre smartphone !

Logiciels nécéssaires : Gimp, un éditeur de texte (bloc-note, notepad...)

Documents de cours : open document ou pdf

Il faudra pouvoir voir les extensions de vos fichiers. Windows a tendance à ne pas afficher les extensions des fichiers dont il connait la nature. Pour les afficher :

  • Panneau de configuration
  • Apparence
  • Options des dossiers
  • Afficher l'extension des fichiers dont on connait la nature

1 - Image en noir et blanc

L'image la plus facile à encoder est l'image NOIR et BLANC.

On peut prendre un encodage facile, du type

  • 0 pour BLANC
  • 1 pour NOIR

On peut créer facilement ce genre d'image à l'aide d'un simple éditeur de texte comme Notepad ou autre.

Attention, on parle bien d'éditeur et pas de traitement de texte. Les traitements de texte rajoute des informations en plus du simple texte dans le fichier. Vous ne parviendriez pas nécessairement à créer votre image.

Comme nous l'avons vu dans l'activité `Télévision` il faut donner :

  • Le type d'encodage (ici P1)
  • Le nombre de pixels sur une colonne, suivi d'un espace et du nombre de lignes (ici 3 2)
  • La couleur voulue sur chaque pixel dans l'ordre 'humain' : on considère une suite de pixels correspondant à la façon dont on lit un livre : de gauche à droite et de haut en bas : 110001
    • 0 pour BLANC
    • 1 pour NOIR

01°Représenter l'image encodée avec le fichier ci-dessous.

P1 3 2 110001

...CORRECTION...

02° Ouvrir un éditeur de texte.
Copier le code ci-dessous.
Enregistrer le fichier dans un dossier connu sous le nom image1.bpm.
Ouvrir l'image avec le logiciel libre GIMP ou un autre logiciel de traitement d'images.

Dans le menu AFFICHAGE, sélectionner ZOOM à 1600% pour espérer voir cette petite image de 9 pixels de large.

P1 9 7 110000011 011000110 001101100 000111000 001101100 011000110 110000011
Visuel provoqué par le fichier image1.bpm
Résultat image P1
Profondeur d'une couleur

Définition  la profondeur d'une couleur correspond au nombre de bits nécessaires pour encoder la couleur d'un pixel.

L'unité de la profondeur est le bpp, bit per pixel en anglais, bit par pixel en français.

Sur une image en NOIR et BLANC, il suffit d'un seul bit pour encoder un pixel.

Résultat image P1

Ici la profondeur est donc de 1 bpp.

03° Calculer le nombre de bits nécessaires pour encoder l'image suivante encodée en noir et blanc. En déduire le nombre d'octets nécessaires.

Résultat image P1

...CORRECTION...

Nous avons 9*7 pixels, soit 63 pixels.

Puisque la profondeur est de 1 bpp, il faut 63 bits pour encoder les pixels en eux mêmes.

En divisant par 8 arrondi au supérieur, on obtient le nombre d'octets : 63/8 donne 8 octets.

04° Calculer le nombre de bits nécessaires pour encoder une image rectangulaire de 2000 pixels sur 1000 pixels encodée en noir et blanc. En déduire le nombre d'octets nécessaires.

...CORRECTION...

Nous avons 2000*1000 pixels, soit 2 000 000 pixels.

On a donc besoin de 2 millions de bits sur une image encodée noir et blanc.

En divisant par 8 arrondi au supérieur, on obtient le nombre d'octets : 2 000 000 / 8 donne 250 000 octets.

Sous-unités de l'octet

Kilo-octet (ko) : représente mille octets.
On notera 1 ko = 1000 o = 1.103 o

Méga-octet (Mo) : représente un million d'octets.
On notera 1 Mo = 1 000 000 o = 1.106 o

Giga-octet (Go) : représente un milliard d'octets.
On notera 1 Go = 1 000 000 000 o = 1.109 o

Téra-octet (To) : représente mille milliards d'octets.
On notera 1 To = 1 000 000 000 000 o = 1.1012 o

Péta-octet (Po) : représente un million de milliards d'octets.
On notera 1 Mo = 1 000 000 000 000 000 o = 1.1015 o

05° On considère que l'image noir et blanc de 2000 pixels sur 1000 pixels nécéssite 250 000 octets. Exprimer ce nombre en utilisant l'unité la plus adaptée puis les Mo.

...CORRECTION...

On peut écrire 250 000 250.103. On peut donc dire que la taille nécessaire est de 250 ko

En divisant par mille, on aura 0,25 Mo.

2 - Image en nuance de gris

Cette fois, on désire obtenir plus de nuances que juste noir ou blanc.

On considère ici le cas le plus courant : 256 nuances au total.

Voici quelques unes des nuances de gris / couleurs disponibles 

Valeur décimaleDonne :Visuel
0Noir (0%)
63Gris foncé(25%)
127Gris(50%)
191Gris clair(75%)
255Blanc(100%)

Pour encoder une image en 256 nuances de gris, on a donc besoin de 8 bits, soit un octet.

Nombre M =11111111
Les bits codent 1286432168421

Or M = 128+64+32+16+8+4+2+1 = 255.

Profondeur d'une couleur

Définition  la profondeur d'une couleur correspond au nombre de bits nécessaires pour encoder la couleur d'un pixel.

L'unité de la profondeur est le bpp, bit per pixel en anglais, bit par pixel en français.

Sur une image en nuance de gris (0 : NOIR, 255 : BLANC, entre les deux gris), il faut 256 nuances donc 8 bits (1 octet) par pixel.

Résultat image P2

Ici la profondeur est donc de 8 bpp : avec 8 bits, on parvient bien à encoder des valeurs comprises entre 0 et 255.

Si on veut créer une image en nuance de gris, on peut éventuellement la créer avec un éditeur de texte en utilisant un nouvel encodage. On enregistre au format .pgm.

  • Le type d'encodage (ici P2)
  • Le nombre de pixels sur une colonne, suivi d'un espace et du nombre de lignes (ici 9 7)
  • La valeur maximale, celle qui permet d'encoder le blanc (ici 255)
  • La couleur voulue sur chaque pixel dans l'ordre 'humain' : on considère une suite de pixels correspondant à la façon dont on lit un livre : de gauche à droite et de haut en bas

06° Ouvrir un éditeur de texte.
Copier le code ci-dessous.
Enregistrer le fichier dans un dossier connu sous le nom image2.pgm.
Ouvrir l'image avec le logiciel libre GIMP ou un autre logiciel de traitement d'images.

Dans le menu AFFICHAGE, sélectionner ZOOM à 1600% pour espérer voir cette petite image de 9 pixels de large.

P2 9 7 255 0 120 255 255 255 255 255 0 120 255 10 110 255 255 255 10 110 255 255 255 20 90 255 20 90 255 255 255 255 255 30 80 255 255 255 255 255 255 20 90 255 20 90 255 255 255 10 110 255 255 255 10 110 255 0 120 255 255 255 255 255 0 120
Visuel provoqué par le fichier image2.bpm
Résultat image P2

07° Evaluer approximativement le nombre d'octets puis de bits nécessaires au stockage de cette image.

...CORRECTION...

Nous avons 9*7 pixels, soit 63 pixels.

On a donc besoin de 63 bits pour cette image de 256 nuances de gris.

En multipliant par 8, on obtient 504 bits.

08° Sans compression, combien faut-il d'octets pour encoder cette image plus basique si on utilise toujours le P2 ?

Résultat image P2

...CORRECTION...

Rien ne change.

Nous avons 9*7 pixels, soit 63 pixels.

On a donc besoin de 63 bits pour cette image de 256 nuances de gris.

Même si on utilise que le noir et le blanc !

Pour information, le code P2 de la croix noir et blanc est celui-ci :

P2 9 7 255 0 0 255 255 255 255 255 0 0 255 0 0 255 255 255 0 0 255 255 255 0 0 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 0 0 255 255 255 0 0 255 255 255 0 0 255 0 0 255 255 255 255 255 0 0

3 - Image en couleur

Nous avons vu que la couleur était obtenue en activant les pixels RGB de différentes façons.

L'un des choix possibles est le suivant :

  • Un octet pour l'intensité du rouge (donc entre 0 et 255)
  • Un octet pour l'intensité du vert (donc entre 0 et 255)
  • Un octet pour l'intensité du bleu (donc entre 0 et 255)

Voici quelques unes des couleurs disponibles 

Valeur RGBRGBVisuel
0-0-0
63-63-0
127-127-0
0-191-127
255-255-255

Pour encoder une telle image en 256 nuances par couleur, on a donc besoin de 24 bits (3x8 bits), soit un 3 octets par PIXEL.

Profondeur d'une couleur

Définition  la profondeur d'une couleur correspond au nombre de bits nécessaires pour encoder la couleur d'un pixel.

L'unité de la profondeur est le bpp, bit per pixel en anglais, bit par pixel en français.

Sur une image possèdant 256 nuances par couleur RGB, obtient 2563 nuances, soit 16 777 216. Plus de 16 millions de possibilités.

Résultat image P3

Ici la profondeur est donc de 24 bpp : avec 24 bits, on parvient bien à encoder des valeurs comprises entre 0 et 255 pour R, V et B.

Si on veut créer une image en couleurs avec ces millions de nuances, on peut éventuellement la créer avec un éditeur de texte en utilisant un nouvel encodage. On enregistre au format .ppm.

  • Le type d'encodage (ici P3)
  • Le nombre de pixels sur une colonne, suivi d'un espace et du nombre de lignes (ici 9 7)
  • La valeur maximale sur une couleur primaire (ici 255)
  • La couleur voulue sur chaque pixel dans l'ordre 'humain' : on considère une suite de pixels correspondant à la façon dont on lit un livre : de gauche à droite et de haut en bas

09° Ouvrir un éditeur de texte.
Copier le code ci-dessous.
Enregistrer le fichier dans un dossier connu sous le nom image3.ppm.
Ouvrir l'image avec le logiciel libre GIMP ou un autre logiciel de traitement d'images.

Dans le menu AFFICHAGE, sélectionner ZOOM à 1600% pour espérer voir cette petite image de 9 pixels de large.

P3 9 7 255 150 200 0 150 0 200 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 150 200 0 150 0 200 255 255 255 160 210 0 160 0 210 255 255 255 255 255 255 255 255 255 150 200 0 150 0 200 255 255 255 255 255 255 255 255 255 170 220 0 170 0 220 255 255 255 150 200 0 150 0 200 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 150 200 0 150 0 200 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 150 200 0 150 0 200 255 255 255 150 200 0 150 0 200 255 255 255 255 255 255 255 255 255 150 200 0 150 0 200 255 255 255 255 255 255 255 255 255 150 200 0 150 0 200 255 255 255 150 200 0 150 0 200 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 150 200 0 150 0 200
Visuel provoqué par le fichier image3.ppm
Résultat image P3

10° Quelle est la profondeur de cette image ?

...CORRECTION...

Nous avons trois intensités sur un octet chacune, on a 3 octets.

En multipliant par 8, on obtient 24 bits.

La profondeur est donc de 24 ppb.

11° En déduire approximativement le nombre d'octets puis de bits nécessaires au stockage de cette image.

...CORRECTION...

Nous avons 9*7 pixels, soit 63 pixels.

On a donc besoin de 63*24 bits. Soit 1512 bits.

En divisant par 8, on obtient 186 octets.

12° Comment limiter le poids de l'image ?

...CORRECTION...

On doit la compresser. Pour cela :

  • On peut limiter les choix de couleurs
  • On peut trouver des schémas qui se répétent pour ne pas les coder deux fois ou plus à l'identique
Compression

Comprimer une image veut dire la décrire en utilisant une méthode qui permet d'obtenir un nombre plus petit d'octets.

On peut agir sur le nombre de couleurs encodables (la profondeur) ou sur l'étude des répétitions dans l'image.

Quelques formats très courants :

Le JPEG (.jpg) : très bonne compression mais les couleurs peuvent être légerement modifiées par rapport à l'image d'origine. Format très utile sur Internet.

Le PNG (.png) : une moins bonne compression mais l'image n'est pas altérée. Très utile pour transferer des photos de bonne qualité via le réseau Internet ou pour le stockage des photos numériques.

Retenons que

  • plus une image possède de pixels plus elle pèse lourd.
  • plus une image possède d'un grand nombre de nuances de couleurs (profondeur) plus elle pèse lourd

13° On divise par deux la résolution d'une image (exemple 2000x1000 devient 1000x500). Sans compression, par combien va-t-on réduire la taille de l'image ?

14° On divise par deux la profondeur de l'image. Par combien a-t-on divisé le poids de l'image ?

15° On se limite à 16 couleurs par sous-pixel. Que vaut la profondeur ?

16° Créer le code d'une image de ce type. Limitez-vous à une taille raisonnable (5x5 comme avec Télévision ?)

La prochaine fois, nous verrons comment modifier une image à l'aide d'un programme Python.

Activité publiée le 20 11 2019
Dernière modification : 08 12 2019
Auteur : ows. h.