Rôles des algorithmes en photographie
Aujourd’hui, les algorithmes sont partout. Nous sommes cernés. Mais c’est pour notre bien. En photographie, par exemple, ils sont dans nos APN (appareils photo numériques) et dans nos smartphones. Mais aussi dans les logiciels de retouche, éventuellement embarqués eux aussi.
Nous ferons ici un parallèle entre l’argentique et le numérique pour montrer les différentes étapes auxquelles interviennent les algorithmes, puis nous décortiquerons un exemple de programme de transformation d’image.
L’argentique
Avant le numérique (voire aujourd’hui lorsqu’on lui préfère l’argentique), l’apparence d’une photo relevait déjà de nombreux choix. Mais l’enchaînement des opérations nécessitait davantage de connaissances.
- Des choix pouvaient être faits avant la prise de vue (choix de la marque et de la sensibilité de la pellicule…).
- Avant le cliché, le photographe réglait certains paramètres avec son appareil (vitesse d’obturation, focale…). Éventuellement, il ajoutait un filtre devant l’objectif (effets de flou, de lumières en étoile, de couleur…).
- Le photographe pouvait jouer sur la durée du développement, par exemple pour augmenter un contraste.
- Une fois la photo développée, des retouches pouvaient être réalisée à la main par un peintre. Un exemple célèbre est celui des tribunes de personnages officiels de l’URSS. Si l’un d’eux tombait en disgrâce, de nouvelles photos étaient publiées mais la personne en question était effacée.
Plusieurs de ces choix existent aussi avec le numérique. Mais les possibilités sont plus nombreuses et plus pratiques à appliquer, soit avec l'appareil soit avec un logiciel de retouche.
Ce sont des algorithmes qui permettent d’obtenir des photos « à la carte ». Précisons pour les plus jeunes que des effets existaient avant le boom des APN pour les amateurs. Par exemple, un camescope analogique des années 90 pouvait parfaitement réaliser des vidéos en sépia, en négatif ou avec un effet « dessin animé ».
Les algorithmes
Les APN offrent souvent trois degrés de contrôle. Soit le photographe choisit tous les paramètres, soit il laisse les algorithmes tout gérer, soit il opte pour une solution mixte en choisissant un mode (coucher de soleil, feu d’artifice, portrait…).
Reprenons les différentes étapes.
- Lors de la prise de vue, ce sont des algorithmes liés à des capteurs qui calculent la mise au point, l’exposition, la stabilisation…
- Le développement est quant à lui instantané. C’est la pixellisation. D’autres algorithmes gèrent alors la balance des blancs, le contraste, la netteté, les distorsions…
- Puis le fichier est compressé, par exemple en format JPG.
- Une fusion d’images peut être réalisée avec l’APN (panorama, par exemple).
- Ensuite, des travaux plus élaborés, qui par exemple ne traitent qu’une partie de la photo, sont réalisables avec un logiciel de retouche d’image.
Notez que le logiciel permet aussi de revenir sur certains choix opérés lors de la prise de vue. Quant aux possibilités de transformation par logiciel de retouche (GIMP, Photoshop…), elles sont infinies. D’ailleurs, vous avez au bas de chaque page de ce site un exemple de photo retraitée par un logiciel : dimensions et recadrage, ajout d’une bulle et de texte…
Même en l’absence de logiciel, le numérique vous permet de modifier une image numérisée (qui peut éventuellement être une photo argentique scannée). Ainsi vous trouverez sur ce site plusieurs petits programmes en Python : les niveaux de gris, le seuillage ou, ci-dessous, une extraction de contours.
Exemple de programme : l’extraction de contours
Pour illustrer les possibilités offertes par le numérique, voici un petit programme pour transformer les photos en dessin monochrome. Il est écrit en Python.
Pour les spécialistes, précisons qu’il ne s’agit pas du filtre de Prewitt utilisé par les logiciels mais d’un programme qu’un élève de seconde doit pouvoir comprendre. Selon les photos, il peut produire un résultat tout à fait honnête.
Il repose sur la notion mathématique de distance. Comme la formule comprend une racine carrée, il nous faudra importer la méthode sqrt de la bibliothèque math.
Le programme s’applique aux photos en niveaux de gris. Le principe est de balayer tous les pixels \(p\) de la photo et, pour chacun d’eux, de mesurer les différences d'intensité des pixels contigus.
\(i2\) | ||
\(i1\) | \(p\) | \(i3\) |
\(i4\) |
Le programme utilisera la racine de la somme du carré de l’écart entre \(i2\) et \(i4\) et du carré de l’écart entre \(i1\) et \(i3\) (voyez la variable dist dans le code ci-dessous si ça ne vous paraît pas clair !).
Voici la photo de départ. Comme nous allons nous servir de l’intensité des pixels, nous avons bien une photo enregistrée en niveaux de gris et non une photo en RVB dont la saturation des couleurs aurait été réglée au minimum. Le programme ne fonctionnerait pas !
# Importation depuis les bibliothèques
from PIL import Image
from math import sqrt
# L'image "lapins.jpg" se trouve dans le même dossier que le programme
# On crée une première image
lapins_1 = Image.open("lapins.jpg")
# On relève les dimensions de l’image. Il est inutile de les connaître
largeur,hauteur = lapins_1.size
# Ouverture d'une 2ème image codée sur 1 bit
contour = Image.new('1',(largeur,hauteur))
# Ce seuil peut être modifié pour obtenir une image différente
seuil = 50
# L'image est balayée en hauteur et en largeur, hors bords
for y in range(1,hauteur-1):
for x in range(1,largeur-1):
# on récupère les intensités voisines
i1 = lapins_1.getpixel((x-1,y))
i2 = lapins_1.getpixel((x,y-1))
i3 = lapins_1.getpixel((x+1,y))
i4 = lapins_1.getpixel((x,y+1))
dist = sqrt((i1-i3)**2+(i2-i4)**2)
if dist < seuil:
pixel2 = 1
else:
pixel2 = 0
contour.putpixel((x,y),pixel2)
# L'image est sauvegardée en format TIF
contour.save("lapincontour_50.tif")
Notez qu’en inversant les valeurs 0 et 1 de la variable pixel2 on obtient un autre effet...