Алгоритм квантования цвета - PullRequest
3 голосов
/ 26 августа 2011

Я работаю над алгоритмом цветового квантования.

Это основной процесс:

  • Преобразование изображения в набор трехмерных векторов (например, пространство RGB).
  • Поместите этот набор в список наборов.
  • Хотя количество наборов в списке меньше количества цветов, которое вы хотите:
    • Удалить худший набор из списка.
    • Разделите его на две части.
    • Добавьте два новых набора в список.
  • Готово.

То, что я имею в виду под «наихудшим множеством», - это множество, в котором суммарное расстояние между каждым вектором и средним вектором больше.

И вот как я "разбил набор":

  • Вычислить средний вектор, сложив все векторы и разделив их на число векторов.
  • Вычисляет вектор, составленный из абсолютных разностей между каждым вектором и средним вектором. Нормализовать его, и мы получили нормаль плоскости, которая делит наш векторный набор на две равные половины.
  • Используйте это нормальное два, разбейте множество на два набора в зависимости от того, к какой стороне плоскости принадлежат векторы.

Это работает, в основном, но палитра изображений выглядит странно, как будто выбрана из линейного градиента ...

Мой алгоритм неверен? Может кто-нибудь помочь?

Ответы [ 3 ]

3 голосов
/ 26 августа 2011

Проблема в том, что ваш алгоритм LOT зависит от начальных наборов.Поскольку вы разделяете только наборы, если две точки, которые находятся очень близко друг к другу, оказываются в разных наборах в начале, они всегда будут в разных наборах.Это не хорошо.

Так что да - это хуже, чем алгоритм k-средних.

1 голос
/ 01 марта 2018

Первым шагом цветового квантования является выбор представительных K цветов из N цветов.Однако некоторые проблемы с градиентом / полосами неизбежны для изображений с таким большим количеством цветов.Затем происходит диффузия ошибок и сглаживание путем аппроксимации недоступных цветов доступными цветами путем смешивания и сопоставления доступных цветов таким образом, чтобы имитировать недоступные.

6 лучших алгоритмов квантования цвета .

Вот несколько примеров вывода:

Исходное изображение:
Original imageАлгоритм квантования нейронной сети NeuQuant уменьшен до 256 цветов:
Reduced to 256 colors by NeuQuant Neural-Net Quantization AlgorithmСокращено до 256 цветов благодаря быстрому оптимальному алгоритму квантования цвета, который дал Xialoin Wu:
Reduced to 256 colors by Xialoin Wu's fast optimal color Quantization AlgorithmИсходное фото:
Original photoУменьшено до 256 цветов с помощью алгоритма квантования NeuQuant Neural-Net: Reduced to 256 colors by NeuQuant Neural-Net Quantization AlgorithmСокращен до 256 цветов с помощью алгоритма парного анализа ближайшего соседа: Reduced to 256 colors by Pairwise Nearest Neighbor Quantization Algorithm

Читатели могут увидеть, как кодирование диффузии и сглаживания ошибок очень похоже среди лучших 5 алгоритмов квантования цветов.Каждый алгоритм имеет свои преимущества.Я делюсь источником квантования цвета, чтобы пригласить к дальнейшему обсуждению и улучшениям.Такой исходный код написан на C ++ для достижения максимальной производительности.Он также служит открытием для изучения машинного обучения.

1 голос
/ 26 августа 2011

Я не вижу, как это лучше, чем алгоритм k-средних.Может быть, вы должны просто сделать обычные k-средства.

...