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.
Traitement d’images en Python : 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)
- Correspondance de modèle à l’aide de la fonction match_template
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 final 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 sorte 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')
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>)
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")
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.
MAJ : Projet malheureusement abandonné :/
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.
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é.
- 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.
- 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.
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()
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') i mg.write('lena_scale.jpg')
- Extraction des bords :
from pgmagick.api import Image img = Image('lena.jpg') img.edge(2) img.write('lena_edge.jpg')
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.
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 🙂