Методы создания цветовой палитры из изображения?

Скажем, у меня есть изображение с неопределенной глубиной цвета и размерами.
Какие существуют способы сжатия его до n-цветовой палитры?
Мой гугл-фу слаб с этим.


person Origamiguy    schedule 11.12.2010    source источник


Ответы (2)


Ну, самый простой подход - просто просмотреть изображение и создать словарь, отображающий цвета пикселей в целые числа. Для каждого пикселя, если его цвет есть в словаре, увеличить его счетчик. Если это не так, добавьте его со счетом 1. Это дает вам количество раз, когда каждый цвет появляется на изображении.

Затем отсортируйте по количеству, и вы найдете 256 наиболее распространенных цветов на изображении. Эти цвета составляют вашу палитру.

Затем повторите итерацию по изображению еще раз. Для каждого пикселя найдите цвет палитры, наиболее близкий к цвету этого пикселя, и установите индекс этого пикселя на этот индекс палитры.

Это будет хорошим «первым шагом», но в изображениях с большим количеством цветов поиск палитры может быть не таким хорошим. На этапе словаря вы можете захотеть объединить цвета, которые «достаточно близки», чтобы избежать большого количества очень похожих цветов, все из которых имеют плохие оценки, даже если вместе они будут очень распространены.

Для получения лучших результатов вам следует изучить методы дизеринга.

person mgiuca    schedule 11.12.2010

Проблема называется квантованием цвета. Например, см. pngquant.

Если вы ищете алгоритмы, ищите Median Cut, Octtree, K-Means, Linde–Buzo–Gray, NeuQuant. В идеале в Google Scholar, так как обычные результаты рассылаются спамом из-за маскировки платного доступа.

person Kornel    schedule 02.01.2012