Пакет imgpalr
позволяет легко создавать цветовые палитры из файлов изображений.
Выберите тип цветовой палитры для получения изображения: качественная, последовательная или расходящаяся.
Квантили распределения цветов изображения можно обрезать.
Цвета, близкие к черному или почти белому, можно обрезать в пространстве RGB независимо от обрезки распределения яркости или насыщенности в пространстве HSV.
Создание последовательных палитр также позволяет контролировать порядок сортировки цветовых измерений HSV.
Установите версию imgpalr
CRAN с помощью
install.packages("imgpalr")
Установите версию для разработки с GitHub с помощью
# install.packages("remotes")remotes::install_github("leonawicz/imgpalr")
Основная функция — image_pal()
. Он принимает изображения PNG, JPG, BMP или GIF (первый кадр) как с диска, так и по URL-адресу. Он возвращает вектор цветов, определяющий палитру на основе изображения и других аргументов вашей функции. Вы также можете plot = TRUE
чтобы отображать предварительный просмотр палитры, который включает в себя миниатюру исходного изображения для визуального ознакомления.
В приведенных ниже примерах представлены некоторые типичные соображения, которые следует учитывать при получении цветовой палитры из произвольного изображения.
В этом первом наборе примеров расходящиеся, качественные и последовательные палитры создаются из одного и того же изображения с изменением некоторых дополнительных настроек.
библиотека (imgpalr) set.seed(1)x <-paste0(system.file(package = "imgpalr"), "/", c("сине-желтый", "фиолетовый", "цвета"), ".jpg")# Три типа палитры, одно изображение# Расходящаяся палитраimage_pal(x[1], type = "div", saturation = c(0.75 , 1), яркость = c(0,75, 1), график = ИСТИНА)
# Качественная палитра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], type = "seq", seq_by = "hsv", сюжет = TRUE)
image_pal(x[2], type = "seq", seq_by = "svh",plot = TRUE)
image_pal(x[2], type = "seq", seq_by = "vsh", сюжет = TRUE)
Используя изображение с несколькими яркими оттенками, расхождение в палитре здесь нецелесообразно. Последовательные изображения, вероятно, лучше всего сортировать по оттенку.
Обратите внимание, что на втором изображении ниже вы также можете установить quantize = TRUE
чтобы отобразить эталонное миниатюрное изображение с квантованием цвета на основе производной палитры. Для этого используется функция image_quantmap()
. Вместо того, чтобы просто квантовать изображение, он одновременно сопоставляет цвета любого изображения с произвольной цветовой палитрой на основе ближайших расстояний в пространстве RGB.
image_pal(x[3], type = "qual", яркость = c(0,4, 1), сюжет = TRUE)
image_pal(x[3], type = "seq", bw = c(0.2, 1), насыщенность = c(0.2, 1), график = ИСТИНА, квантование = ИСТИНА)
Для формирования палитры используется кластеризация k-средних; результаты различаются каждый раз, когда вы вызываете 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, сюжет = ИСТИНА)
str(a)#> num [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
выпущен с Кодексом поведения участников. Внося свой вклад в этот проект, вы соглашаетесь соблюдать его условия.