Das imgpalr
Paket erleichtert das Erstellen von Farbpaletten aus Bilddateien.
Wählen Sie die Art der Farbpalette, die aus einem Bild abgeleitet werden soll: qualitativ, sequentiell oder divergent.
Quantile einer Bildfarbverteilung können getrimmt werden.
Nahezu schwarze oder fast weiße Farben können im RGB-Raum getrimmt werden, unabhängig vom Trimmen der Helligkeits- oder Sättigungsverteilungen im HSV-Raum.
Durch das Erstellen sequenzieller Paletten können Sie auch die Reihenfolge der zu sortierenden HSV-Farbdimensionen steuern.
Installieren Sie die CRAN-Version von imgpalr
mit
install.packages("imgpalr")
Installieren Sie die Entwicklungsversion von GitHub mit
# install.packages("remotes")remotes::install_github("leonawicz/imgpalr")
Die Hauptfunktion ist image_pal()
. Es akzeptiert PNG-, JPG-, BMP- oder GIF-Bilder (erstes Bild) entweder von der Festplatte oder von der URL. Es gibt einen Farbvektor zurück, der eine Palette basierend auf dem Bild und Ihren anderen Funktionsargumenten definiert. Sie können auch plot = TRUE
festlegen, um eine Vorschau der Palette zu plotten, die die Miniaturansicht des Quellbilds als visuelle Referenz enthält.
Die folgenden Beispiele bieten einige typische Überlegungen zum Ableiten einer Farbpalette aus einem beliebigen Bild.
In dieser ersten Reihe von Beispielen werden divergente, qualitative und sequentielle Paletten aus demselben Bild und unter Variation einiger zusätzlicher Einstellungen generiert.
Bibliothek(imgpalr) set.seed(1)x <- paste0(system.file(package = "imgpalr"), "/", c("blau-gelb", "lila", "farben"), ".jpg")# Drei Palettentypen, ein Bild# Eine divergente Paletteimage_pal(x[1], type = "div", saturation = c(0.75 , 1), Helligkeit = c(0,75, 1), Diagramm = TRUE)
# Ein qualitatives paletteimage_pal(x[1], type = "qual", bw = c(0.25, 0.9), plot = TRUE)
# Eine sequentielle paletteimage_pal(x[1], type = "seq", k = 2, saturation = c(0.75, 1), Brightness = c(0.75, 1), seq_by = "hsv", plot = TRUE)
In diesem Testbild variiert der Farbton in einem engen Bereich. Eine sequentielle Palette ist hier sinnvoll, aber nicht unbedingt nach Farbtönen sortiert. Dadurch wird zwar immer noch eine wahrnehmbare Ordnung der Farben sichtbar, diese ist jedoch viel schwieriger zu erkennen. Wenn Sie die Palette zuerst nach Sättigung oder Helligkeit sortieren, erhalten Sie in diesem Fall eine viel bessere sequentielle Palette.
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)
Bei einem Bild mit mehreren markanten Farbtönen ist eine divergierende Palette hier nicht sinnvoll. Eine Sequenz wird wahrscheinlich am besten nach Farbton sortiert.
Beachten Sie, dass Sie im zweiten Bild unten auch quantize = TRUE
festlegen können, um ein farbquantisiertes Referenz-Miniaturbild basierend auf der abgeleiteten Palette anzuzeigen. Hierzu wird die Funktion image_quantmap()
verwendet. Anstatt nur das Bild zu quantisieren, werden dabei auch die Farben jedes Bilds auf der Grundlage der nächsten Abstände im RGB-Raum einer beliebigen Farbpalette zugeordnet.
image_pal(x[3], Typ = „qual“, Helligkeit = c(0,4, 1), Plot = TRUE)
image_pal(x[3], type = "seq", bw = c(0.2, 1), saturation = c(0.2, 1), Plot = WAHR, Quantisierung = WAHR)
Die Palettengenerierung verwendet K-Means-Clustering. Die Ergebnisse sind bei jedem Aufruf von image_pal()
unterschiedlich. Wenn sich die Palette, die Sie erhalten, nicht richtig anfühlt, können Sie sie trotz fester Argumente erneut ausführen, um eine andere Palette zu erhalten. Abhängig von den Einstellungen und der Art des Quellbildes kann es sich erheblich ändern. Wenn Sie eine reproduzierbare Palette benötigen, legen Sie das seed
-Argument fest. Im obigen Beispiel wurde der Startwert global festgelegt, um zu vermeiden, dass er bei jedem Aufruf von image_pal()
festgelegt werden muss.
Sie können die Farben in einem Bild direkt mit image_quantmap()
quantisieren. Wählen Sie einen beliebigen Farbvektor. Die Farbe jedes Pixels wird derjenigen dieser Farben zugeordnet, der es im RGB-Raum am nächsten kommt. Das RGB-Array wird zurückgegeben. Sie können das Bild mit der Palette plotten.
x <- system.file("blue-gelb.jpg", package = "imgpalr")pal <- c("schwarz", "navyblau", "dodgerblue", "gelb")a <- image_quantmap(x, pal , k = 7, plot = TRUE)
str(a)#> num [1:317, 1:400, 1:3] 0 0 0 0 0 0 0 0 0 0 ...
Dies funktioniert gut, wenn Sie die Farben in Farben quantisieren möchten, die im RGB-Raum in geringer Entfernung voneinander liegen. Wenn Sie sie jedoch auch gegen sehr unterschiedliche Farben austauschen möchten, sollte dies ein zweistufiger Prozess sein. Wenn Sie dem pal2
-Argument einen Farbvektor gleicher Länge bereitstellen, ersetzen diese Farben nach der anfänglichen Quantisierung die Farben in pal
.
pal2 <- c("darkred", "darkgreen", "tomato", "orange")a <- image_quantmap(x, pal, pal2, k = 7, plot = TRUE, show_pal = FALSE)
Hinweis: Diese Funktion kann bei großen k
und/oder größeren Bildern sehr langsam sein.
Es gibt auch das RImagePalette-Paket auf CRAN, das den Median-Cut-Algorithmus verwendet, um die dominanten Farben in einem Bild zu finden.
imgpalr
wurde ursprünglich vom Paletter-Paket auf GitHub inspiriert. Beide Pakete verwenden K-Means-Clustering, um wichtige Bildfarben zu finden, verfolgen jedoch unterschiedliche Ansätze bei den Methoden zum Zusammenstellen von Farbpaletten.
Die Palettenvorschau (ohne Miniaturansicht) basiert auf scales::show_col()
, einer praktischen Funktion zum Plotten von Paletten. Sie können auch pals::pal.bands()
verwenden, um dasselbe mit einem anderen visuellen Layout zu tun.
Wenn Sie die Farbeigenschaften eines Bildes direkt für sich selbst manipulieren möchten, anstatt Farbpaletten für andere Zwecke abzuleiten, können Sie dies mit dem Magick-Paket tun, das Bindungen an die ImageMagick-Bibliothek bereitstellt.
Matthew Leonawicz (2024). imgpalr: Farbpaletten aus Bildern erstellen. R-Paketversion 0.4.0. https://CRAN.R-project.org/package=imgpalr
Beiträge sind willkommen. Tragen Sie über GitHub per Pull-Anfrage bei. Bitte erstellen Sie zunächst ein Problem, wenn es sich um wesentliche Ergänzungen oder Änderungen an Funktionen handelt.
Bitte beachten Sie, dass das imgpalr
-Projekt mit einem Verhaltenskodex für Mitwirkende veröffentlicht wird. Indem Sie zu diesem Projekt beitragen, erklären Sie sich mit den Bedingungen einverstanden.