Potion Bottle Icon Manuel d'alchimie du code Potion Bottle Icon

Créer une mosaïque d'images avec R et ImageMagick

- 296 mots - Temps de lecture estimé: 2 minutes


Sun Face IconComment assembler une mosaïque d’images avec R et ImageMagick ?Sun Face Icon


Ce tutoriel te montre comment traiter un lot d’images par programmation : les redimensionner, appliquer des filtres (tons de gris, contours, négatif, netteté) et les assembler en une mosaïque 5x5 avec la librairie magick de R.

J’avais un dossier d’images et je voulais les rassembler dans une seule mosaïque pour avoir une vue d’ensemble. Avec R et ImageMagick, c’est étonnamment simple.

graph LR
    A[Dossier images/] --> B[Lister les fichiers .jpg]
    B --> C[Appliquer effet Drawbook]
    B --> D[Appliquer effet Sharp]
    C --> E[image_montage 5×5<br>fond blanc]
    D --> F[image_montage 5×5<br>fond noir]
    E --> G[montage_drawbook.jpg]
    F --> H[montage_sharp.jpg]

Le script complet est dans le dépôt : exemple_mosaique_r_imagemagick.R.

🌘 Préparation

Le script utilise trois librairies :

Il liste toutes les images JPG du dossier images/ :

library(magrittr)
library(here)
library(magick)

repertoire.images <-
  paste0(here(),"/images/")

repertoire.res <- 
  paste0(here(),"/res/")

nom.fichiers.images <- paste0(repertoire.images,
                              list.files(repertoire.images,
                                         pattern=".*\\.jpg",
                                         include.dirs = FALSE,
                                         recursive = FALSE))

dir.create(repertoire.res, recursive = TRUE)

🌘 Effet « Drawbook »

La première fonction applique un traitement artistique : mise en gris, détection de contours, négatif puis seuillage. Le résultat ressemble à un dessin au trait.

graph LR
    A[Image originale] --> B[resize 400×300<br>filtre Lanczos]
    B --> C[grayscale]
    C --> D[edge detection]
    D --> E[negate]
    E --> F[threshold 55%]
    F --> G[despeckle]
    G --> H[blur]
    H --> I[sharpen]
    I --> J[extent 400×300<br>fond blanc]
    J --> K[Style dessin au trait]
image_drawbook <- function(image) {
  image %>%
    image_resize("400x300!", 
                 filter = "Lanczos") %>%
    image_quantize(colorspace = "gray", 
                   dither = TRUE) %>%
    image_edge() %>%
    image_negate() %>%
    image_normalize() %>%
    image_threshold(type = "black", 
                    threshold = "55%") %>%
    image_despeckle() %>%
    image_blur(radius = 1, sigma = 0.5) %>%
    image_contrast(sharpen = 1) %>%
    image_extent(geometry = "400x300", 
                 gravity = "center", 
                 color = "white")
}

🌘 Effet « Sharp »

La seconde fonction produit un rendu plus classique : redimensionnement, normalisation, réduction du bruit et accentuation.

graph LR
    A[Image originale] --> B[resize 400×300<br>filtre Lanczos]
    B --> C[normalize]
    C --> D[despeckle]
    D --> E[blur]
    E --> F[sharpen]
    F --> G[extent 400×300<br>fond noir]
    G --> H[Rendu classique net]
image_sharp_400 <- function(image) {
  image %>%
    image_resize("400x300!", 
                 filter = "Lanczos") %>%
    image_normalize() %>%
    image_despeckle() %>%
    image_blur(radius = 1, 
               sigma = 0.5) %>%
    image_contrast(sharpen = 1) %>%
    image_extent(geometry = "400x300", 
                 gravity = "center",
                 color = "black")
}

🌘 Assemblage de la mosaïque

Chaque fonction est appliquée à toutes les images du dossier, puis image_montage() les assemble en une grille 5x5.

image_read(nom.fichiers.images) %>%
  image_drawbook() %>%
  image_montage(geometry = "400x300",
                tile = "5x5",
                bg = "white") %>%
  image_write(paste0(repertoire.res,
                     "montage_drawbook.jpg"),
              format = "jpg",
              quality = 90)

Même chose pour la version sharp, mais avec un fond noir :

image_read(nom.fichiers.images) %>%
  image_sharp_400() %>%
  image_montage(geometry = "400x300",
                tile = "5x5",
                bg = "black") %>%
  image_write(paste0(repertoire.res,
                     "montage_sharp.jpg"),
              format = "jpg",
              quality = 90)

Les mosaïques sont sauvegardées dans le dossier res/ à la racine du projet.

🌘 Pour aller plus loin

La librairie magick expose presque toutes les fonctionnalités d’ImageMagick. Tu peux modifier le format de sortie, le nombre de tuiles, ou combiner d’autres filtres (flou artistique, peinture à l’huile, pixelisation).

Le code source complet est disponible ici : exemple_mosaique_r_imagemagick.R (licence MIT).

Abonne-toi au fil RSS pour ne rien manquer.

Étiquettes