imgpalr
包可以轻松地从图像文件创建调色板。
选择从图像中派生的调色板类型:定性、顺序或发散。
可以修剪图像颜色分布的分位数。
可以在 RGB 空间中修剪接近黑色或接近白色的颜色,而与 HSV 空间中修剪亮度或饱和度分布无关。
创建顺序调色板还可以控制要排序的 HSV 颜色维度的顺序。
安装imgpalr
的 CRAN 版本
安装.packages(“imgpalr”)
从 GitHub 安装开发版本
# install.packages("remotes")remotes::install_github("leonawicz/imgpalr")
主要函数是image_pal()
。它接受来自磁盘或 URL 的 PNG、JPG、BMP 或 GIF(第一帧)图像。它返回一个颜色向量,根据图像和其他函数参数定义调色板。您还可以设置plot = TRUE
来绘制调色板的预览,其中包括用于视觉参考的源图像缩略图。
下面的示例提供了从任意图像派生调色板时需要考虑的一些典型注意事项。
在第一组示例中,从同一图像生成不同的、定性的和连续的调色板,同时改变一些附加设置。
图书馆(imgpalr) set.seed(1)x <- Paste0(system.file(package = "imgpalr"), "/", c("blue-yellow", "purples", "colors"), ".jpg")# 三种调色板类型,一张图像# 发散调色板image_pal(x[1], type = "div", Saturation = c(0.75 , 1), 亮度 = c(0.75, 1), 绘图 = TRUE)
# 定性调色板image_pal(x[1], type = "qual", bw = c(0.25, 0.9),plot = TRUE)
# 顺序调色板image_pal(x[1], type = "seq", k = 2, 饱和度 = c(0.75, 1), 亮度 = c(0.75, 1), seq_by = "hsv",plot = TRUE)
在此测试图像中,色调在很窄的范围内变化。在这里,顺序调色板是明智的,但不一定最好按色调排序。这样做仍然可以显示出可感知的颜色顺序,但更难以辨别。在这种情况下,首先按饱和度或亮度对调色板进行排序可以得到更好的顺序调色板。
image_pal(x[2],类型 =“seq”,seq_by =“hsv”,绘图 = TRUE)
image_pal(x[2],类型 =“seq”,seq_by =“svh”,绘图 = TRUE)
image_pal(x[2],类型 =“seq”,seq_by =“vsh”,绘图 = TRUE)
使用具有多种突出色调的图像,不同的调色板在这里是不明智的。顺序可能最好按色调排序。
请注意,在下面的第二张图中,您还可以设置quantize = TRUE
以显示基于派生调色板的颜色量化参考缩略图。这利用了image_quantmap()
函数。它不仅仅量化图像,还根据 RGB 空间中的最近距离将任何图像的颜色映射到任意调色板。
image_pal(x[3], 类型 = "qual", 亮度 = c(0.4, 1), 绘图 = TRUE)
image_pal(x[3], 类型 = "seq", bw = c(0.2, 1), 饱和度 = c(0.2, 1), 绘图 = TRUE,量化 = TRUE)
调色板生成使用k-means聚类;每次调用image_pal()
时结果都会不同。如果您获得的调色板感觉不正确,即使使用固定参数,您也可以再次运行它以获得不同的调色板。根据源图像的设置和性质,它可能会发生很大的变化。如果您需要可重现的调色板,请设置seed
参数。在上面的示例中,种子是全局设置的,以避免在每次调用image_pal()
时都进行设置。
您可以直接使用image_quantmap()
量化图像中的颜色。选择任何颜色向量。每个像素的颜色都映射到 RGB 空间中最接近的颜色。返回 RGB 数组。您可以使用调色板绘制图像。
x <- system.file("blue-yellow.jpg", package = "imgpalr")pal <- c("black", "navyblue", "dodgerblue", "yellow")a <- image_quantmap(x, pal ,k = 7,绘图 = TRUE)
str(a)#> 数字 [1:317, 1:400, 1:3] 0 0 0 0 0 0 0 0 0 0 ...
如果您想将颜色量化为 RGB 空间中距离较近的颜色,则此方法非常有效,但如果您还想将它们交换为非常不同的颜色,则这应该是一个两步过程。如果您向pal2
参数提供等长的颜色向量,这些颜色将在初始量化后替换pal
中的颜色。
pal2 <- c("深红色", "深绿色", "番茄", "橙色")a <- image_quantmap(x, pal, pal2, k = 7,plot = TRUE, show_pal = FALSE)
注意:对于大k
和/或更大的图像,此函数可能会非常慢。
CRAN 上还有 RImagePalette 包,它使用中值切割算法来查找图像中的主色。
imgpalr
最初的灵感来自 GitHub 上的调色板包。这两个包都使用 k 均值聚类来查找关键图像颜色,但在组装调色板的方法中采用了一些不同的方法。
调色板预览(不添加缩略图)基于scales::show_col()
,这是绘制调色板的便捷函数。您还可以使用pals::pal.bands()
使用不同的视觉布局来执行相同的操作。
如果您想直接操作图像的颜色属性,而不是为了其他目的而派生调色板,则可以使用 magick 包来实现,该包提供了到 ImageMagick 库的绑定。
马修·莱昂纳维奇 (2024)。 imgpalr:从图像创建调色板。 R 包版本 0.4.0。 https://CRAN.R-project.org/package=imgpalr
欢迎贡献。通过拉取请求通过 GitHub 做出贡献。如果涉及任何实质性功能添加或更改,请先创建问题。
请注意, imgpalr
项目是随贡献者行为准则一起发布的。通过为该项目做出贡献,您同意遵守其条款。