Traitement Facile des Images dans R à l’Aide du Package Magick



Traitement Facile des Images dans R à l’Aide du Package Magick

Cet article décrit comment effectuer un traitement d’images dans R en utilisant le package R de magick, qui est lié à la bibliothèque ImageMagick : la bibliothèque de traitement d’images open-source la plus complète disponible.

Le package magick R supporte les:

  • De nombreux formats courants : png, jpeg, tiff, pdf, etc
  • Différents types de manipulations : rotation, mise à l’échelle, recadrage, coupe, retournement, flou, etc.

Toutes les opérations sont vectorisées à l’aide de Magick++ STL, ce qui signifie qu’elles fonctionnent soit sur une seule image, soit sur une série d’images pour travailler avec des calques, des collages ou des animations.

Dans RStudio, les images sont automatiquement prévisualisées lorsqu’elles sont imprimées sur la console, ce qui donne un environnement d’édition interactif.



Sommaire:

Installation

  • Pour Mac OS ou Windows:
install.packages("magick")
  • Pour Linux, vous pouvez installer à partir des sources
  1. Installer la configuration requise du système:
sudo apt-get install -y libmagick++-dev
  1. Installez le package R
install.packages("magick")

Charger le package

library(magick)

Formats pris en charge par ImageMagick sur votre système

str(magick::magick_config())
## List of 21
##  $ version           :Class 'numeric_version'  hidden list of 1
##   ..$ : int [1:4] 6 9 6 6
##  $ modules           : logi FALSE
##  $ cairo             : logi TRUE
##  $ fontconfig        : logi TRUE
##  $ freetype          : logi TRUE
##  $ fftw              : logi FALSE
##  $ ghostscript       : logi FALSE
##  $ jpeg              : logi TRUE
##  $ lcms              : logi FALSE
##  $ libopenjp2        : logi FALSE
##  $ lzma              : logi TRUE
##  $ pangocairo        : logi TRUE
##  $ pango             : logi TRUE
##  $ png               : logi TRUE
##  $ rsvg              : logi TRUE
##  $ tiff              : logi TRUE
##  $ webp              : logi TRUE
##  $ wmf               : logi FALSE
##  $ x11               : logi FALSE
##  $ xml               : logi TRUE
##  $ zero-configuration: logi TRUE

Édition d’images : Lire, écrire et convertir des images

Fonctions R clés:

image_read(path, density = NULL, depth = NULL, strip = FALSE)

image_write(image, path = NULL, format = NULL, quality = NULL,
  depth = NULL, density = NULL, comment = NULL, flatten = FALSE)

image_convert(image, format = NULL, type = NULL, colorspace = NULL,
  depth = NULL, antialias = NULL)

Le format du fichier d’image en entrée peut être un chemin d’accès, une URL ou un vecteur brut avec des données d’image.

Lire une image dans R.

frink <- image_read("https://jeroen.github.io/images/frink.png")
## print(frink)

Exemple d’image

# Affiche quelques méta-données sur l'image
image_info(frink)
##   format width height colorspace matte filesize
## 1    PNG   220    445       sRGB  TRUE    73494

Exporter une image dans n’importe quel format vers un fichier sur disque. Vous pouvez spécifier le paramètre format pour convertir l’image dans un autre format.

# Rendu png en jpeg
image_write(frink, path = "frink.jpg", format = "jpeg", quality = 75)

Si path est un nom de fichier, image_write renvoie path en cas de succès, de sorte que le résultat peut être transmis à une fonction prenant un chemin de fichier.

Convertir les formats d’images. Vous pouvez convertir en interne l’image dans un autre format avant d’appliquer les transformations. Cela peut être utile si votre format original est perdu.

frink_jpeg <- image_convert(frink, "jpeg")
image_info(frink_jpeg)
##   format width height colorspace matte filesize
## 1   JPEG   220    445       sRGB  TRUE        0

Notez que la taille est actuellement de 0 car ImageMagick est paresseux (dans le bon sens du terme) et ne rend pas avant que cela ne soit nécessaire. Vous pouvez aussi utiliser image_browse() pour ouvrir l’image dans l’application par défaut de votre système pour un type donné.

Aperçu de l’image.

  • Les images Magick sont automatiquement affichées dans le Viewer de RStudio
  • Vous pouvez aussi utiliser image_browse() pour ouvrir l’image dans l’application par défaut de votre système pour un type donné.
  • Sous Linux, vous pouvez utiliser image_display() pour prévisualiser l’image dans une fenêtre X11.

Aperçu des images

Transformations d’images

Couper et éditer

