Как очистить изображение от светлого ореола

  Этот вопрос возникает, когда Вы хотите создать в редакторе прозрачный фон для изображения, найденного в интернете. Чаще всего изображения в интернете имеют светлый фон, однако он не обязательно однородный и не такой уж чисто белый. Предметы, изображённые на белом фоне, обычно не имеют резких границ, более того, очень часто граница выражена широким светлым ореолом, от которого непонятно как нужно избавляться.

  Подобная проблема возникла и у меня, когда я стал искать изображения полевых цветом для создания паттернов. О паттернах и о кистях работающих на их основе, мы ещё поговорим, а сейчас передо мной стояла конкретная задача – убрать не совсем белую кайму, окружающую изображение цветов.
  На иллюстрации показано исходное изображение и то, как оно выглядит на сером фоне, если объявить белый цвет прозрачным. Контур цветков сильно изрезан, и нет никакого желания чистить его вручную.

  В старой программе у меня были средства для этого http://proza.ru/2021/09/17/979 есть кое-что и в новой программе. Наиболее эффективное средство это битовая дискриминация цвета. Суть этого способа состоит в обнулении некоторых (обычно младших) бит изображения, а подробно это делается так - изображение, находящееся на рисунке, сначала закрепляется, затем рисунок покрывается однородным цветом, представляющим собой битовую маску – все биты компонент цвета обнулены, и только указанное число старших бит имеют значение 1.
  Например, если оставляем старшие 3 бита, то берём число 14737632 = E0E0E0 в шестнадцатиричной форме. Оставляем 2 бита – берём число C0C0C0, один единственный старший бит останется, если для маски использовать число 808080.
  Что это за цвета, вы можете видеть на иллюстрации – серый фон слева 3-х битовый, правее – 2-х битовый, а тёмно серый ниже – однобитовый.
 
  После того, как мы покрыли поле рисунка серой маской, мы считываем эту маску на невидимое вспомогательное поле, а рисунок очищаем, и прежнее изображение вновь появляется на нём. Теперь мы считываем серый фон обратно, соединяя его по битам с изображением на рисунке. При считывании используем операцию логического And, и происходят две вещи – белый фон, и светлая, обрамляющая цветы кайма становятся однородно серыми. Теперь, поменяв серый цвет на белый, мы получим желаемый результат – кайма исчезла, а цветы остались.
  Вторая вещь, сопутствующая первой, это то, что цветы у нас стали более тёмными, и это закономерно, ведь младшие биты в их цвете мы обнулили.

  Описанный процесс, назовём его процессом «А», может быть и проведён «шиворот-навыворот» - давайте, вместо того, обнулять младшие биты, установим в них единицы. И, смотрите, как здорово – у нас тогда сразу получится желаемый белый фон, а не серый, с которым ещё надо возиться, переводя его в белый цвет.

  Такой процесс, назовём его процессом «Б», имеет одну неудобную сторону – его результатов не видно. На иллюстрации в центре показаны преобразования вида А и вида Б, проведённые с сохранением верхних двух бит. На первый взгляд оба процесса прошли удачно – никакого ореола не видно. Но это не так, после нижнего процесса Б маленький ореол остался, только он ещё более посветлел, и на белом фоне его не видно. А выше, в процессе А, ореол потемнел и присоединился к веточкам, и веточки за счёт ореола потолстели.

  Более этот эффект заметен, если в неприкосновенности оставить три старших бита цвета (см. на иллюстрации слева), там после процесса Б фон сделан серым, и на нём хорошо заметен обрамляющий тонкие веточки ореол. Если это то, к чему Вы стремились, так это хорошо, а если нет, то плохо – для изготовления паттерна лучше иметь толстые веточки – паттерн меньше, чем полученное Вами изображение, поэтому, при уменьшении его, тонкие веточки могут исчезнуть. 
  В процессе Б, как и в процессе А имеется всё тот же недостаток – меняется цвет оставшегося изображения, в процессе Б оно светлеет, что хорошо видно на иллюстрации.

  Есть эффективный способ устранения этого нежелательного результата – помещаем наш необработанный образец на поле_2. Поле_2 в моей программе, это как дополнительный слой в Фотошопе, с которого на первое, видимое поле можно переносить изображение. В Фотошопе такой способ называется «волшебная палочка» или «восстанавливающая кисть», а у меня для этих целей есть «розовый ластик».
  Я помещаю на видимое поле рисунка результат дискриминации с изображением неправильного цвета, более тёмного, или более светлого, это всё равно, настраиваю розовый ластик так, чтобы он не портил мой прекрасный белый фон, и начинаю водить им по изображению в тех местах, цвет которых по моему мнению нужно поменять на начальный. Заметьте, менять цвет не всегда нужно, и не программа, а я, художник, должен решать, какому цвету быть в этом месте.

  Как бы то ни было, но результат налицо –  в тех местах, где я водил розовым ластиком, исходный цвет восстановился (см.иллюстрацию справа).

  Хочу добавить, что описанные процессы можно проводить не по площадям, а локально. В программе имеется дискриминирующая цвет кисть, которая в другой своей опции перекрашивает один цвет в другой, не затрагивая остальных цветов. Работа этой кистью показана на иллюстрации внизу.

  Итак, имеется много способов избавиться от светлой каймы, обрамляющей изображение. В частности, метод битовой дискриминации цвета показывает свою высокую эффективность. И во всех случаях лучше не полностью полагаться на автоматику, а использовать её разумно и именно так, чтобы получать желаемый результат.

__________
29.07.2023


Рецензии