O pacote imgpalr
facilita a criação de paletas de cores a partir de arquivos de imagem.
Escolha o tipo de paleta de cores a ser derivada de uma imagem: qualitativa, sequencial ou divergente.
Os quantis de uma distribuição de cores de imagem podem ser cortados.
Cores quase pretas ou quase brancas podem ser cortadas no espaço RGB independentemente do corte das distribuições de brilho ou saturação no espaço HSV.
A criação de paletas sequenciais também oferece controle sobre a ordem das dimensões de cores HSV a serem classificadas.
Instale a versão CRAN do imgpalr
com
instalar.packages("imgpalr")
Instale a versão de desenvolvimento do GitHub com
# install.packages("remotes")remotes::install_github("leonawicz/imgpalr")
A função principal é image_pal()
. Aceita imagens PNG, JPG, BMP ou GIF (primeiro quadro) de disco ou URL. Ele retorna um vetor de cores que define uma paleta baseada na imagem e nos outros argumentos da função. Você também pode definir plot = TRUE
para traçar uma visualização da paleta, que inclui a miniatura da imagem de origem para referência visual.
Os exemplos abaixo oferecem algumas considerações típicas a serem feitas ao derivar uma paleta de cores a partir de uma imagem arbitrária.
Neste primeiro conjunto de exemplos, paletas divergentes, qualitativas e sequenciais são geradas a partir da mesma imagem e variando algumas configurações adicionais.
biblioteca (imgpalr) set.seed(1)x <- paste0(system.file(package = "imgpalr"), "/", c("azul-amarelo", "roxos", "cores"), ".jpg")# Três tipos de paleta, uma imagem# Uma paleta divergenteimage_pal(x[1], type = "div", saturação = c(0.75 , 1), brilho = c(0,75, 1), gráfico = VERDADEIRO)
# Uma paleta qualitativa_pal(x[1], type = "qual", bw = c(0,25, 0,9), plot = TRUE)
# Uma paleta sequencialimage_pal(x[1], type = "seq", k = 2, saturação = c(0,75, 1), brilho = c(0,75, 1), seq_by = "hsv", plot = TRUE)
Nesta imagem de teste, o matiz varia em uma faixa estreita. Uma paleta sequencial é sensata aqui, mas não necessariamente melhor classificada por matiz. Fazer isso ainda mostra uma ordem perceptível nas cores, mas é muito mais difícil de discernir. Classificar a paleta primeiro por saturação ou brilho cria uma paleta sequencial muito melhor neste caso.
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)
Usando uma imagem com vários tons proeminentes, uma paleta divergente não faz sentido aqui. Um sequencial provavelmente é melhor classificado por matiz.
Observe que na segunda imagem abaixo, você também pode definir quantize = TRUE
para mostrar uma imagem em miniatura de referência com quantização de cores com base na paleta derivada. Isso faz uso da função image_quantmap()
. Em vez de apenas quantizar a imagem, ele faz isso ao mesmo tempo em que mapeia as cores de qualquer imagem para uma paleta de cores arbitrária com base nas distâncias mais próximas no espaço RGB.
image_pal(x[3], type = "qual", brilho = c(0,4, 1), plot = TRUE)
image_pal(x[3], tipo = "seq", bw = c(0,2, 1), saturação = c(0,2, 1), plotar = VERDADEIRO, quantizar = VERDADEIRO)
A geração de paleta usa cluster k-means; os resultados são diferentes cada vez que você chama image_pal()
. Se a paleta obtida não parecer correta, mesmo com argumentos fixos, você poderá executá-la novamente para obter uma paleta diferente. Dependendo das configurações e da natureza da imagem de origem, ela pode mudar bastante. Se você precisar de uma paleta reproduzível, defina o argumento seed
. No exemplo acima, a semente foi definida globalmente para evitar a necessidade de defini-la em cada chamada para image_pal()
.
Você pode quantizar as cores em uma imagem usando image_quantmap()
diretamente. Escolha qualquer vetor de cores. Cada pixel tem sua cor mapeada para qualquer uma dessas cores que esteja mais próxima no espaço RGB. A matriz RGB é retornada. Você pode plotar a imagem com a paleta.
x <- system.file("blue-yellow.jpg", package = "imgpalr")pal <- c("black", "navyblue", "dodgerblue", "yellow")a <- image_quantmap(x, pal , k = 7, gráfico = VERDADEIRO)
str(a)#> num [1:317, 1:400, 1:3] 0 0 0 0 0 0 0 0 0 0 ...
Isso funciona bem se você quiser quantizar as cores em cores a uma curta distância no espaço RGB, mas se quiser também trocá-las por cores muito diferentes, este deve ser um processo de duas etapas. Se você fornecer um vetor de cores de comprimento igual ao argumento pal2
, essas cores substituirão aquelas em pal
após a quantização inicial.
pal2 <- c("vermelho escuro", "verde escuro", "tomate", "laranja")a <- image_quantmap(x, pal, pal2, k = 7, plot = TRUE, show_pal = FALSE)
Nota: Esta função pode ser muito lenta para imagens k
grandes e/ou maiores.
Há também o pacote RImagePalette no CRAN, que usa o algoritmo de corte mediano para encontrar as cores dominantes em uma imagem.
imgpalr
foi originalmente inspirado no pacote paletar no GitHub. Ambos os pacotes usam agrupamento k-means para encontrar as principais cores da imagem, mas adotam algumas abordagens diferentes nos métodos de montagem de paletas de cores.
A visualização da paleta (sem a adição de miniaturas) é baseada em scales::show_col()
, que é uma função conveniente para plotar paletas. Você também pode usar pals::pal.bands()
para fazer o mesmo usando um layout visual diferente.
Se você deseja manipular diretamente as propriedades de cores de uma imagem por si só, em vez de derivar paletas de cores para outros fins, você pode fazer isso usando o pacote magick, que fornece ligações para a biblioteca ImageMagick.
Matthew Leonawicz (2024). imgpalr: Crie paletas de cores a partir de imagens. Pacote R versão 0.4.0. https://CRAN.R-project.org/package=imgpalr
Contribuições são bem-vindas. Contribua por meio do GitHub por meio de solicitação pull. Crie um problema primeiro se for relacionado a qualquer adição ou alteração substancial de recurso.
Observe que o projeto imgpalr
é lançado com um Código de Conduta do Colaborador. Ao contribuir para este projeto, você concorda em cumprir seus termos.