Dans cet article, je vous propose 10 outils de manipulation et traitement d’images en Python: présentation de certaines des bibliothèques Python les plus utilisées, offrant un moyen simple et intuitif de manipuler et transformer des images.

Introduction

Notre monde d’aujourd’hui regorge de données et les images en constituent une partie importante. Cependant, pour pouvoir être utilisées, ces images doivent être traitées. Le traitement d’images consiste donc à analyser et à manipuler une image numérique principalement dans le but d’en améliorer la qualité ou d’en extraire des informations qui pourraient ensuite être utilisées.

Les tâches courantes du traitement d’images incluent l’affichage des images, les manipulations basiques comme le recadrage, le retournement, la rotation, ou encore la segmentation, la classification et les extractions de caractéristiques, la restauration et la reconnaissance d’images. Python devient un choix judicieux pour de telles tâches de traitement d’images. Cela est dû à sa popularité croissante en tant que langage de programmation scientifique et à la disponibilité gratuite de nombreux outils de traitement d’images de pointe dans son écosystème.

Examinons quelques-unes des bibliothèques Python les plus couramment utilisées pour les tâches de manipulation d’images.

1. Scikit Image

scikit-image est un paquet open source Python qui fonctionne avec les tableaux numpy. Il implémente des algorithmes et des utilitaires destinés à la recherche, à l’éducation et aux applications industrielles. C’est une bibliothèque assez simple et directe, même pour ceux qui découvrent l’écosystème de Python.

Ressources

Il a été très bien documenté avec de nombreux exemples et cas d’utilisation pratiques. Lisez la documentation ici.

Usage

Le paquet est importé en tant que skimage et la plupart des fonctions se trouvent dans les sous-modules.
Quelques exemples de skimage:

  • Filtre d’image
    import matplotlib.pyplot as plt 
    %matplotlib inline
    
    from skimage import data,filters
    
    image = data.coins()
    plt.imshow(image)
    
    edges = filters.sobel(image)
    plt.imshow(edges)

Filtre d'images

Vous pouvez trouver plus d’exemples dans la galerie ici.

2. Numpy

Numpy est l’une des bibliothèques principales de la programmation Python et prend en charge les tableaux. Une image au finale c’est un tableau Numpy standard contenant des pixels de points de données. Par conséquent, en utilisant les opérations NumPy de base, telles que le découpage en tranches (slicing), les masques et toute soerte d’indexation, nous pouvons modifier les valeurs de pixel d’une image. L’image peut être chargée à l’aide de skimage et affichée à l’aide de matplotlib.

Ressources

Une liste complète des ressources et de la documentation est disponible sur la page de documentation officielle de Numpy.

Usage

Utiliser Numpy pour créer un masque sur une image.

import numpy as np
from skimage import data
import matplotlib.pyplot as plt 
%matplotlib inline

image = data.camera()
type(image) #Image est un array numpy

mask = image < 87
image[mask]=255
plt.imshow(image, cmap='gray')

Numpy image

3. Scipy

Scipy est un autre des modules scientifiques de base de Python comme Numpy et peut être utilisé pour des tâches de base de manipulation et de traitement d’images. En particulier, le sous-module scipy.ndimage fournit des fonctions fonctionnant sur des tableaux NumPy à n dimensions. Le package inclut actuellement des fonctions de filtrage linéaire et non linéaire, de morphologie binaire, d’interpolation B-spline et de mesure d’objet.

Ressources

Pour obtenir une liste complète des fonctions fournies par le package scipy.ndimage, reportez-vous à la documentation disponible ici.

Usage

Utilisation de SciPy pour le flou à l’aide d’un filtre gaussien:

from scipy import misc,ndimage

face = misc.face()
blurred_face = ndimage.gaussian_filter(face, sigma=3)
very_blurred = ndimage.gaussian_filter(face, sigma=5)

#Resultats
plt.imshow(<image à afficher>)

Scipy image

4. PIL/Pillow

