Черно-белая картинка,ДВА цвета

yugene

Отошел от дел
Originally posted by SiMM
А вот теперь представь такую ситуацию. Я заливаю фон чёрным (цвет 0), и потом пишу на ней цветом 127. При этом в оригинале, в grayscale, ты будешь видеть, что я написал. А теперь пройдись своим алгоритмом по написанному мной тексту и получишь чёрный квадрат Малевича. Так понятнее?
А если сравнивать не с 0-128-256, а с минимальный_цвет_в_картинке-середина-максимальный_цвет_в_картинке?
 

untied

Сдвинутый новичок
Дык это я и предлагал: перевести RGB в оттенки_серого_RGB и сравнивать. 128 -- это и есть середина между минимальным цветом и максимальным (для модели RGB, где используется 8 бит на канал).

SiMM прав, что картинка получаемая таким методом выглядит не очень впечатляюще. Какие бы элементарные преобразования с цветовыми моделями ни проводить, все равно результат будет не блестящим (резкие границы между черным и белым, отсутствие переходов). Единственное решение -- это dithering (я неправильно обозвал это diffusion постом выше).
 

yugene

Отошел от дел
Originally posted by untied
Дык это я и предлагал: перевести RGB в оттенки_серого_RGB и сравнивать. 128 -- это и есть середина между минимальным цветом и максимальным (для модели RGB, где используется 8 бит на канал).
Уточню. Минимальный_цвет_в_картинке != Минимально_возможный_цвет_в_картинке (т.е. 0). Минимальный_цвет_в_картинке == Минимальный_цвет_из_используемых (127 в примере SiMM). Если брать 0-128-255, то получится, что и 0, и 127 будут отнесены к черному. Если использовать мой вариант, то разделение получится по схеме 0-63-127. Таким образом, все цвета от 0 до 63 останутся черным, а от 64 до 127 - станут белым. Соответственно, если на картинке будут, например, цвета 64, 98, 125, 167 и 192, то сравнение будет производиться относительно 64-((64+192)/2)-192.
 

SiMM

Новичок
Вот ведь Кулибины. yugene, ещё раз, специально для тебя. Теперь я беру картинку, содержащую в себе 5 цветов: 0, 0x3F, 0x7F, 0xBF, 0xFF. Дальше продолжать или и так уже всё понятно? Не годятся для этого "попиксельные" алгоритмы - тут "блочные" надо использовать (могу быть не прав - не погружался я во всё это глубоко). Но это уже к PHP никакого отношения не имеет.
 

yugene

Отошел от дел
Originally posted by SiMM
Вот ведь Кулибины. yugene, ещё раз, специально для тебя. Теперь я беру картинку, содержащую в себе 5 цветов: 0, 0x3F, 0x7F, 0xBF, 0xFF. Дальше продолжать или и так уже всё понятно? Не годятся для этого "попиксельные" алгоритмы - тут "блочные" надо использовать (могу быть не прав - не погружался я во всё это глубоко). Но это уже к PHP никакого отношения не имеет.
Не совсем полный пример. В том виде, в каком он записан сейчас - все будет отлично работать, причем так, как и должно. А вот если уточнить, что пикселей цвета 0, 0x3F или 0x7F - 99% картинки и лишь, скажем, по 1 пикселю цвета 0xBF и 0xFF, тогда результат будет плохой. В таком случае надо разделять отрезок 0-255 не пополам, а пропорционально количеству цветов, которые, соответственно, ближе к 0 или к 255. В любом случае, SiMM прав - это решение надо искать на алгоритмических форумах, а здесь уже спрашивать про непонятные детали реализации конкретного алгоритма на PHP.
 

SiMM

Новичок
Кстати, я тут как то заикнулся по поводу "чанков". Кое-что на эту тему можно глянуть здесь (читать вступление - всё остальное узкоспециализированно ;) ).
 
Сверху