Plusieurs des fonctions de transformation prennent un paramètre geometry qui nécessite une syntaxe spéciale de la forme AxB+C+D où chaque élément est facultatif. Quelques exemples:

  • image_trim(image): Réduction de la marge.
  • image_crop(image, geometry = "100x150+50"): rogner largeur:100px et hauteur:150px en commençant +50px à partir de la gauche
  • image_scale(image, geometry = "200"): redimensionner proportionnellement à la largeur: 200px
  • image_scale(image, grometry = "x200"): redimensionner proportionnellement à la hauteur: 200px
  • image_fill(image, color = "blue", point = "+100+200"): inonder avec du bleu en commençant par le point à x:100, y:200
  • image_border(frink, color = "red", geometry = "20x10"): ajoute une bordure de 20px gauche+droite et de 10px haut+bas

Changer la bordure et le fond de l’image:

# Ajouter 20px gauche/droite et 10px haut/bas
image_border(image_background(frink, "hotpink"), "#000080", "20x10")

Changer la bordure et le fond de l’image

Réduire les marges:

image_trim(frink)

Recadrer l’image. Les options sont ici largeur:100px et hauteur:150px en commençant +50px à partir de la gauche

image_crop(frink, "100x150+50")

Recadrer une image

Redimensionner l’image:

# Largeur : 300px
image_scale(frink, "300") 
# Hauteur : 300px
image_scale(frink, "x300") 

Faire pivoter ou refléter l’image

image_rotate(frink, 45)
image_flip(frink)
image_flop(frink)

Rotation ou miroir des images

Moduler et peindre une image:

# Changer la luminosité, la saturation et la teinte
image_modulate(frink, brightness = 80, saturation = 120, hue = 90)

# Peindre la chemise en bleu
image_fill(frink, "blue", point = "+100+200", fuzz = 20)

Moduler et peindre des images

Avec image_fill we can flood fill starting at pixel point. Le paramètre fuzz permet de croiser le remplissage pour les pixels adjacents de couleurs similaires. Sa valeur doit être comprise entre 0 et 256^2 en précisant la distance géométrique maximale entre les couleurs pour être considérée comme égale. Ici, nous donnons une chemise bleue au professeur Frink.

Annotations de texte

# Ajouter du texte
image_annotate(
  frink, text = "I like R!", size = 70, color = "green",
  gravity = "southwest"
  )

# Personnaliser le texte
image_annotate(
  frink, text = "CONFIDENTIAL", size = 30, 
  color = "red", boxcolor = "pink",
  degrees = 60, location = "+50+100",
  font = "Times"
  )

Annotations de texte

Les polices qui sont prises en charge sur la plupart des plates-formes sont les suivantes : "sans", "mono", "serif", "Times", "Helvetica", "Trebuchet", "Georgia", "Palatino" ou "Comic Sans".

Couches

Empiler les couches les unes sur les autres

Importation et mise à l’échelle des images:

bigdata <- image_read('https://jeroen.github.io/images/bigdata.jpg')
frink <- image_read("https://jeroen.github.io/images/frink.png")
logo <- image_read("https://jeroen.github.io/images/Rlogo.png")
img <- c(bigdata, logo, frink)
img <- image_scale(img, "300x300")
image_info(img)
##   format width height colorspace matte filesize
## 1   JPEG   300    225       sRGB FALSE        0
## 2    PNG   300    232       sRGB  TRUE        0
## 3    PNG   148    300       sRGB  TRUE        0

Imprimer les images:

# Afficher des images les unes sur les autres
image_mosaic(img)

# Créer une image unique de la taille de la première image
image_flatten(img)

# Ajout d'images
image_flatten(img, 'Add')

# Moduler les images
image_flatten(img, 'Modulate')

# Minus
image_flatten(img, 'Minus')

Empiler les couches

Combinaison ou ajout d’images

Placez les cadres d’image les uns à côté des autres:

image_append(image_scale(img, "x200"))

Ajouter des images

Empiler les images les unes sur les autres:

image_append(image_scale(img, "100"), stack = TRUE) 

Images de la pile

La composition permet de combiner deux images sur une position spécifique:

bigdatafrink <- image_scale(image_rotate(image_background(frink, "none"), 300), "x200")
image_composite(image_scale(bigdata, "x400"), bigdatafrink, offset = "+180+100")

Traitement des images

Créer une animation GIF

Animation de cadres d’images:

image_animate(image_scale(img, "200x200"), fps = 1, dispose = "previous")

Animation Gif

Crée une séquence de n images qui transforme progressivement une image en une autre.

newlogo <- image_scale(image_read("https://jeroen.github.io/images/Rlogo.png"))
oldlogo <- image_scale(image_read("https://developer.r-project.org/Logo/Rlogo-3.png"))
image_resize(c(oldlogo, newlogo), '200x150!') %>%
  image_background('white') %>%
  image_morph() %>%
  image_animate()

Animation Gif et Morth



Version: English





No Comments

Give a comment

Want to post an issue with R? If yes, please make sure you have read this: How to Include Reproducible R Script Examples in Datanovia Comments