Comment assembler une mosaïque d’images avec R et ImageMagick ?
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 :
magick— l’interface R vers ImageMagickmagrittr— pour le pipe%>%here— pour la gestion des chemins
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).