Codage des images
Méthode : Objectifs
Complément : I/ Introduction
Les images numériques sont de plus en plus présentes dans notre quotidien : télévision numérique terrestre, photographie, imagerie médicale...
Les termes techniques décrits dans les spécifications des appareils nécessitent alors de faire la distinction entre les performances des différents appareils.
Ce document a pour objet d'apporter un éclairage sur les notions de bases liées à l'image numérique.
Méthode : II/ Numération d'une image
\(\color{magenta}{\textbf{1) Principe de base}}\)
Il existe \(\textbf{deux grandes catégories d'image :}\)
- Les \(\color{red}{\textbf{images vectorielles}} \):
Les images vectorielles sont composées de formes géométriques qui vont pouvoir être décrites d'un point de vue mathématique.
Par exemple une droite sera définie par 2 points, un cercle par un centre et un rayon.
Le processeur est chargé de "traduire" ces formes en informations interprétables par la carte graphique (images Word, Publisher, CorelDraw - format WMF, CGM, SVG, PS, etc... )
Les avantages d'une image vectorielle : les fichiers qui la composent sont petits, les redimensionnements sont faciles sans perte de qualité .
Les inconvénients : une image vectorielle ne permet de représenter que des formes simples. Elle n'est pas donc utilisable pour la photographie notamment pour obtenir des photos réalistes.
- Les \(\color{red}{\textbf{images matricielles }}\) : pour coder une image, on découpe l'image à l'aide d'un quadrillage formé de petits carrés.
Chacun de ces carrés est appelé pixel (picture element).
\(\color{magenta}{\textbf{2) Images matricielles}}\)
On attribue à chaque pixel une couleur uniforme (à choisir parmi une palette).
Cette couleur (pour chacun des pixels) est codée à l'aide d'un nombre binaire
Format d'images bitmap : BMP, PCX, GIF, JPEG, TIFF, PNG,.
Les photos numériques et les images scannées sont de ce type.
Il y a une perte de qualité lors d'un redimensionnement

Comme vous pouvez le constater sur le schéma ci-dessus, le pixel de coordonnées (0,0) se trouve en haut à gauche de l'image.

Plus le nombre de pixels dans une image est important plus la résolution de l'image sera élevée.
Plus le nombre de bits est élevé, plus le nombre de couleurs décrivant l'image sera élevé.
\(\textbf{Avec 1 bit :}\) deux couleurs 0 : noir, 1 :blanc
\(\textbf{Avec 2 bits :}\) quatre couleurs 00 : noir, 01 : rouge, 10 :vert, 11 :blanc
Pour coder 8 couleurs, il faut ...... bits
Complément :
Il existe trois grandes catégories d'images numériques :
image noir et blanc | image en nuances de gris | image en couleur |
---|---|---|
Une fois, l'image téléchargée, un clic droit permet d'accéder aux propriétés.
Fondamental :
Les dimensions de l'image sont indiquées en pixels.
Ce mot forgé (1969) à partir de pix (abréviation de picture « image ») et de el(ement) (« élément »), littéralement « élément d'image ».
Exemple : 1) Codage des images noires et blancs
\(\color{magenta}{\textbf{Format binaire (PBM :Portable Binary Map)}}\)
C'est le format le plus minimaliste possible : deux couleurs sont possibles pour chaque pixel (noir ou blanc).
Ce format correspond au mode d'affichage des calculatrices.
Remarque :
# indique des commentaires
Les lignes doivent contenir moins de 70 caractères
Méthode :
1. Ecrire le fichier associé à cette image en utilisant un éditeur de texte
2. L'enregistrer au format PBM
3. L'ouvrir avec XnView
4. L'ouvrir avec un éditeur Hexadecimal
Le chiffre 0 est associé à 30 en base hexadécimale soit 48 (le code ASCII de 0)
Le chiffre 1 est associé à 31 en base hexadécimale soit 49 (le code ASCII de 1)
5. Avec XnView enregistrer le fichier en format PBM sous le nom J2.PBM
6. Comparer les tailles des deux fichiers.
L'image est stockée sous un format compressé.Cela permet d'occuper moins d'espace de stockage.
7. Réouvrir le fichier et observer les modifications
Complément : Explications
On complète les colonnes sur un octet (8 bits)
0 0 0 0 0 0 0 0 -> NUL
0 0 0 0 0 1 0 0 -> EOT
0 0 0 0 0 1 0 0 -> EOT
0 0 0 0 0 1 0 0 -> EOT
0 0 0 0 0 1 0 0 -> EOT
0 0 0 0 0 1 0 0 -> EOT
0 0 0 0 0 1 0 0 -> EOT
0 1 0 0 0 1 0 0 ->(68)10 ->D
0 0 1 1 1 0 0 0 ->(56)10->8
0 0 0 0 0 0 0 0 ->NUL
Exemple : Résolutions
La définition d'un écran est le nombre de pixels (points) qui composent une image numérique en largeur et hauteur.(généralement données sous la forme 1024×780, signifiant « 1024 pixels de large, et 780 pixels de haut »).

