Как очистить изображение от светлого ореола
Подобная проблема возникла и у меня, когда я стал искать изображения полевых цветом для создания паттернов. О паттернах и о кистях работающих на их основе, мы ещё поговорим, а сейчас передо мной стояла конкретная задача – убрать не совсем белую кайму, окружающую изображение цветов.
На иллюстрации показано исходное изображение и то, как оно выглядит на сером фоне, если объявить белый цвет прозрачным. Контур цветков сильно изрезан, и нет никакого желания чистить его вручную.
В старой программе у меня были средства для этого http://proza.ru/2021/09/17/979 есть кое-что и в новой программе. Наиболее эффективное средство это битовая дискриминация цвета. Суть этого способа состоит в обнулении некоторых (обычно младших) бит изображения, а подробно это делается так - изображение, находящееся на рисунке, сначала закрепляется, затем рисунок покрывается однородным цветом, представляющим собой битовую маску – все биты компонент цвета обнулены, и только указанное число старших бит имеют значение 1.
Например, если оставляем старшие 3 бита, то берём число 14737632 = E0E0E0 в шестнадцатиричной форме. Оставляем 2 бита – берём число C0C0C0, один единственный старший бит останется, если для маски использовать число 808080.
Что это за цвета, вы можете видеть на иллюстрации – серый фон слева 3-х битовый, правее – 2-х битовый, а тёмно серый ниже – однобитовый.
После того, как мы покрыли поле рисунка серой маской, мы считываем эту маску на невидимое вспомогательное поле, а рисунок очищаем, и прежнее изображение вновь появляется на нём. Теперь мы считываем серый фон обратно, соединяя его по битам с изображением на рисунке. При считывании используем операцию логического And, и происходят две вещи – белый фон, и светлая, обрамляющая цветы кайма становятся однородно серыми. Теперь, поменяв серый цвет на белый, мы получим желаемый результат – кайма исчезла, а цветы остались.
Вторая вещь, сопутствующая первой, это то, что цветы у нас стали более тёмными, и это закономерно, ведь младшие биты в их цвете мы обнулили.
Описанный процесс, назовём его процессом «А», может быть и проведён «шиворот-навыворот» - давайте, вместо того, обнулять младшие биты, установим в них единицы. И, смотрите, как здорово – у нас тогда сразу получится желаемый белый фон, а не серый, с которым ещё надо возиться, переводя его в белый цвет.
Такой процесс, назовём его процессом «Б», имеет одну неудобную сторону – его результатов не видно. На иллюстрации в центре показаны преобразования вида А и вида Б, проведённые с сохранением верхних двух бит. На первый взгляд оба процесса прошли удачно – никакого ореола не видно. Но это не так, после нижнего процесса Б маленький ореол остался, только он ещё более посветлел, и на белом фоне его не видно. А выше, в процессе А, ореол потемнел и присоединился к веточкам, и веточки за счёт ореола потолстели.
Более этот эффект заметен, если в неприкосновенности оставить три старших бита цвета (см. на иллюстрации слева), там после процесса Б фон сделан серым, и на нём хорошо заметен обрамляющий тонкие веточки ореол. Если это то, к чему Вы стремились, так это хорошо, а если нет, то плохо – для изготовления паттерна лучше иметь толстые веточки – паттерн меньше, чем полученное Вами изображение, поэтому, при уменьшении его, тонкие веточки могут исчезнуть.
В процессе Б, как и в процессе А имеется всё тот же недостаток – меняется цвет оставшегося изображения, в процессе Б оно светлеет, что хорошо видно на иллюстрации.
Есть эффективный способ устранения этого нежелательного результата – помещаем наш необработанный образец на поле_2. Поле_2 в моей программе, это как дополнительный слой в Фотошопе, с которого на первое, видимое поле можно переносить изображение. В Фотошопе такой способ называется «волшебная палочка» или «восстанавливающая кисть», а у меня для этих целей есть «розовый ластик».
Я помещаю на видимое поле рисунка результат дискриминации с изображением неправильного цвета, более тёмного, или более светлого, это всё равно, настраиваю розовый ластик так, чтобы он не портил мой прекрасный белый фон, и начинаю водить им по изображению в тех местах, цвет которых по моему мнению нужно поменять на начальный. Заметьте, менять цвет не всегда нужно, и не программа, а я, художник, должен решать, какому цвету быть в этом месте.
Как бы то ни было, но результат налицо – в тех местах, где я водил розовым ластиком, исходный цвет восстановился (см.иллюстрацию справа).
Хочу добавить, что описанные процессы можно проводить не по площадям, а локально. В программе имеется дискриминирующая цвет кисть, которая в другой своей опции перекрашивает один цвет в другой, не затрагивая остальных цветов. Работа этой кистью показана на иллюстрации внизу.
Итак, имеется много способов избавиться от светлой каймы, обрамляющей изображение. В частности, метод битовой дискриминации цвета показывает свою высокую эффективность. И во всех случаях лучше не полностью полагаться на автоматику, а использовать её разумно и именно так, чтобы получать желаемый результат.
__________
29.07.2023
Свидетельство о публикации №223072901155