El paquete imgpalr
facilita la creación de paletas de colores a partir de archivos de imagen.
Elija el tipo de paleta de colores que se derivará de una imagen: cualitativa, secuencial o divergente.
Se pueden recortar los cuantiles de la distribución de color de una imagen.
Los colores casi negros o casi blancos se pueden recortar en el espacio RGB independientemente del recorte de las distribuciones de brillo o saturación en el espacio HSV.
La creación de paletas secuenciales también ofrece control sobre el orden de las dimensiones de color HSV para ordenar.
Instale la versión CRAN de imgpalr
con
instalar.paquetes("imgpalr")
Instale la versión de desarrollo desde GitHub con
# install.packages("remotos")remotes::install_github("leonawicz/imgpalr")
La función principal es image_pal()
. Acepta imágenes PNG, JPG, BMP o GIF (primer fotograma) ya sea desde el disco o desde la URL. Devuelve un vector de colores que definen una paleta basada en la imagen y los demás argumentos de la función. También puede configurar plot = TRUE
para trazar una vista previa de la paleta, que incluye la miniatura de la imagen de origen como referencia visual.
Los ejemplos siguientes ofrecen algunas consideraciones típicas que se deben tener en cuenta al derivar una paleta de colores a partir de una imagen arbitraria.
En este primer conjunto de ejemplos, se generan paletas divergentes, cualitativas y secuenciales a partir de la misma imagen y variando algunas configuraciones adicionales.
biblioteca (imgpalr) set.seed(1)x <- pegar0(system.file(paquete = "imgpalr"), "/", c("azul-amarillo", "púrpuras", "colores"), ".jpg")# Tres tipos de paleta, una imagen# Una paleta divergenteimage_pal(x[1], tipo = "div", saturación = c(0.75 , 1), brillo = c(0,75, 1), gráfico = VERDADERO)
# Una paleta cualitativaimage_pal(x[1], type = "qual", bw = c(0.25, 0.9), plot = TRUE)
# Una paleta secuencialimage_pal(x[1], tipo = "seq", k = 2, saturación = c(0.75, 1), brillo = c(0.75, 1), seq_by = "hsv", plot = TRUE)
En esta imagen de prueba, el tono varía en un rango estrecho. Una paleta secuencial es sensata aquí, pero no necesariamente es mejor ordenarla por tono. Al hacerlo, todavía se muestra un orden perceptible en los colores, pero es mucho más difícil de discernir. Ordenar la paleta primero por saturación o brillo crea una paleta secuencial mucho mejor en este caso.
image_pal(x[2], tipo = "seq", seq_by = "hsv", trazado = VERDADERO)
image_pal(x[2], tipo = "seq", seq_by = "svh", trazado = VERDADERO)
image_pal(x[2], tipo = "seq", seq_by = "vsh", trazado = VERDADERO)
Al utilizar una imagen con varios tonos prominentes, una paleta divergente no es sensata aquí. Es probable que sea mejor ordenar una secuencia por tono.
Tenga en cuenta que en la segunda imagen a continuación, también puede configurar quantize = TRUE
para mostrar una imagen en miniatura de referencia cuantificada en color basada en la paleta derivada. Esto hace uso de la función image_quantmap()
. En lugar de limitarse a cuantificar la imagen, lo hace al mismo tiempo que asigna los colores de cualquier imagen a una paleta de colores arbitraria basada en las distancias más cercanas en el espacio RGB.
image_pal(x[3], tipo = "qual", brillo = c(0.4, 1), trazado = VERDADERO)
image_pal(x[3], tipo = "seq", bw = c(0.2, 1), saturación = c(0.2, 1), trazar = VERDADERO, cuantizar = VERDADERO)
La generación de paletas utiliza agrupación de k-medias; Los resultados son diferentes cada vez que llamas image_pal()
. Si la paleta que obtiene no le parece correcta, incluso con argumentos fijos puede ejecutarla nuevamente para obtener una paleta diferente. Dependiendo de la configuración y la naturaleza de la imagen de origen, puede cambiar bastante. Si necesita una paleta reproducible, establezca el argumento seed
. En el ejemplo anterior, la semilla se configuró globalmente para evitar tener que configurarla en cada llamada a image_pal()
.
Puedes cuantificar los colores de una imagen usando image_quantmap()
directamente. Elija cualquier vector de colores. Cada píxel tiene su color asignado a cualquiera de estos colores al que esté más cerca en el espacio RGB. Se devuelve la matriz RGB. Puedes trazar la imagen con la paleta.
x <- system.file("azul-amarillo.jpg", paquete = "imgpalr")pal <- c("negro", "azul marino", "dodgerblue", "amarillo")a <- image_quantmap(x, amigo , k = 7, gráfico = VERDADERO)
str(a)#> número [1:317, 1:400, 1:3] 0 0 0 0 0 0 0 0 0 0 ...
Esto funciona bien si desea cuantizar los colores a colores que se encuentran a corta distancia en el espacio RGB, pero si también desea intercambiarlos por colores muy diferentes, este debería ser un proceso de dos pasos. Si proporciona un vector de colores de igual longitud al argumento pal2
, estos colores reemplazarán a los de pal
después de la cuantización inicial.
pal2 <- c("rojo oscuro", "verde oscuro", "tomate", "naranja")a <- image_quantmap(x, pal, pal2, k = 7, plot = TRUE, show_pal = FALSE)
Nota: Esta función puede ser muy lenta para k
grandes y/o imágenes más grandes.
También existe el paquete RImagePalette en CRAN, que utiliza el algoritmo de corte medio para encontrar los colores dominantes en una imagen.
imgpalr
se inspiró originalmente en el paquete paleta de GitHub. Ambos paquetes utilizan la agrupación de k-means para encontrar colores clave de imágenes, pero adoptan enfoques diferentes en los métodos para ensamblar paletas de colores.
La vista previa de la paleta (sin la adición de miniaturas) se basa en scales::show_col()
, que es una función conveniente para trazar paletas. También puedes usar pals::pal.bands()
para hacer lo mismo usando un diseño visual diferente.
Si desea manipular directamente las propiedades de color de una imagen por sí misma en lugar de derivar paletas de colores para otros fines, puede hacerlo utilizando el paquete magick, que proporciona enlaces a la biblioteca ImageMagick.
Mateo Leonawicz (2024). imgpalr: crea paletas de colores a partir de imágenes. Versión del paquete R 0.4.0. https://CRAN.R-project.org/package=imgpalr
Las contribuciones son bienvenidas. Contribuya a través de GitHub mediante solicitud de extracción. Primero cree un problema si se trata de agregar o cambiar alguna característica importante.
Tenga en cuenta que el proyecto imgpalr
se publica con un Código de conducta para colaboradores. Al contribuir a este proyecto, usted acepta cumplir con sus términos.