Re: Понижение глубины цвета
- From
- Sergey Andrianov (2:5020/1507.400)
- To
- Dmitriy Shevnin
- Date
- 2002-12-12T16:20:52Z
- Area
- RU.ALGORITHMS
Здравствуй, Dmitriy!
Однажды 09-Dec-02 в 09:29 Dmitriy Shevnin (2:5056/16.40)
написал Sergey Andrianov по поводу
-=- Понижение глубины цвета -=-
SA>> Вот здесь и имеет значение алгоритм приведения к фиксированной
SA>> палитре: при округлении можно брать средний, а при дизеринге
SA>> предпочтительнее цвета расположенные ближе к периферии.
DS> расскажите пожалуйста поподробнее, что дает дизеринг и как его осуществить?
Приведу фрагмент моего письма двух-с-половиной-летней давности, касающегося монохромногг случая. Вообще-то дизеринг служит для сохранения среднего цветового баланса за счет некоторого ухудшения пространственного разрешения.
- Алгоритмы (2:5017/13.40) ------------------------------------- RU.ALGORITHMS
Msg : 917 of 3068 -913 Loc Scn
From : Sergey Andrianov 2:5017/13.40 Вcк 30 Июл 00 10:27
To : Sergey Radkevitch
Subj : Bmp256 -> Bmp2
-2214--------------------------------------------------------------------------
Здравствyй, yважаемый Sergey!
Недавно, Чет Июл 27 2000 в 19:01, некто Sergey Radkevitch
писал Anatoly Ganitsky по поводy Bmp256 -> Bmp2 :
AG>> Kто подскажет, как пpеобpазовать чёpно-белую каpтинку (с
AG>> гpадациями) в чёpно-белую без гpадаций (двухцветную)? Только не
AG>> так, что если яpкость точки больше половины, то это белый, иначе
AG>> чёpный, а так чтобы была имитация... эээ сеpости :)
SR> Я на 2-ом куpсе пытался то же самое для 16-ти и 64-х цветов сделать.
SR> (отобpажение true-color каpтинки на EGA). Вообще, есть такое слово
SR> dithering, но вот что оно означает - до сих поp точно не знаю :)))
[...]
SR> Способ 1.
[...]
SR> 3) получаешь случайное число в диапазоне от 0 до 1
SR> если число получилось меньше, чем вычисленная яpкость, то ставишь
SR> белую точку, иначе чеpную
Вообще-то дизеринг отличается от этого алгоритма тем, что добавляется не
случайное число, а ошибка, получившаяся при округлении цвета предыдущей точки.
Т.е. пусть у нас идут подряд точки с яркостью 0.7. Первая точка округляется до
1, ошибка -0.3, складываем ее со следующим числом, получаем 0.7-0.3=0.4,
округляем до 0, ошибка 0.4, складываем со следующим, 0.7+0.4=1.1, округляем до
1, ошибка 0.1 и и.д.
Это - одномерный случай. В двумерном случае (для плоского изображения)
желательно распространять ошибку не на одну правую точку (при проходе слева
направо), а на возможно бОльшее число соседей, для чего вводим буфер в одну
строку растра для подсчета ошибки и распределяем ее (ошибку) в несколько
соседних точек.
Считая, что перебор точек идет сверху вниз по строкам, а в строке слева
направо по точкам:
***************
***************
*******#о......
......ооо......
...............
# - рассматриваемая в данный момент точка,
* - уже заполненные точки,
. - свободные точки,
о - свободные точки, в которые распространяется ошибка.
Не прощаюсь
Sergey
--- --- Да будет свет ! ---
До свидания, в 16:16 MSK
Sergey
---
* Origin: Sergiev Posad (2:5020/1507.400)