Le package imgpalr
facilite la création de palettes de couleurs à partir de fichiers image.
Choisissez le type de palette de couleurs à dériver d'une image : qualitative, séquentielle ou divergente.
Les quantiles d'une distribution de couleurs d'image peuvent être rognés.
Les couleurs proches du noir ou du blanc peuvent être rognées dans l’espace RVB indépendamment du rognage des distributions de luminosité ou de saturation dans l’espace HSV.
La création de palettes séquentielles offre également un contrôle sur l'ordre des dimensions de couleur HSV à trier.
Installez la version CRAN d' imgpalr
avec
install.packages("imgpalr")
Installez la version de développement depuis GitHub avec
# install.packages("remotes")remotes::install_github("leonawicz/imgpalr")
La fonction principale est image_pal()
. Il accepte les images PNG, JPG, BMP ou GIF (première image) à partir du disque ou d'une URL. Il renvoie un vecteur de couleurs définissant une palette basée sur l'image et vos autres arguments de fonction. Vous pouvez également définir plot = TRUE
pour tracer un aperçu de la palette, qui inclut la vignette de l'image source à titre de référence visuelle.
Les exemples ci-dessous présentent quelques considérations typiques à prendre en compte lors de la dérivation d'une palette de couleurs à partir d'une image arbitraire.
Dans cette première série d'exemples, des palettes divergentes, qualitatives et séquentielles sont générées à partir de la même image et en faisant varier certains paramètres supplémentaires.
bibliothèque (imgpalr) set.seed(1)x <-paste0(system.file(package = "imgpalr"), "/", c("bleu-jaune", "violets", "couleurs"), ".jpg")# Trois types de palette, une image# Une palette divergenteimage_pal(x[1], type = "div", saturation = c(0.75 , 1), luminosité = c(0,75, 1), tracé = VRAI)
# Une palette qualitativeimage_pal(x[1], type = "qual", bw = c(0.25, 0.9), plot = TRUE)
# Une palette séquentielleimage_pal(x[1], type = "seq", k = 2, saturation = c(0.75, 1), luminosité = c(0.75, 1), seq_by = "hsv", plot = TRUE)
Dans cette image test, la teinte varie sur une plage étroite. Une palette séquentielle est judicieuse ici, mais pas nécessairement mieux triée par teinte. Cela montre toujours un ordre perceptible dans les couleurs, mais il est beaucoup plus difficile à discerner. Trier d'abord la palette par saturation ou par luminosité donne une bien meilleure palette séquentielle dans ce cas.
image_pal(x[2], type = "seq", seq_by = "hsv", plot = TRUE)
image_pal(x[2], type = "seq", seq_by = "svh", plot = TRUE)
image_pal(x[2], type = "seq", seq_by = "vsh", plot = TRUE)
En utilisant une image avec plusieurs teintes dominantes, une palette divergente n’est pas judicieuse ici. Il est probablement préférable de trier une séquence par teinte.
Notez que dans la deuxième image ci-dessous, vous pouvez également définir quantize = TRUE
pour afficher une image miniature de référence quantifiée par couleur basée sur la palette dérivée. Cela utilise la fonction image_quantmap()
. Plutôt que de quantifier uniquement l'image, il le fait tout en mappant les couleurs de n'importe quelle image sur une palette de couleurs arbitraire basée sur les distances les plus proches dans l'espace RVB.
image_pal(x[3], type = "qual", luminosité = c(0.4, 1), plot = TRUE)
image_pal(x[3], type = "seq", bw = c(0,2, 1), saturation = c(0,2, 1), plot = VRAI, quantification = VRAI)
La génération de palettes utilise le clustering k-means ; les résultats sont différents à chaque fois que vous appelez image_pal()
. Si la palette que vous obtenez ne vous convient pas, même avec des arguments fixes, vous pouvez la réexécuter pour obtenir une palette différente. En fonction des paramètres et de la nature de l'image source, cela peut changer considérablement. Si vous avez besoin d'une palette reproductible, définissez l'argument seed
. Dans l'exemple ci-dessus, la graine a été définie globalement pour éviter d'avoir à la définir à chaque appel à image_pal()
.
Vous pouvez quantifier les couleurs d'une image en utilisant directement image_quantmap()
. Choisissez n’importe quel vecteur de couleurs. Chaque pixel a sa couleur mappée sur la couleur dont il est le plus proche dans l'espace RVB. Le tableau RVB est renvoyé. Vous pouvez tracer l'image avec la palette.
x <- system.file("bleu-jaune.jpg", package = "imgpalr")pal <- c("noir", "bleu marine", "dodgerblue", "jaune")a <- image_quantmap(x, pal , k = 7, tracé = VRAI)
str(a)#> num [1:317, 1:400, 1:3] 0 0 0 0 0 0 0 0 0 0 ...
Cela fonctionne bien si vous souhaitez quantifier les couleurs en couleurs situées à une courte distance dans l'espace RVB, mais si vous souhaitez également les échanger contre des couleurs très différentes, cela devrait être un processus en deux étapes. Si vous fournissez un vecteur de couleurs de longueur égale à l'argument pal2
, ces couleurs remplaceront celles de pal
après la quantification initiale.
pal2 <- c("darkred", "darkgreen", "tomate", "orange")a <- image_quantmap(x, pal, pal2, k = 7, plot = TRUE, show_pal = FALSE)
Remarque : Cette fonction peut être très lente pour les images de grande k
et/ou plus grandes.
Il existe également le package RImagePalette sur CRAN, qui utilise l'algorithme de coupe médiane pour trouver les couleurs dominantes dans une image.
imgpalr
a été initialement inspiré par le package paletter sur GitHub. Les deux packages utilisent le clustering k-means pour trouver les couleurs clés de l'image, mais adoptent des approches différentes dans les méthodes d'assemblage des palettes de couleurs.
L'aperçu de la palette (sans l'ajout de vignettes) est basé sur scales::show_col()
, qui est une fonction pratique pour tracer des palettes. Vous pouvez également utiliser pals::pal.bands()
pour faire la même chose en utilisant une présentation visuelle différente.
Si vous souhaitez manipuler directement les propriétés de couleur d'une image pour elle-même plutôt que de dériver des palettes de couleurs à d'autres fins, vous pouvez le faire en utilisant le package magick, qui fournit des liaisons à la bibliothèque ImageMagick.
Matthieu Leonawicz (2024). imgpalr : créez des palettes de couleurs à partir d'images. Package R version 0.4.0. https://CRAN.R-project.org/package=imgpalr
Les contributions sont les bienvenues. Contribuez via GitHub via une pull request. Veuillez d'abord créer un problème s'il concerne un ajout ou une modification importante de fonctionnalités.
Veuillez noter que le projet imgpalr
est publié avec un code de conduite des contributeurs. En contribuant à ce projet, vous acceptez d'en respecter les termes.