Ordered dithering (Порядковый дизеринг)
В отличие от дизеринга Флойда-Стейнберга, порядковый дизеринг часто имитируется художниками пиксель-арта и есть в старых играх. Порядковый дизеринг обладает шаблоном и видом, который ни с чем не перепутаешь. Благодаря нему проще всего добиться эстетики старых компьютерных игр. Этот дизеринг лучше справляется с цветными изображениями, чем с черно-белыми.
Он тоже однопроходной и в отличие от Ф-С не требует знания о соседних пикселях. Достаточно знать координаты точки, и мы получим новый цвет. Перед тем как начать приводить картинку к наименьшей палитре, необходимо выбрать несколько параметров:
- Размер матрицы Байера - чем больше будет размер матрицы, тем больше нюансов цвета мы можем попробовать передать. (Размер следует выбирать равный или больший, чем пропорции исходных и конечных цветов. Для полноцветного изображения в 65535 цветов, переводимого в 2 цвета, будет пропорция 32767, а значит, матрица будет размера 151x217. Если мы хотим перевести полноцветное изображение в цвета ZX Spectrum, то получаем пропорцию 4369 и размер матрицы 17x257. Сам не проверял и верю Википедии в этом.)
- Размер допуска - насколько цвета в конечной палитре отстоят друг от друга.
Теперь мы “замостим” наше изображение матрицей Байера и будем брать цвет, равный сумме цвета исходного пикселя и элемента матрицы, помноженного на размер допуска. При сложении в RGB режиме пиксель становится светлее, при неправильно выбранном допуске можем получить засвеченную картинку. Либо на абсолютно чёрном фоне появятся серые пиксели при достаточно большой матрице и допуске. Матрица Байера (как я понимаю, это и есть фильтр Байера, используемый в фототехнике) попеременно ставит тёмные и светлые пиксели, делая чётные и нечётные квадраты близкими по цвету.
Пример матрицы для замащивания. Ячейки содержат цвет номера помноженный на допуск.
При поиске конечных цветов одни будут подходить ближе к темной границе света, а другие к светлой. Таким образом образуется не всегда видимый глазу узор, который содержит до нескольких цветов, поэтому получается эмулировать больше цветов, чем даёт нам результирующее устройство - принтер или экран.
Алгоритм очень сильно зависит от начально выбранных параметров и при различных матрицах будет давать разные результаты. Поэтому отлаживать алгоритм сложно. Ниже картина Мойры Ханн, обработанная несколькими фильтрами.
- Исходник
- Черно-белый с матрицей 2х2
- Черно-белый с матрицей 8х8
- Цвета ZX Spectrum и матрица 8x8
Кстати, о цветовой палитре Спектрума. Она не совсем обычна. На каждый пиксель выделено четыре бита. Первый бит отвечает за яркость, а остальные за цвет (красный, синий, зелёный), и благодаря такому сочетанию получается пятнадцать цветов. Почему пятнадцать? Черный присутствует и в яркой палитре, и в тёмной, а вот белый не в яркой палитре является серым.