Traitement d'image à l'aide de Python

Dans un article de journal de 1911 sur le journalisme et la publicité, citant la rédactrice en chef Tess Flanders, l'expression suivante apparaît:

 Utilisez une image. Ça vaut mille mots.

Une phrase similaire a également paru dans une publicité publiée dans un journal en 1913 pour la Piqua Auto Supply House:

Un regard vaut mille mots.

Je ne vais pas approfondir l'histoire. Cette introduction visait simplement à rendre le jeu un peu amusant et à montrer comment les phrases nous donnent une indication de l’importance des images et comment elles peuvent réellement contenir beaucoup d’informations. Je suis sûr que la plupart d’entre nous le réalisons, surtout quand nous remarquons qu’une image peut rester dans notre esprit plus qu’un texte pur..

Il ne fait donc aucun doute que les images jouent un rôle important dans nos communications - pas seulement les images générales, mais aussi les photos spécialisées comme les images médicales (p. Ex. IRM, échographie, etc.)..

Nous pouvons obtenir des photos à travers différents appareils d'acquisition. Par exemple, les images de mélanome (cancer de la peau) sont récupérées à l'aide d'un dermatoscope. Nous prenons des photos de nous-mêmes ou d'amis avec un appareil photo numérique ou un smartphone. Parfois, cependant, nous remarquons des problèmes dans nos images, tels que le flou, pouvant être dus au périphérique d’acquisition utilisé..

Mais que faire dans ce cas? On vous a envoyé des images médicales à analyser et vous n'avez pas le choix de les reprendre. Même si vous reprenez une image, la résolution que vous voyez ne changera pas, ni aucun autre problème auquel vous êtes confronté. Traitement d'image entre en jeu dans de telles situations.

J'ai aimé comment le terme traitement d'image a été défini dans Oxford Dictionaries:

L'analyse et la manipulation d'une image numérisée, notamment pour en améliorer la qualité.

"Image numérisée" se réfère ici au fait que l'image est considérée numérique, c'est qu'il est traité par un ordinateur. 

Obtenir l'ordinateur dans ce jeu signifie utiliser un langage de programmation. Dans ce tutoriel, je vais vous montrer comment utiliser le langage de programmation Python pour effectuer des tâches de traitement d'image sur une image..

scikit-image

La bibliothèque que nous allons utiliser pour effectuer nos tâches de traitement d’image est scikit-image. Selon l'image de papier de papier: traitement d'image en Python:

scikit-image est une bibliothèque de traitement d’images qui implémente des algorithmes et des utilitaires destinés à la recherche, à l’éducation et aux applications industrielles. Il est publié sous la licence open source libérale Modified BSD Modified, fournit une API bien documentée dans le langage de programmation Python et est développé par une équipe internationale active de collaborateurs..

La première chose à faire est d'installer scikit-image. Vous trouverez des instructions pour installer la bibliothèque sur la page de téléchargement. Dans ce tutoriel, je vais vous montrer comment installer la bibliothèque sur un ordinateur Mac OS X, car c’est ce que j’utilise actuellement pour écrire ce tutoriel..

Comme scikit-image est une bibliothèque externe, la première chose à faire est de installer cette bibliothèque. Pour cela, je vais utiliser pip, qui est (basé sur Wikipedia):

Un système de gestion de paquets utilisé pour installer et gérer les packages logiciels écrits en Python. De nombreux packages peuvent être trouvés dans l'index des packages Python (PyPI).

Vous pouvez suivre les étapes mentionnées dans le Guide de l'utilisateur de Python Packaging pour installer pépin, mais si vous avez Python 2.7.9 et supérieur, ou Python 3.4 et plus haut, vous avez déjà pépin!

scikit-image maintenant peut être simplement installé en tapant la commande suivante (dans le Terminal de Mac OS X):

pip installer -U scikit-image

Nous avons maintenant la bibliothèque installée et prête pour un traitement amusant des images!

L'image test que nous allons utiliser dans ce tutoriel est baboon.png. Allez-y et téléchargez-le, ou utilisez simplement l'image de votre choix. L'image ressemble à ceci:

Dimensions d'une image

Parfois, nous avons besoin de connaître les dimensions d'une image (plus de détails dans la section de filtrage). Afin de vérifier les dimensions de notre image, nous pouvons utiliser le guess_spatial_dimensions () méthode, comme suit:

depuis skimage import io, couleur img = io.imread ('baboon.png') dimensions = color.guess_spatial_dimensions (img) dimensions d'impression

La sortie du script ci-dessus est 3, ce qui signifie que nous avons une image composée de trois dimensions spatiales.

Couleur à niveaux de gris

Dans la section ci-dessus, nous avons remarqué que notre image est une image de matrice 3D (au format RGBA avec la forme (…,…, 4)). Comment ai-je su qu'il est au format RGBA? Vous pouvez simplement faire ce qui suit:

importer skimage.io en io à partir de skimage.color importer rgb2gray img = io.imread ('baboon.png') print img.shape

Dans ce cas, vous obtiendrez cette sortie: (512, 512, 4).

Dans cette section, nous souhaitons convertir l’image colorée originale de baboon.png en une image 2D en niveaux de gris (noir et blanc). Cela peut être fait simplement en utilisant le script suivant:

importer skimage.io en tant que io à partir de skimage.color importer rgb2gray img = io.imread ('baboon.png') img_grayscale = rgb2gray (img)

Continuons et sauvegardons la nouvelle image (niveaux de gris) dans un fichier. Cela peut être fait en utilisant le imsave () fonction, comme suit (notez que la nouvelle image est dans le fichier baboon-gs.png):

io.imsave ('baboon-gs.png', img_grayscale)

Pour vérifier les dimensions de l'image, nous pouvons utiliser le script de la section précédente, auquel cas vous obtiendriez 2 revenu. Ou vous pouvez utiliser img_grayscale.shape, qui aboutit à 512x512. Donc, nous avons maintenant une image 2D.

Pour afficher la nouvelle image en niveaux de gris, ajoutez ce qui suit à la fin du script:

show_grayscale = io.imshow (img_grayscale) io.show ()

Le résultat ressemble à ceci: 

Appliquer un filtre à une image

En traitement d'image, filtration est effectuée pour apporter des améliorations à l’image. En général, le filtrage englobe les opérations suivantes: amélioration des contours, accentuation et lissage..

Dans cette section, je vais vous montrer comment appliquer le filtre Sobel sur notre image et voir à quoi ressemble le résultat après une telle opération. Je vais utiliser l'exemple présenté sur la page d'accueil du site Web scikit-image, mais appliqué à notre image..

Le script d'application du filtre Sobel sur notre image se présente comme suit:

à partir des données d'importation skimage, io, filtres img = io.imread ('baboon.png') bords = filters.sobel (img) io.imshow (bords) io.show ()

Si vous exécutez le script, avez-vous remarqué des problèmes? Oui, nous n'avons pas pu appliquer l'opération, car l'image doit être une image 2D. Donc, au lieu d'utiliser baboon.png, nous devons utiliser notre image 2D, baboon-gs.png. La sortie de cette opération se présente comme suit:

Conclusion

Il existe de nombreuses opérations de traitement d'image, et le scikit-image La bibliothèque Python nous fournit de nombreuses opérations intéressantes que nous pouvons effectuer sur nos images. Vous pouvez voir davantage d’opérations de traitement d’images utilisant cette bibliothèque sur le site Web scikit-image..

Apprendre le python

Apprenez Python avec notre guide complet de tutoriel sur Python, que vous soyez débutant ou que vous soyez un codeur chevronné cherchant à acquérir de nouvelles compétences..