PIL (Python Imaging Library) est une bibliothèque open-source Python, qui prend en charge l’ouverture, la manipulation et l’enregistrement de nombreux formats de fichiers d’image différents. Cependant, son développement a stagné depuis sa dernière publication en 2009. Heureusement, il existe Pillow, une extension de PIL activement développée qui est plus facile à installer. Il s’exécute sur tous les principaux systèmes d’exploitation et prend en charge Python 3. La bibliothèque contient des fonctionnalités de traitement d’image de base, notamment des opérations ponctuelles, un filtrage avec un ensemble de noyaux de convolution intégrés et des conversions d’espace colorimétrique.

Ressources

La documentation contient des instructions d’installation ainsi que des exemples couvrant chaque module de la bibliothèque.

Usage

Amélioration d’une image dans Pillow à l’aide d’ImageFilter:

from PIL import Image, ImageFilter

#Lire l'image
im = Image.open( 'image.jpg' )

#Affiche l'image
im.show()

from PIL import ImageEnhance
enh = ImageEnhance.Contrast(im)
enh.enhance(1.8).show("30% more contrast")

imageFilter

5. OpenCV-Python

OpenCV (Open Source Computer Vision Library) est l’une des bibliothèques les plus utilisées pour les applications de Computer Vision. OpenCV-Python est l’API python pour OpenCV. OpenCV-Python est non seulement rapide car l’arrière-plan est constitué de code écrit en C/C++, mais il est également facile à coder et à déployer (en raison du wrapper Python au premier plan). Cela en fait un excellent choix pour exécuter des programmes de Computer Vision intensifs en calcul.

Ressources

Le Guide OpenCV2-Python facilite la prise en main d’OpenCV-Python.

Usage

Voici un exemple qui montre les capacités d’OpenCV-Python dans le mélange d’images en utilisant des pyramides pour créer un nouveau fruit crée à partir d’une pomme et d’une orange.

Pyramid Blending

6. SimpleCV

SimpleCV est également un framework open source permettant de créer des applications de Computer Vision. Avec celui-ci, vous avez accès à plusieurs bibliothèques de Computer Vision très puissantes telles que OpenCV, sans avoir à vous renseigner au préalable sur les profondeurs de bits, les formats de fichier, les espaces colorimétriques, etc. La courbe d’apprentissage est nettement plus petite que celle d’OpenCV.

“La Computer Vision rendue facile pour tous”

Certains points en faveur de SimpleCV:

  • Même les programmeurs débutants peuvent écrire des tests de vision artificielle simples
  • Les caméras, les fichiers vidéo, les images et les flux vidéo sont tous inter-opérables

Ressources

La documentation officielle est très facile à suivre et contient de nombreux exemples et cas d’utilisation à suivre.

Usage

  • Cette image montre la fonction threshold de SimpleCV. La méthode threshold définit chaque pixel d’une image en noir ou blanc en fonction de sa luminosité.image chien 1
  • Dans cette image, nous avons appliqué la méthode edges de SimpleCV. Cette méthode définit les pixels de contour de l’image en blanc.image chien 2
  • Les points clés sont des zones visuellement uniques d’une image utilisées pour une variété de tâches de reconstruction 3D et d’appariement d’images. Il est très facile de trouver des points clés dans SimpleCV. Utilisez simplement la méthode Image.findKeypoints.image chien 3

7. Mahotas

Mahotas est une autre bibliothèque de Computer Vision et de traitement d’images pour Python. Elle contient des fonctions de traitement d’images classiques telles que le filtrage et les opérations morphologiques, ainsi que des fonctions de Computer Vision plus modernes pour le calcul des caractéristiques, notamment la détection de points d’intérêt et les descripteurs locaux. L’interface est en Python, ce qui convient au développement rapide, mais les algorithmes sont implémentés en C++ et sont optimisés pour la vitesse. La bibliothèque Mahotas est rapide avec un code minimaliste et même des dépendances minimales.
Lisez leur document officiel ici pour plus d’informations.

