Методы создания цветовой палитры из изображения?
Скажем, у меня есть изображение с неопределенной глубиной цвета и размерами.
Какие есть способы сжатия до n-цветовой палитры?
Мой Google-фу слаб с этим.
2 ответа
Проблема называется квантованием цвета. Смотрите pngquant для примера.
Если вы ищете алгоритмы, то ищите Median Cut, Octtree, K-Means, Linde–Buzo–Grey, NeuQuant. В идеале в Google Scholar, поскольку регулярные результаты являются спамом из-за маскировки платных сетей.
Ну, самый простой подход - просто просмотреть изображение и создать словарь, отображающий цвета пикселя в целые. Для каждого пикселя, если его цвет находится в словаре, увеличивайте его количество. Если это не так, добавьте его со счетчиком 1. Это дает вам количество раз, когда каждый цвет появляется на изображении.
Затем сортируйте по количеству, и вы найдете 256 наиболее распространенных цветов на изображении. Эти цвета составляют вашу палитру.
Затем повторите итерацию по изображению снова. Для каждого пикселя найдите цвет палитры, который наиболее близок к цвету этого пикселя, и установите индекс этого пикселя равным индексу этой палитры.
Это будет хорошим "первым делом", но на изображениях с большим количеством цветов это может не очень хорошо отыскать палитру. На этапе словаря вы можете захотеть объединить цвета, которые "достаточно близки", чтобы избежать очень плохого количества очень похожих цветов, хотя вместе они были бы очень распространены.
Для лучших результатов, вы захотите взглянуть на методы дизеринга.