La Résolution est le nombre de pixels par unité de longueur.
Elle s'exprime le plus souvent en point par pouces (ppp) ou en dots per inch (dpi)
Exemple : Une image de 100 ppp (ou 100 dpi) contient 10 000 points par pouce carré. (100 x 100 = 10 000)
Elle correspond au nombre de pixels par pouce. 1 point représente 2,54 cm.Plus ce nombre est élevé, plus la taille des pixels est petite, et plus l'image sera précise.
a) Une image A4 (21 cm x 29,7 cm) est scanné avec une résolution de 360 dpi. Quelle sera sa taille en pixels ?
b) Une image en 600 dpi fait 3780 pixels de large. Quelle est sa largeur réelle ?
c) Une image de 10 cm de large fait 2837 pixels de largeur. Quelle est sa résolution ?
Plus la résolution est élevée, plus la précision de l'image est grande mais plus l'espace nécessaire au stockage est grand.
Exemple : 2) Codage des images en niveaux de gris (Portable Gray Map)
Chaque nuance de gris est codée à l'aide d'un nombre entier compris entre 0 et N.
La couleur noire est codée avec le nombre 0. La couleur blanche est codée par un nombre entier N.
N vaut souvent 255.
\(\textbf{Exercice 1 :]\) Recopier le texte précédent dans un éditeur de texte et observer le résultat

Parmi les images ci-dessous, laquelle est le
négatif de l'image ci-contre ?
1.

2.

3.

Dans EduPython l'affichage d'une image dans une fenêtre, nécessite l'utilisation de bibliothèques ( il y en a plusieurs : Matplotlib, Pygame, Pylab, etc... )
Nous utiliserons le module Python Imaging Library (PIL) permet de manipuler un fichier image en Python aux format PNG, JPEG, GIF, TIFF, and BMP
Dans le dossier « Chat », vous trouverez une image au format pgm, écrire un programme permettant d'inverser les niveaux de gris de chaque pixel.
\(\color{magenta}[Méthode :}\)
• Importer la bibliothèque PIL
• Créer un objet image
• Ouvrir le fichier image
• Demander les coordonnées \((x,y)\) du pixel à lire
• Afficher les informations R,V,B du pixel
• Fermer le fichier
#Inversion des coulers d'une image en noir et blanc
from PIL import Image # Importation de Image
#Chemin vers l'image
Image_Depart='chat.pgm'
# ouverture de l'image Chat
imageSource=Image.open(Image_Depart)
imageSource.show()
# récupère les dimensions de l'image
Largeur,Hauteur=imageSource.size
imageBuffer=Image.new( "L" , (Largeur,Hauteur) ) # ouverture en mode niveau de gris
# pour chaque ligne:
for y in range (Hauteur):
#pour chaque colonne:
for x in range (Largeur) :
# récupère le niveau de gris du pixel en position (x,y)
p=imageSource . getpixel ((x,y))
p=255-p
imageBuffer.putpixel((x,y),p) #ecrit l'internsité inversée du pixel
imageBuffer.show()
Version améliorée :
#Inversion des coulers d'une image en noir et blanc
import os.path # Importation du module Fichier
from PIL import Image # Importation de Image
from math import *
#Chemin vers l'image
Repertoire='F:\\ISN\\chat.pgm'
Repertoire_Sauvegarde='F:/ISN/ChatInversé.pgm'
# ouverture de l'image Chat
if os.path.exists(Repertoire):
imageSource=Image.open(Repertoire)
imageSource.show()
# récupère les dimensions de l'image
Largeur,Hauteur=imageSource.size
imageBuffer=Image.new( "L" , (Largeur,Hauteur) ) # ouverture en mode niveau de gris
# pour chaque ligne:
for y in range (Hauteur):
#pour chaque colonne:
for x in range (Largeur) :
# récupère le niveau de gris du pixel en position (x,y)
p=imageSource . getpixel ((x,y))
p=255-p
imageBuffer.putpixel((x,y),p) #ecrit l'internsité inversée du pixel
# sauvegarde de l ' image créée :
imageBuffer.save(Repertoire_Sauvegarde)
imageBuffer.show()
else:
print("L'image n'existe pas!")