{Photographie  Numérique}

 

SNT Thème 5

{Chat GPT :}

La photographie numérique est un domaine qui a connu un fort développement depuis les années 2000 avec l'apparition des appareils photo numériques. Elle consiste à prendre des photos en utilisant des capteurs numériques pour convertir la lumière en données numériques, plutôt que de les enregistrer sur un film analogique comme c'était le cas avec les appareils photo traditionnels.

{Chat GPT :}

L'histoire de la photographie numérique débute avec la première caméra numérique Kodak DCS 100 en 1991, qui utilisait un capteur de 1,3 million de pixels. Depuis lors, les capteurs ont considérablement évolué en termes de résolution et de qualité, permettant à la photographie numérique de devenir un moyen courant de prendre des

photos.

{Chat GPT :}

Python est un outil utile pour la manipulation et le traitement d'images numériques. Le module Python Image Library (PIL) est souvent utilisé pour ce faire. Il permet de charger, manipuler et enregistrer des images en plusieurs formats, y compris les formats JPEG, PNG, BMP et GIF. Il offre également des fonctionnalités telles que la modification des couleurs et des tailles d'images, le redimensionnement, la rotation et la modification des niveaux de luminosité et de contraste.

{Chat GPT :}

Voici un exemple simple de code Python utilisant PIL pour ouvrir une image et la redimensionner :
from PIL import Image

# Ouvrir une image
im = Image.open("image.jpg")

# Redimensionner l'image
im_resized = im.resize((800, 600))

# Enregistrer la nouvelle image
im_resized.save("image_resized.jpg")

{Repères historiques}