Ressources

La documentation contient des instructions d’installation, des exemples et même quelques tutoriels pour vous aider à démarrer facilement avec Mahotas.

Usage

La bibliothèque Mahotas utilise un code simple et surtout efficace. Pour les BDs “Où est Charlie”, Mahotas fait du bon travail pour repérer charlie et cela aussi avec un minimum de code.

from pylab import imshow, show
import mahotas
import mahotas.demos
wally = mahotas.demos.load('Wally')
imshow(wally)
show()

Où est Charlie?

Charlie trouvé

8. SimpleITK

ITK ou Insight Segmentation and Registration Toolkit est un système multi-plateforme open-source offrant aux développeurs une suite complète d’outils logiciels pour l’analyse d’images. Parmi elles, SimpleITK est une couche simplifiée construite sur ITK, destinée à faciliter son utilisation dans les langages interprétés. SimpleITK est une boîte à outils d’analyse d’images comprenant un grand nombre de composants prenant en charge les opérations de filtrage générales, la segmentation et l’enregistrement des images. SimpleITK lui-même est écrit en C++ mais est disponible pour un grand nombre de langages de programmation, y compris Python.

Ressources

Un grand nombre de Jupyter Notebooks illustrant l’utilisation de SimpleITK pour des activités d’enseignement et de recherche ont été fournis. Les notebooks illustrent l’utilisation de SimpleITK pour l’analyse d’images interactive à l’aide des langages de programmation Python et R.

Usage

L’animation ci-dessous est une visualisation d’un processus d’enregistrement CT/MR rigide créé avec SimpleITK et Python. Regardez le code source ici.

9. Pgmagick

Pgmagick est un wrapper basé sur Python pour la bibliothèque GraphicsMagick. Le système de traitement d’image GraphicsMagick est parfois appelé le couteau suisse du traitement de l’image. Il fournit une collection robuste et efficace d’outils et de bibliothèques prenant en charge la lecture, l’écriture et la manipulation d’une image dans plus de 88 formats principaux, notamment des formats importants tels que DPX, GIF, JPEG, JPEG-2000, PNG, PDF, PNM et TIFF.

Ressources

Il existe un Github repository dédié à PgMagick qui contient des instructions pour les installations et les pré-requis. Il existe également un guide d’utilisation détaillé sur le sujet.

Usage

Quelques cas de manipulation d’images peuvent être effectuées avec PgMagick:

  • Mise à l’échelle d’image
    from pgmagick import Image, Blob
    
    img = Image(Blob(open('lena_std.jpg').read()), Geometry(200, 200))
    img.scale('200x200')
    img.write('lena_scale.jpg')

Mise à l'échelle d'image

  • Extraction des bords
    from pgmagick.api import Image
    
    img = Image('lena.jpg')
    img.edge(2)
    img.write('lena_edge.jpg')

Extraction des bords

10. Pycairo

Pycairo est un ensemble de liaisons en python pour la bibliothèque graphique cairo. Cairo est une bibliothèque graphique 2D permettant de dessiner des graphiques vectoriels. Les graphiques vectoriels sont intéressants car ils ne perdent pas en netteté lorsqu’ils sont re-dimensionnés ou transformés. Pycairo est un ensemble de liaisons pour cairo qui peut être utilisé pour appeler des commandes cairo à partir de Python.

Ressources

Le GitHub repository de Pycairo est une bonne ressource avec des instructions détaillées sur l’installation et l’utilisation. Il existe également un guide de démarrage qui contient un bref tutoriel sur Pycairo.

Usage

Tracer des lignes, des formes de base et des gradients radiaux avec Pycairo.

pycario

Conclusion

Voici donc quelques-unes des bibliothèques de manipulations et traitement d’images utiles et disponibles gratuitement en Python. Certaines sont assez connues et d’autres peuvent être des découvertes pour vous. Essayez-les pour en savoir plus 🙂