Re: Понижение глубины цвета

From
Sergey Andrianov (2:5020/1507.400)
To
Max Pervukhin
Date
2002-12-07T21:56:08Z
Area
RU.ALGORITHMS
Здравствуй, Max!

Однажды 23-Nov-02  в 22:43   Max Pervukhin (2:5000/111.35)
написал       Vladimir Siltchenko    по поводу
-=-   Понижение глубины цвета  -=-

VS>>> Есть исходная картинка в 24 битном цвете.
VS>>> Нужно понизить глубину цвета до 256 цветов (т-е цветовая карта).
VS>>> Первое, что пришло в голову: все возможные цвета разбиваются на
VS>>> 256 групп.

MP> Есть так называемый алгоритм двоичного разбиения цветового пространства.
MP> Состоит в следующем.

MP> Рассматриваем цвет как координаты точки в трехмерном пространстве.
MP> Все цвета использованные в картинке дадут нам множество точек в этом самом
MP> пространстве.

MP> Для этого множества строим минимальный ограничивающий паралелипипед. То 
MP> есть по каждой цветовой координате находим максимальное и минимальное 
MP> значения. 

MP> Рубим этот паралелепипед вдоль самой длинной стороны. Мнощество точек 
MP> (цветов) таким образом тоже делится на две части. Для каждого из этих 
MP> множеств опять же строим минимальный ограничивающий паралелипипед, каждый 
MP> из которых, в свою очередь рубим вдоль длинной стороны и делим множество 
MP> цветов тоже пополам и тд. 

MP> Рекурсивный алгоритм, как легко увидеть. На каждом уровне рекурсии 
MP> количество подмножеств исходного цветового множества удваивается.

MP> Kогда их станет столько, сколько нужно (в данном случае 256) работу 
MP> алгоритма можно закончить и приблизить все цвета одного подмножества одним 
MP> цветом - средним цветом или еще как нибудь.

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

MP> После этого заменить цвета в исходном изображении на посчитанные таким вот
MP> образом. Для улучшения результатов можно использовать дизеринг.

                  До свидания,  в  21:54 MSK
                                 Sergey

---
 * Origin: Sergiev Posad (2:5020/1507.400)