{Activité 1 : Caractéristiques d'une image}

Image numérique : image acquise, créée, traitée, stockéenumériquement
Dimensions : taille de l'image enpouces... 

ex. 12"                               1 pouce = 2,54 cm

Définition : taille de l'image enpixels

ex. 640 \(\times\)480 px                  4K = 4096 \(\times\)2160 px

Résolution :                endpi ou ppp 

ex. 300 dpi

\(=\dfrac{définition}{dimension}\)

\(résolution=\dfrac{définition}{dimension}\)

 donc  \( définition=résolution \times dimension\)

donc \(dimension=\dfrac{définition}{résolution}\)

\( définition=résolution \times dimension\)

{Fonctionnement d'un appareil photo numérique (partie 1)}

{Fonctionnement d'un appareil photo numérique (partie 2)}

{Activité 2 : Codage d'une image​ }

codage de couleurs (ou profondeur de couleurs) : nombre de bits par pixels (bpp)
\text{poids = Nombre total de pixels} \times \text{codage de couleurs (octets)}
1280\times 1024 \times 1 = 1310720\;\text{(poids de l'image en bits)}
\dfrac{1310720}{8\times 1024}=160

Le poids de l'image est de 160 ko.

640\times 480 \times 8 = 2457600\;\text{(poids de l'image en bits)}
\dfrac{2457600}{8\times 1024}=300

Le poids de l'image est de 300 ko.

Chaque pixel peut prendre environ 16,7 millions de couleurs possibles.
256\times 256 \times 256 =2^8\times 2^8 \times 2^8 = 2^{24}\approx 16,7\; \text{millions}
Environ 4,3 milliards de nuances possibles par pixel.
256\times 256 \times 256\times 256 = 2^{32}\approx 4,3\; \text{milliards}
JPEG
TIFF

{Activité 4 : Quelles sont les informations enregistrées dans les métadonnées ?}

EXIF : Exchangeable image file format

{TP 1 : Agir sur les caractéristiques d'une image}

  • Sur le réseau du lycée, dans le répertoire de votre classe, dans le dossier _travail, dans le dossier SNT, se trouve le dossier TP1chat. Copiez le.
  • Collez le dans le dossier SNT situé dans le répertoire à votre nom. Le dossier TP1chat contient une image, chat.jpg et un fichier TP1.py 
  • Démarrez le logiciel EduPython. Naviguez jusqu'au dossier TP1chat à l'aide de l'explorateur de fichiers. Ouvrir le fichier TP1.py puis exécutez le script qu'il contient (bouton triangle vert).

 1. Charger l'image et executer le programme

from PIL import Image
# Charger le module Image à partir de PIL
ma_photo = ('chat.jpg')
img = Image.open(ma_photo)
print(img.format, img.size, img.mode)
# Afficher format, taille(LxH) et mode de l'image
img.show()

im = Image.open(ma_photo).convert('L')
im.save('chat_gris.jpg')
im.show()
# Fin partie 1

im2 = im.transpose(Image.FLIP_LEFT_RIGHT)
im2.save('chat_gris_regard_a_gauche.jpg')
im2.show()
# Fin partie 2

im3 = im2.point(lambda i: i * 1.5)
im3.save('chat_gris_regard_a_gauche_lambda.jpg')
im3.show()
# Fin partie 3
  • Transformation 1 : Changement de mode colorimétrique. Conversion de l’image en niveaux de gris (mode "L")      codage sur 8 bit : 256 nuances de gris 
img.convert("L")

La "valeur" d'un pixel varie de 0 (le noir) à 255 (le blanc), c'est sa luminosité

 2. Combien de transformations ?

  • Transformation 2 : Symétrie d'axe vertical.
im.transpose(Image.FLIP_LEFT_RIGHT)
  • Transformation 3 : Augmentation de la luminosité.
im2.point(lambda i: i * 1.5)

La valeur de chaque pixel est multipliée par 1,5.

La méthode point(), permet d'agir sur chaque pixel.

3. Convertir en une image en niveaux de gris :

La conversion de l’image en couleurs en nuance de gris (“L’’) s’effectue selon la norme de l’UIT (Union Internationale des Télécommunications) ITU-R 601 par la formule suivante :

 

L = 0,299R + 0,587V + 0,114B

 

Dans la documentation de référence de Python (lien ci-dessous), voir la fonction Image.convert.
https://pillow.readthedocs.io/en/stable/reference/Image.html

4. à 7. Modifier et améliorer

  • Tester d'autres valeurs pour la méthode transposef Image.FLIP_TOP_BOTTOM ;, Image.ROTATE_90 ;, Image.ROTATE_180 ;, Image.ROTATE_270
  • Tester d'autres valeurs pour la fonction lambda...
\lambda = 0.5
\lambda = 4

{TP 2 : Agir sur les composantes RVB d'une image}

  • Sur le réseau du lycée, dans le répertoire de votre classe, dans le dossier _travail, dans le dossier SNT, se trouve le dossier TP2baby. Copiez le.
  • Collez le dans le dossier SNT situé dans le répertoire à votre nom. Le dossier TP2baby contient une image, baby.jpeg et un fichier TP2.py 
  • Démarrez le logiciel EduPython. Naviguez jusqu'au dossier TP2baby à l'aide de l'explorateur de fichiers. Ouvrir le fichier TP2.py. 

 Étape 1. Analyser un programme

La ligne 8 permet de convertir l’image en mode RGB ou RVB.

img_rgb = img.convert('RGB')

Cette ligne fusionne les trois canaux monobandes en une image multibandes en inversant les canaux rouge et vert.

2. Expliquez les lignes 14 et 16 du programme.

1. Que permet de réaliser la ligne 8 ?

inv_2 = Image.merge("RGB", (B,V,R))
inv_3 = Image.merge("RGB", (V,R,B))

Cette ligne fusionne les trois canaux monobandes en une image multibandes en inversant les canaux rouge et bleu.

Étape 2. Exécuter un programme et analyser les résultats

Ligne 9 #Convertit l’image en mode RGB ou RVB
Ligne 15 #Fusionne les trois canaux monobandes en une image multibandes en inversant les canaux rouge et bleu
Ligne 17 #Fusionne les trois canaux monobandes en une image multibandes en inversant les canaux rouge et vert

4. Ajoutez les commentaires manquants (lignes 9, 15 et 17) et exécutez le programme (bouton triangle vert).

5. Observez et comparez les images A, B et C obtenues à partir de l’image d’origine (baby.jpeg). À quelles inversions correspondent-elles ?

A

B

c

L’image A correspond à l’inversion 2 : inversion entre le rouge et le bleu.
L’image B correspond à l’inversion 1 : inversion entre le vert et le bleu.
L’mage C correspond à l’inversion 3 : inversion entre le rouge et le vert.

Étape 3. Modifier un programme

from PIL import Image
img = Image.open("baby.jpeg")
R, V, B = img.split()
R = R.point(lambda i:i*1.5)
# Augmente l'intensité du canal rouge
inv2_R = Image.merge("RGB", (B,V,R))
inv2_R.save("inv2_avec_canal_R.jpg")
inv2_R.show()

6. Copiez-collez le programme et exécutez-le.

7. En exploitant le document 2, expliquez quelle est la différence entre l’image A (étape 2) et l’image D.

D

L’image D est obtenue par inversion entre les canaux rouge et bleu, elle correspond à l’inversion 2 avec comme différence l’augmentation de la luminosité du canal rouge avant transformation.
Le facteur lambda appliqué est de 1,5 et la différence avec l’image A est très légère. On peut distinguer les quelques différences de rendu au niveau du contraste d’ensemble et au niveau de la couleur des yeux.

A

8. Proposez une ou d’autres modifications, observez et commentez les résultats.

On peut faire plusieurs modifications et transformations en appliquant des facteurs lambdas différents avant les inversions. On donne ci-dessous l’exemple de l’inversion 3 (entre le rouge et le vert) mais avec un lambda de 3 appliqué au canal vert avant inversion.

from PIL import Image
img = Image.open("baby.jpeg")
# Ouvre la photo et la stocke dans la variable img
R, V, B = img.split()
# Retourne un tuple contenant toutes les bandes de l’image
V = V.point(lambda i:i*3)
# Multiplie l’intensité du canal vert par 3
inv3_V = Image.merge("RGB", (V,R,B))
# Fusionne les 3 canaux monobande en une image multibandes en inversant les canaux
inv3_V.save("inv3 avec_canal_V.png")
# Sauvgarde l’image inv3_V (avec augmentation de l’intensité du canal vert)
inv3_V.show()
# Affiche l’image

{TP 3 : Manipuler et filtrer une image}

  • Sur le réseau du lycée, dans le répertoire de votre classe, dans le dossier _travail, dans le dossier SNT, se trouve le dossier TP3garçon. Copiez le.
  • Collez le dans le dossier SNT situé dans le répertoire à votre nom. Le dossier TP3garçon contient une image, garçon.jpeg et un fichier TP3.py 
  • Démarrez le logiciel EduPython. Naviguez jusqu'au dossier TP3garçon à l'aide de l'explorateur de fichiers. Ouvrir le fichier TP3.py.
# *********** Découper l’image ***********
from PIL import Image
from PIL import ImageFilter
img = Image.open('garçon.jpg')
img.show()
print("LxH:", img.size)
xa = 1741; ya = 0; xb = 3979; yb = 2388
rectangle = (xa,ya,xb,yb)
decoupe = img.crop(rectangle)
decoupe.show()
print("lxh:", decoupe.size)
decoupe.save("image_decoupee.jpg")
# *********** Appliquer un filtre ***********
img2 = Image.open('image_decoupee.jpg')
im_filtree = img2.filter(ImageFilter.CONTOUR)
im_filtree.show()
im_filtree.save('image_filtree.jpg')

Ajouter aux emplacements judicieux, les lignes de commentaires données dans le désordre...

# *********** Découper l’image ***********
from PIL import Image
# Charge le module Image depuis PIL
from PIL import ImageFilter
# Charge le module ImageFiler de PIL
img = Image.open('garçon.jpeg')
# Charger l’image
img.show()
# Afficher l’image d’origine
print("LxH:", img.size)
# Afficher la définition de l’image d’origine
xa = 1741; ya = 0; xb = 3979; yb = 2388
# Définir les coordonnées des points a et b
rectangle = (xa,ya,xb,yb)
# Définir la zone de découpage
decoupe = img.crop(rectangle)
# Réaliser la découpe
decoupe.show()
# Afficher l’image découpée
print("lxh:", decoupe.size)
# Afficher la définition de l’image découpée
decoupe.save("image_decoupee.jpg")
# Enregistrer l’image découpée
# *********** Appliquer un filtre ***********
img2 = Image.open('image_decoupee.jpg')
# Charger l’image découpée
im_filtree = img2.filter(ImageFilter.CONTOUR)
# Appliquer un filtre (ici CONTOUR)
im_filtree.show()
# Afficher l’image filtrée
im_filtree.save('image_filtree.jpg')
# Enregistrer l’image filtrée
Exécuter le script. 
4. Exprimez la largeur l de l’image découpée en fonction de xa et xb. Calculez sa valeur.
5. Exprimez la hauteur h de l’image découpée en fonction de ya et yb. Calculez sa valeur.
Largeur : l = xb – xa 
l = 3 979 – 1 741 = 2 238 px
Hauteur = yb – ya 
h = 2388 – 0 = 2 388 pixels
6. Essayez en modifiant la ligne concernée du programme, d’autres filtres à la place de CONTOUR : BLUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE, EMBOSS, FIND_EDGES, SHARPEN, SMOOTH...

EMBOSS

Made with Slides.com