Преобразование истинного цвета изображения RGB в индексированные цвета

Я хочу преобразовать 24-битное изображение RGB (8 бит для каждого канала) в 8 бит, используя индексированную цветовую палитру.

Моя первоначальная идея состояла в том, чтобы создать массив и просто посчитать, сколько раз каждый цвет был представлен в изображении, но я подумал, что было бы расточительно, если бы были большие области с небольшим изменением цвета, которые использовали бы все пространство палитры в пользу меньших, но, возможно, более значимых цветовых групп.

Когда я закончил создание палитры, моя идея состояла в том, чтобы рассмотреть каждый цвет RGB как трехмерную матрицу и сравнить его точечное произведение с каждой записью в палитре.

...

Как видите, я не совсем разбираюсь в терминологии, но надеюсь, вы понимаете, что я имею в виду:)

Мой вопрос Может ли кто-нибудь поделиться своим пониманием того, как к этому подойти, или, может быть, направить меня в правильном направлении к любому материалу для чтения в Интернете?

Спасибо!

2 ответа

Решение

Вы ищете для квантования цвета.

Согласно статье Пола Хекберта 1982 года, алгоритм популярности уступает Median Cut.

Существует семейство алгоритмов, аналогичных Median-Cut (пространственное подразделение), которые выбирают различные критерии, например, минимизируют дисперсию цветов в каждом разделе).

Там быстрое, но безобразное подразделение, использующее Octtree.

Существуют алгоритмы кластеризации, такие как K-Means и Linde-Buzo-Grey.

Интересной странной является нейронная сеть NeuQuant.


Я все еще пытаюсь найти лучший вариант для pngquant.

Другие вопросы по тегам