Картинки в черно белом стиле: ⬇ Скачать картинки D1 87 d0 b5 d1 80 d0 bd d0 be d0 b1 d0 b5 d0 bb d1 8b d0 b9 d1 81 d1 82 d0 b8 d0 bb d1 8c, стоковые фото D1 87 d0 b5 d1 80 d0 bd d0 be d0 b1 d0 b5 d0 bb d1 8b d0 b9 d1 81 d1 82 d0 b8 d0 bb d1 8c в хорошем качестве

Содержание

Минимализм в черно-белой фотографии

Введение

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

Максимальное упрощение композиции черно-белого кадра позволит вам посредством отсечения всего лишнего привлечь внимание зрителя к главному. Подобные кадры очень эффектны. Как же этого добиться?

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

Их надо проработать так, чтобы композиция выглядела наиболее интересной.

Да, можно я не буду говорить про правило третей? Мы обсуждали его уже миллион раз только в рамках этого сайта. Просто помните, что оно есть, и иногда оно полезно, и если вы не уверены насчет расположения элементов в кадре – время вытащить его с подкорки и всячески использовать.

Далее мы рассмотрим основные составляющие данной техники и определим, на что обращать внимание, стремясь создать черно-белую фотографию в стиле абстрактного минимализма (страшно, да?). Проще говоря, черно-белый снимок с минимумом отвлекающих деталей.

1. Черно-белое видение

Первое, чему нужно научиться – игнорировать свое нормальное человеческое зрение. Я серьезно. Поначалу это тяжело, а в первый раз всегда больно, но потом входит в привычку, если регулярно снимать на черно-белую пленку. Съемка на пленку вообще очень хороша для оттачивания фотографических навыков, и данный случай не исключение.

Хотя это остается на ваше усмотрение, конечно. Все цвета, которые вы видите в кадре, обратятся в разные оттенки серого, и самое важное, что у вас останется – это линии, света и тени.

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

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

Лодки, изображенные на этом кадре, были зелеными. Грязно-зелеными. Совсем грязно. Про песок я вообще молчу. Подобное сочетание мне совершенно не понравилось, и я решила, что в черно-белом варианте кадр будет более эффектен, особенно если постараться упростить композицию, сделав ее плоской и несколько сюрреалистичной, чему способствует «урезание» фона и странное положение лодок относительно друг друга.

2. Найти главное

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

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

3. Ведущие линии

Линии – ваш основной инструмент в черно-белом кадре. По сути, если вы стремитесь упростить кадр, кроме линий и оттенков серого, у вас ничего более и не останется. Выстраивайте кадр таким образом, чтобы линии в нем вели зрителя к выбранной вами ключевой точке.

На примере ниже взгляд движется вдоль тела модели, слева направо, снизу-вверх. Мне кажется, догадаться, какая область тут ключевая, несложно. Она даже по правилу третей правильно расположена. Красотка, да. Для пущего эффекта стоило бы убрать тени от деревьев, но времени и желания спиливать местную флору у нас не было, и потому я постаралась обыграть их как обрамление для тела девушки и заполняющий элемент композиции.

4. Тональные переходы

Наибольшее внимание в черно-белом снимке привлекают самые темные и самые светлые участки. Причем считается, что в первую очередь глаз воспринимает именно самые светлые и яркие зоны. Тут еще многое зависит от контекста: например, если снимок сделан в высоком ключе, взгляд, очевидно, притянется к самой темной детали.

Стоит отметить, что светлое выглядит гораздо ярче при усилении контраста с прилегающими областями, то есть на фоне темного. Таким образом, можно сделать вывод, что в первую очередь глаз регистрирует наиболее контрастные участки. Соответственно, когда вы определились с тем, куда нужно вести взгляд зрителя, сделайте так, чтобы ключевой участок был, например, обрамлен белыми или  черными линиями и сам выделялся из общего окружения за счет контраста.

Посмотрите на пример выше и отметьте про себя, как движется ваш взгляд, и участки какого тона привлекают ваше внимание в первую очередь.

5. Тональный контраст

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

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

Повышение контраста в определенных случаях (и при соблюдении прочих условий) работает  на упрощение кадра, поскольку нивелирует еще часть информации, а конкретно, об оттенках серого цвета.

6. Равномерный фон

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

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

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

7. Компоновка кадра

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

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

Модель лежит на рельсах в аутентичном платье и изображает героиню небезызвестного романа, а на фоне новостройки? Притащите стремянку, снимите сверху и скажите «Нет!» новостройкам. К слову, если модель лежит на рельсах, а вам на фоне мешает поезд – стремянка не поможет, зато велик риск получить потрясающе натуралистичный портрет Анны Карениной, так что будьте аккуратны.

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

Я все же склоняюсь к тому, что искусство фотографии не в ретуши. В ретуши – искусство ретуши. Что тоже прекрасно, но мы сейчас пытаемся понять, как сделать так, чтобы потребность в этом была минимальной.

И да, еще одна вещь, которую стоит помнить – в попытке упростить кадр, не допускайте ошибку в представлении масштабов вашего объекта относительно окружающего пространства. Вспомните Роберта Капу: «Если снимок недостаточно хорош, значит, вы недостаточно близко»

. Вспомните бродящую по интернету переписку дизайнера с секретаршей, про пропавшую кошку Мисси. Там одним из вариантов была как раз кошка, потерявшаяся в негативном пространстве.

Не позволяйте кошке теряться в негативном пространстве! Фотография белого неба с мааааленькой единичной птичкой на нем, даже расположенной по правилу третей, это не эффектный снимок, это, откровенно говоря, скучный снимок. Главный объект не должен теряться в кадре. Попробуйте подойти поближе – не понравится, отойдете, но слишком «мельчить» лучше не надо.

Заключение

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

К каждому кадру нужно подходить индивидуально, думаю, вы это и без меня знаете. Но в этой статье мы говорим именно о таких кадрах, так что если вы считаете, что упрощение будет уместно, постарайтесь нивелировать помехи в виде «паразитных» деталей и линий, выбирайте ракурсы, которые позволят вам это сделать, внимательно относитесь к направляющим линиям, контрасту и тональным переходам в кадре.

Если у вас уже есть снимки подобного стиля, поделитесь ими с нами в комментариях!

20/04/2012    Просмотров : 22843    Источник: photo-monster.ru    Автор: Анна Смолина

Раскрашиваем чёрно-белую фотографию с помощью нейросети из 100 строк кода / Хабр

Перевод статьи Colorizing B&W Photos with Neural Networks.

Не так давно Амир Авни с помощью нейросетей затроллил на Reddit ветку /r/Colorization, где собираются люди, увлекающиеся раскрашиванием вручную в Photoshop исторических чёрно-белых изображений. Все были изумлены качеством работы нейросети. То, на что уходит до месяца работы вручную, можно сделать за несколько секунд.

Давайте воспроизведем и задокументируем процесс обработки изображений Амира. Для начала посмотрите на некоторые достижения и неудачи (в самом низу — последняя версия).


Исходные чёрно-белые фотографии взяты с Unsplash.

Сегодня чёрно-белые фотографии обычно раскрашивают вручную в Photoshop. Посмотрите это видео, чтобы получить представление об огромной трудоёмкости такой работы:

На раскрашивание одного изображения может уйти месяц. Приходится исследовать много исторических материалов, относящихся к тому времени. На одно только лицо накладывается до 20 слоёв розовых, зелёных и синих теней, чтобы получился правильный оттенок.
Это статья для начинающих. Если вам не знакома терминология глубокого обучения нейросетей, то можете почитать предыдущие статьи (1, 2) и посмотреть лекцию Андрея Карпатого.

В этой статье вы узнаете, как за три этапа построить собственную нейросеть для раскрашивания изображений.

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

На следующем этапе мы сделаем обобщающую (generalize) нейросеть — «бета»-версию. Она уже сможет раскрашивать изображения, которые ей не знакомы.

В «окончательной» версии мы объединим нашу нейросеть с классификатором. Для этого возьмём Inception Resnet V2, обученный на 1,2 млн изображений. А нейросеть обучим раскрашиванию на изображениях с Unsplash.

Если не терпится, то вот Jupyter Notebook с альфа-версией бота. Также можете посмотреть три версии на FloydHub и GitHub, и ещё код, использованный во всех экспериментах, которые проводились на облачных видеокартах сервиса FloydHub.

Основная логика

В этом разделе мы рассмотрим рендеринг изображения, поговорим о теории цифрового цвета и основной логике нейросети.

Чёрно-белые изображения можно представить в виде сетки из пикселей. У каждого пикселя есть значение яркости, лежащее в диапазоне от 0 до 255, от чёрного до белого.

Цветные изображения состоят из трёх слоёв: красного, зелёного и синего. Допустим, нужно разложить по трём каналам картинку с зелёным листиком на белом фоне. Вы можете подумать, что листик будет представлен только в зелёном слое. Но, как видите, он есть во всех трёх слоях, потому что слои определяют не только цвет, но и яркость.

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

Как и в чёрно-белом изображении, пиксели каждого слоя цветного изображения содержат значение от 0 до 255. Ноль означает, что у этого пикселя в данном слое нет цвета. Если во всех трёх каналах стоят нули, то в результате на картинке получается чёрный пиксель.

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


f() — нейросеть, [B&W] — входные данные, [R],[G],[B] — выходные данные.

Альфа-версия

Сначала сделаем простую версию нейросети, которая будет раскрашивать женское лицо. По мере добавления новых возможностей вы будете знакомиться с основным синтаксисом нашей модели.

За 40 строк кода мы перейдём от левой картинки — чёрно-белой — к средней, которая сделана нашей нейросетью. Правая картинка — это оригинальная фотография, из которой мы сделали чёрно-белую. Нейросеть обучалась и тестировалась на одном изображении, об этом мы поговорим в разделе, посвящённом бета-версии.

Цветовое пространство

Сначала воспользуемся алгоритмом изменения цветовых каналов с RGB на Lab. L означает светлота (lightness), a и b — декартовы координаты, определяющие положение цвета в диапазоне, соответственно, от зелёного до красного и от синего до жёлтого.

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

Научный факт: 94% рецепторов сетчатки нашего глаза отвечают за определение яркости. И только 6% рецепторов распознают цвета. Поэтому для вас чёрно-белое изображение выглядит гораздо отчётливее цветных слоёв. Это ещё одна причина, по которой мы будем использовать эту картинку в окончательном варианте.

Из градаций серого в цвет

В качестве входных данных возьмём слой с градациями серого, и на его основе сгенерируем цветные слои a и b в цветовом пространстве Lab. Его же мы возьмём и в качестве L-слоя окончательной картинки.

Для получения двух слоёв из одного слоя, воспользуемся свёрточными фильтрами. Их можно представить как синее и красное стекло в 3D-очках. Фильтры определяют, что мы увидим на картинке. Они могут подчёркивать или скрывать какую-то часть изображения, чтобы наш глаз извлек нужную информацию. Нейросеть тоже может с помощью фильтра создать новое изображение или свести несколько фильтров в одну картинку.

В свёрточных нейросетях каждый фильтр автоматически подстраивается, чтобы легче было получить нужные выходные данные. Мы наложим сотни фильтров, а затем сведём их воедино и получим слои a и b.

Прежде чем переходить к подробностям работы кода, давайте его запустим.

Развёртывание кода на FloydHub

Если вы раньше не работали с FloydHub, то можете запустить пока инсталляцию и посмотреть пятиминутное видеоруководство или пошаговые инструкции. FloydHub — лучший и простейший способ глубокого обучения моделей на облачных видеокартах.

Альфа-версия

После установки FloydHub введите команду:

git clone https://github.com/emilwallner/Coloring-greyscale-images-in-Keras

Затем откройте папку и инициализируйте FloydHub.

cd Coloring-greyscale-images-in-Keras/floydhub
floyd init colornet

В вашем браузере откроется веб-панель FloydHub. Вам предложат создать новый FloydHub-проект под названием colornet. Когда вы его создадите, возвращайтесь в терминал и выполните ту же команду инициализации.

floyd init colornet

Запускаем задачу:

floyd run --data emilwallner/datasets/colornet/2:data --mode jupyter --tensorboard

Несколько пояснений:

Если вы можете подключить видеокарты к выполнению задачи, то добавьте в команду флаг –gpu. Получится примерно в 50 раз быстрее.

Перейдите в Jupyter Notebook. На сайте FloydHub во вкладке Jobs кликните на ссылку Jupyter Notebook и найдите файл:

floydhub/Alpha version/working_floyd_pink_light_full. ipynb

Откройте файл и на всех ячейках нажмите Shift+Enter.

Постепенно увеличивайте значение периодов (epoch value), чтобы понять, как учится нейросеть.

model.fit(x=X, y=Y, batch_size=1, epochs=1)

Начните с epochs=1, затем увеличивайте до 10, 100, 500, 1000 и 3000. Это значение показывает, сколько раз нейросеть обучается на изображении. Как только вы обучите нейросеть, то найдёте файл img_result.png в главной папке.

# Get images
image = img_to_array(load_img('woman.png'))
image = np.array(image, dtype=float)

# Import map images into the lab colorspace
X = rgb2lab(1.0/255*image)[:,:,0]
Y = rgb2lab(1.0/255*image)[:,:,1:]
Y = Y / 128
X = X.reshape(1, 400, 400, 1)
Y = Y.reshape(1, 400, 400, 2)
model = Sequential()
model.add(InputLayer(input_shape=(None, None, 1)))

# Building the neural network
model = Sequential()
model. add(InputLayer(input_shape=(None, None, 1)))
model.add(Conv2D(8, (3, 3), activation=’relu’, padding=’same’, strides=2))
model.add(Conv2D(8, (3, 3), activation=’relu’, padding=’same’))
model.add(Conv2D(16, (3, 3), activation=’relu’, padding=’same’))
model.add(Conv2D(16, (3, 3), activation=’relu’, padding=’same’, strides=2))
model.add(Conv2D(32, (3, 3), activation=’relu’, padding=’same’))
model.add(Conv2D(32, (3, 3), activation=’relu’, padding=’same’, strides=2))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(32, (3, 3), activation=’relu’, padding=’same’))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(16, (3, 3), activation=’relu’, padding=’same’))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(2, (3, 3), activation=’tanh’, padding=’same’))

# Finish model
model.compile(optimizer=’rmsprop’,loss=’mse’)

#Train the neural network
model. fit(x=X, y=Y, batch_size=1, epochs=3000)
print(model.evaluate(X, Y, batch_size=1))

# Output colorizations
output = model.predict(X)
output = output * 128
canvas = np.zeros((400, 400, 3))
canvas[:,:,0] = X[0][:,:,0]
canvas[:,:,1:] = output[0]
imsave(«img_result.png», lab2rgb(canvas))
imsave(«img_gray_scale.png», rgb2gray(lab2rgb(canvas)))

FloydHub-команда для запуска этой сети:

floyd run --data emilwallner/datasets/colornet/2:data --mode jupyter --tensorboard

Технические пояснения

Напомним, что на входе у нас сетка, представляющая чёрно-белое изображение. А на выходе — две сетки со значениями цветов. Между входными и выходными значениями мы создали связующие фильтры. У нас получилась свёрточная нейросеть.

Для обучения сети используются цветные изображения. Мы преобразовали из цветового пространства RGB в Lab. Чёрно-белый слой подаётся на вход, а на выходе получаются два раскрашенных слоя.

Мы в одном диапазоне сопоставляем (map) вычисленные значения с реальными, тем самым сравнивая их друг с другом. Границы диапазона от —1 до 1. Для сопоставления вычисленных значений мы используем функцию активации tanh (гиперболическая тангенциальная). Если применить её к какому-нибудь значению, то функция вернёт значение в диапазоне от —1 до 1.

Реальные значения цветов меняются от —128 до 128. В пространстве Lab это диапазон по умолчанию. Если каждое значение разделить на 128, то все они окажутся в границах от —1 до 1. Такая «нормализация» позволяет сравнивать погрешность нашего вычисления.

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

Давайте разберёмся с синтаксисом этого кода:

X = rgb2lab(1.0/255*image)[:,:,0]
Y = rgb2lab(1.0/255*image)[:,:,1:]

1.0/255 означает, что мы используем 24-битное цветовое пространство RGB. То есть для каждого цветового канала мы используем значения в диапазоне от 0 до 255. Это даёт нам 16,7 миллиона цветов.

Но поскольку человеческий глаз может распознавать лишь от 2 до 10 млн цветов, то использовать более широкое цветовое пространство не имеет смысла.

Y = Y / 128

Цветовое пространство Lab использует другой диапазон. Цветовой спектр ab варьируется от —128 до 128. Если поделить все значения выходного слоя на 128, то они уложатся в дипазон от —1 до 1, и тогда можно будет сопоставить эти значения с теми, что вычислила наша нейросеть.

После того, как с помощью функции rgb2lab() преобразовали цветовое пространство, мы с помощью [:,:, 0] выбираем чёрно-белый слой. Это входные данные для нейросети. [:,:, 1: ] выбирает два цветных слоя, красно-зелёный и сине-жёлтый.

После обучения нейросети выполняем последнее вычисление, которое преобразуем в картинку.

output = model.predict(X)
output = output * 128

Здесь мы подаём на вход чёрно-белое изображение и прогоняем его через обученную нейросеть. Берём все выходные значения от —1 до 1 и умножаем их на 128. Так мы получаем корректные цвета в системе Lab.

canvas = np.zeros((400, 400, 3))
canvas[:,:,0] = X[0][:,:,0]
canvas[:,:,1:] = output[0]

Создаём чёрный RGB-холст, заполнив все три слоя нулями. Затем копируем чёрно-белый слой из тестового изображения и добавляем два цветных слоя. Получившийся массив значений пикселей преобразуем в изображение.

Чему мы научились при работе над альфа-версией


  • Чтение исследовательских работ — тяжёлый труд. Но стоило обобщить ключевые положения статей, и штудировать их стало проще. Это также помогло включить в эту статью некоторые подробности.
  • Нужно начинать с малого. Большинство найденных нами в сети реализаций состояли из 2—10 тыс строк кода. Это сильно мешает получить представление об основной логике. Но если под рукой есть упрощённая, базовая версия, то легче читать и реализацию, и исследовательские работы.
  • Не надо лениться разбираться в чужих проектах. Нам пришлось просмотреть несколько десятков проектов по раскрашиванию изображений на Github, чтобы определиться с содержимым своего кода.
  • Не всё работает так, как задумано. Возможно, сначала ваша сеть сможет создавать только красный и жёлтый цвета. В первый раз мы для окончательной активации использовали функцию активации Relu. Но она генерирует только положительные значения, и поэтому синий и зелёный спектры ей недоступны. Этот недостаток удалось решить, добавив функцию активации tanh для преобразования значений по оси Y.
  • Понимание > скорость. Многие виденные нами реализации исполнялись быстро, но с ними трудно было работать. Поэтому мы решили оптимизировать наш код ради скорости добавления новых возможностей, а не исполнения.

Бета-версия

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

Ниже показано, как бета-версия раскрасила проверочные картинки.

Вместо использования Imagenet мы создали на FloydHub публичный датасет с более качественными изображениями. Они взяты с Unsplash — сайта, где выкладываются снимки профессиональных фотографов. В датасете 9500 обучающих изображений и 500 проверочных.

Выделитель признаков

Наша нейросеть ищет характеристики, связывающие чёрно-белые изображения с их цветными версиями.

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

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

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


Количество обработанных фильтрами изображений на каждом этапе.

Если снова просмотрим изображения, то обнаружим те же маленькие повторяющиеся структуры, которые мы уже определили. Чтобы лучше проанализировать изображение, уменьшим его размер вдвое.


Уменьшаем размер в три этапа.

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

Через пару этапов обработанные фильтрами изображения станут выглядеть так:

Повторимся: вы начинаете с поиска простых свойств, например, краёв. По мере обработки слои объединяются в структуры, затем в более сложные черты, и в конце концов получается лицо. Подробнее объясняется в этом видео:

Описанный процесс очень похож на алгоритмы компьютерного зрения. Здесь мы используем так называемую свёрточную нейросеть, которая комбинирует несколько обработанных изображений, чтобы понять содержимое всей картинки.

От извлечения свойств к цвету

Нейросеть действует по принципу проб и ошибок. Сначала она случайным образом назначает цвет каждому пикселю. Затем по каждому пикселю вычисляет ошибки и корректирует фильтры, чтобы в следующей попытке улучшить результаты.

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

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

Вот код бета-версии:

# Get images
X = []
for filename in os.listdir('../Train/'):
X.append(img_to_array(load_img('../Train/'+filename)))
X = np.array(X, dtype=float)

# Set up training and test data
split = int(0.95*len(X))
Xtrain = X[:split]
Xtrain = 1.0/255*Xtrain

#Design the neural network
model = Sequential()
model.add(InputLayer(input_shape=(256, 256, 1)))
model.add(Conv2D(64, (3, 3), activation=’relu’, padding=’same’))
model.add(Conv2D(64, (3, 3), activation=’relu’, padding=’same’, strides=2))
model. add(Conv2D(128, (3, 3), activation=’relu’, padding=’same’))
model.add(Conv2D(128, (3, 3), activation=’relu’, padding=’same’, strides=2))
model.add(Conv2D(256, (3, 3), activation=’relu’, padding=’same’))
model.add(Conv2D(256, (3, 3), activation=’relu’, padding=’same’, strides=2))
model.add(Conv2D(512, (3, 3), activation=’relu’, padding=’same’))
model.add(Conv2D(256, (3, 3), activation=’relu’, padding=’same’))
model.add(Conv2D(128, (3, 3), activation=’relu’, padding=’same’))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation=’relu’, padding=’same’))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(32, (3, 3), activation=’relu’, padding=’same’))
model.add(Conv2D(2, (3, 3), activation=’tanh’, padding=’same’))
model.add(UpSampling2D((2, 2)))

# Finish model
model.compile(optimizer=’rmsprop’, loss=’mse’)

# Image transformer
datagen = ImageDataGenerator(
shear_range=0. 2,
zoom_range=0.2,
rotation_range=20,
horizontal_flip=True)

# Generate training data
batch_size = 50
def image_a_b_gen(batch_size):
for batch in datagen.flow(Xtrain, batch_size=batch_size):
lab_batch = rgb2lab(batch)
X_batch = lab_batch[:,:,:,0]
Y_batch = lab_batch[:,:,:,1:] / 128
yield (X_batch.reshape(X_batch.shape+(1,)), Y_batch)

# Train model
TensorBoard(log_dir=’/output’)
model.fit_generator(image_a_b_gen(batch_size), steps_per_epoch=10000, epochs=1)

# Test images
Xtest = rgb2lab(1.0/255*X[split:])[:,:,:,0]
Xtest = Xtest.reshape(Xtest.shape+(1,))
Ytest = rgb2lab(1.0/255*X[split:])[:,:,:,1:]
Ytest = Ytest / 128
print model.evaluate(Xtest, Ytest, batch_size=batch_size)

# Load black and white images
color_me = []
for filename in os.listdir(‘../Test/’):
color_me. append(img_to_array(load_img(‘../Test/’+filename)))
color_me = np.array(color_me, dtype=float)
color_me = rgb2lab(1.0/255*color_me)[:,:,:,0]
color_me = color_me.reshape(color_me.shape+(1,))

# Test model
output = model.predict(color_me)
output = output * 128

# Output colorizations
for i in range(len(output)):
cur = np.zeros((256, 256, 3))
cur[:,:,0] = color_me[i][:,:,0]
cur[:,:,1:] = output[i]
imsave(«result/img_»+str(i)+».png», lab2rgb(cur))

FloydHub-команда для запуска бета-версии нейросети:

floyd run --data emilwallner/datasets/colornet/2:data --mode jupyter --tensorboard

Технические пояснения

От других нейросетей, работающих с изображениями, наша отличается тем, что для неё важно расположение пикселей. У раскрашивающих нейросетей размер изображения или соотношение сторон остаётся неизменным. А у сетей других типов изображение искажается по мере приближения к окончательной версии.

Слой пулинга с функцией максимума, применяемый в классифицирующих сетях, увеличивает плотность информации, но при этом искажает картинку. Он оценивает только информацию, а не макет изображения. А в раскрашивающих сетях для уменьшения ширины и высоты вдвое мы используем шаг 2 (stride of 2). Плотность информации тоже увеличивается, но картинка не искажается.

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

Раскрашивающие нейросети не меняют соотношение сторон изображения. Для этого с помощью параметра *padding='same'* добавляются белые поля, как на иллюстрации выше. В противном случае каждый свёрточный слой обрезал бы изображения.

Чтобы удвоить размер картинки, раскрашивающая нейросеть использует слой повышения дискретизации.

for filename in os.listdir('/Color_300/Train/'):
X.append(img_to_array(load_img('/Color_300/Test'+filename)))

Этот цикл for-loop сначала подсчитывает имена всех файлов в директории, проходит по директории и преобразует все картинки в массивы пикселей, и наконец объединяет их в огромный вектор.

datagen = ImageDataGenerator(
shear_range=0.2,
zoom_range=0.2,
rotation_range=20,
horizontal_flip=True)

С помощью ImageDataGenerator можно включить генератор изображений. Тогда каждое изображение будет отличаться от предыдущих, что ускорит обучение нейросети. Настройка shear_range задаёт наклон изображения влево или вправо, также его можно увеличить, повернуть или отразить по горизонтали.

batch_size = 50
def image_a_b_gen(batch_size):
for batch in datagen.flow(Xtrain, batch_size=batch_size):
lab_batch = rgb2lab(batch)
X_batch = lab_batch[:,:,:,0]
Y_batch = lab_batch[:,:,:,1:] / 128
yield (X_batch. reshape(X_batch.shape+(1,)), Y_batch)

Применим эти настройки к картинкам в папке Xtrain и сгенерируем новые изображения. Затем извлечём чёрно-белый слой для X_batch и два цвета для двух цветных слоёв.

model.fit_generator(image_a_b_gen(batch_size), steps_per_epoch=1, epochs=1000)

Чем мощнее ваша видеокарта, тем больше картинок вы сможете в ней обрабатывать одновременно. Например, описанная система умеет обрабатывать 50-100 изображений. Значение параметра steps_per_epoch получено делением количества обучающих изображений на размер серии (batch size).

Например: если у нас 100 картинок, а размер серии равен 50, то получим 2 этапа в период. Количество периодов определяет, сколько раз вы будете обучать нейросеть на всех картинках. Если у вас 10 тыс. картинок и 21 период, то это займёт около 11 часов на видеокарте Tesla K80.

Чему научились


  • Сначала побольше экспериментов с небольшими сериями, а потом можно переходить к большим прогонам. У нас были ошибки даже после 20–30 экспериментов. Если что-то выполняется, ещё не значит, что оно работает. Баги в нейросетях как правило менее заметны, чем традиционные ошибки программирования. К примеру, одним из наших самых причудливых багов был Adam hiccup.
  • Чем разнообразнее датасет, тем больше коричневого будет в изображениях. Если в вашем датасете очень похожие изображения, то нейросеть будет работать вполне прилично без применения более сложной архитектуры. Но такая нейросеть будет хуже обобщать.
  • Формы, формы и ещё раз формы. Размеры картинок должны быть точными и пропорциональными друг другу в течение всей работы нейросети. Сначала мы использовали изображение в 300 пикселей, потом несколько раз уменьшили его вдвое: до 150, 75 и 35,5 пикселей. В последнем варианте потерялось полпикселя, из-за чего пришлось подставлять кучу костылей, пока не дошло, что лучше использовать двойку в степени: 2, 4, 8, 16, 32, 64, 256 и так далее.
  • Создание датасетов: a) Отключите файл . DS_Store, иначе он сведёт вас с ума. б) Проявите выдумку. Для скачивания файлов мы воспользовались консольным скриптом в Chrome и расширением. в) Делайте копии исходных файлов, которые вы обрабатываете, и упорядочивайте скрипты для очистки.

Полная версия нейросети

Наша окончательная версия раскрашивающей нейросети содержит четыре компонента. Предыдущую сеть мы разбили на кодировщик и декодировщик, а между ними слой слияния (fusion layer). Если вы не знакомы с классифицирующими нейросетями, то рекомендуем почитать это руководство: http://cs231n.github.io/classification/.

Входные данные одновременно проходят через кодировщик и через самый мощный современный классификатор —  Inception ResNet v2. Это нейросеть, обученная на 1,2 млн изображений. Мы извлекаем слой классификации и объединяем его с выходными данными кодировщика.

Более подробное визуальное пояснение: https://github.com/baldassarreFe/deep-koalarization.

Если перенести обучение из классификатора в раскрашивающую сеть, то она сможет понять, что изображено на картинке, а значит и сопоставлять представление объекта со схемой раскрашивания.

Вот некоторые проверочные изображения, для обучения сети использовалось только 20 картинок.

Большинство фотографий раскрашено криво. Но благодаря большому проверочному набору (2500 изображений) есть и несколько приличных. Обучение сети на более крупной выборке даёт более стабильные результаты, но всё равно большинство картинок получились коричневыми. Вот полный список проведённых экспериментов и проверочных изображений.

Самые распространённые архитектуры из различных исследовательских работ:

  • Вручную добавляем в картинку маленькие цветные точки, чтобы дать сети подсказку (ссылка).
  • Находим похожее изображение и переносим с него цвета (подробнее здесь и здесь).
  • Слой остаточного кодировщика (residual encoder) и слой классификации объединением (merging classification) (ссылка).
  • Объединяем гиперколонок (hypercolumns) из классифицирующей сети (подробнее здесь и здесь).
  • Объединяем итоговую классификацию между кодировщиком и декодировщиком (подробнее здесь и здесь).

Цветовые пространства: Lab, YUV, HSV и LUV (подробнее здесь и здесь)

Потери: средняя квадратическая ошибка, классификация, взвешенная классификация (ссылка).

Мы выбрали архитектуру со «слоем слияния» (пятая в списке), потому что она давала лучшие результаты. Также в ней проще разобраться и легче её воспроизвести в Keras. Хотя это не самая сильная архитектура, но для начала сгодится.

Структура нашей нейросети позаимствована из работы Федерико Бальдасарре и его коллег, и адаптирована для работы с Keras. Примечание: в этом коде вместо последовательной модели Keras используется функциональный API. [Документация]

# Get images
X = []
for filename in os.listdir('/data/images/Train/'):
X. append(img_to_array(load_img('/data/images/Train/'+filename)))
X = np.array(X, dtype=float)
Xtrain = 1.0/255*X

#Load weights
inception = InceptionResNetV2(weights=None, include_top=True)
inception.load_weights(‘/data/inception_resnet_v2_weights_tf_dim_ordering_tf_kernels.h5’)
inception.graph = tf.get_default_graph()
embed_input = Input(shape=(1000,))

#Encoder
encoder_input = Input(shape=(256, 256, 1,))
encoder_output = Conv2D(64, (3,3), activation=’relu’, padding=’same’, strides=2)(encoder_input)
encoder_output = Conv2D(128, (3,3), activation=’relu’, padding=’same’)(encoder_output)
encoder_output = Conv2D(128, (3,3), activation=’relu’, padding=’same’, strides=2)(encoder_output)
encoder_output = Conv2D(256, (3,3), activation=’relu’, padding=’same’)(encoder_output)
encoder_output = Conv2D(256, (3,3), activation=’relu’, padding=’same’, strides=2)(encoder_output)
encoder_output = Conv2D(512, (3,3), activation=’relu’, padding=’same’)(encoder_output)
encoder_output = Conv2D(512, (3,3), activation=’relu’, padding=’same’)(encoder_output)
encoder_output = Conv2D(256, (3,3), activation=’relu’, padding=’same’)(encoder_output)

#Fusion
fusion_output = RepeatVector(32 * 32)(embed_input)
fusion_output = Reshape(([32, 32, 1000]))(fusion_output)
fusion_output = concatenate([encoder_output, fusion_output], axis=3)
fusion_output = Conv2D(256, (1, 1), activation=’relu’, padding=’same’)(fusion_output)

#Decoder
decoder_output = Conv2D(128, (3,3), activation=’relu’, padding=’same’)(fusion_output)
decoder_output = UpSampling2D((2, 2))(decoder_output)
decoder_output = Conv2D(64, (3,3), activation=’relu’, padding=’same’)(decoder_output)
decoder_output = UpSampling2D((2, 2))(decoder_output)
decoder_output = Conv2D(32, (3,3), activation=’relu’, padding=’same’)(decoder_output)
decoder_output = Conv2D(16, (3,3), activation=’relu’, padding=’same’)(decoder_output)
decoder_output = Conv2D(2, (3, 3), activation=’tanh’, padding=’same’)(decoder_output)
decoder_output = UpSampling2D((2, 2))(decoder_output)
model = Model(inputs=[encoder_input, embed_input], outputs=decoder_output)

#Create embedding
def create_inception_embedding(grayscaled_rgb):
grayscaled_rgb_resized = []
for i in grayscaled_rgb:
i = resize(i, (299, 299, 3), mode=’constant’)
grayscaled_rgb_resized. append(i)
grayscaled_rgb_resized = np.array(grayscaled_rgb_resized)
grayscaled_rgb_resized = preprocess_input(grayscaled_rgb_resized)
with inception.graph.as_default():
embed = inception.predict(grayscaled_rgb_resized)
return embed

# Image transformer
datagen = ImageDataGenerator(
shear_range=0.4,
zoom_range=0.4,
rotation_range=40,
horizontal_flip=True)

#Generate training data
batch_size = 20
def image_a_b_gen(batch_size):
for batch in datagen.flow(Xtrain, batch_size=batch_size):
grayscaled_rgb = gray2rgb(rgb2gray(batch))
embed = create_inception_embedding(grayscaled_rgb)
lab_batch = rgb2lab(batch)
X_batch = lab_batch[:,:,:,0]
X_batch = X_batch.reshape(X_batch.shape+(1,))
Y_batch = lab_batch[:,:,:,1:] / 128
yield ([X_batch, create_inception_embedding(grayscaled_rgb)], Y_batch)

#Train model
tensorboard = TensorBoard(log_dir=»/output»)
model. compile(optimizer=’adam’, loss=’mse’)
model.fit_generator(image_a_b_gen(batch_size), callbacks=[tensorboard], epochs=1000, steps_per_epoch=20)

#Make a prediction on the unseen images
color_me = []
for filename in os.listdir(‘../Test/’):
color_me.append(img_to_array(load_img(‘../Test/’+filename)))
color_me = np.array(color_me, dtype=float)
color_me = 1.0/255*color_me
color_me = gray2rgb(rgb2gray(color_me))
color_me_embed = create_inception_embedding(color_me)
color_me = rgb2lab(color_me)[:,:,:,0]
color_me = color_me.reshape(color_me.shape+(1,))

# Test model
output = model.predict([color_me, color_me_embed])
output = output * 128

# Output colorizations
for i in range(len(output)):
cur = np.zeros((256, 256, 3))
cur[:,:,0] = color_me[i][:,:,0]
cur[:,:,1:] = output[i]
imsave(«result/img_»+str(i)+».png», lab2rgb(cur))

FloydHub-команда для запуска полной версии нейросети:

floyd run --data emilwallner/datasets/colornet/2:data --mode jupyter --tensorboard

Технические пояснения

Функциональный API Keras замечательно подходит для конкатенации или объединения нескольких моделей.

Для начала скачаем нейросеть Inception ResNet v2 и загрузим значения весов. Раз мы параллельно будем использовать две модели, то нужно определить, какие именно. Это делается в Tensorflow, бэкенде Keras.

inception = InceptionResNetV2(weights=None, include_top=True)
inception.load_weights('/data/inception_resnet_v2_weights_tf_dim_ordering_tf_kernels.h5')
inception.graph = tf.get_default_graph()

Создадим серию (batch) из подправленных изображений. Переведём их в ч/б и прогоним через модель Inception ResNet.

grayscaled_rgb = gray2rgb(rgb2gray(batch))
embed = create_inception_embedding(grayscaled_rgb)

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

def create_inception_embedding(grayscaled_rgb):
grayscaled_rgb_resized = []
for i in grayscaled_rgb:
i = resize(i, (299, 299, 3), mode='constant')
grayscaled_rgb_resized. append(i)
grayscaled_rgb_resized = np.array(grayscaled_rgb_resized)
grayscaled_rgb_resized = preprocess_input(grayscaled_rgb_resized)
with inception.graph.as_default():
embed = inception.predict(grayscaled_rgb_resized)
return embed

Вернёмся к генератору. Для каждой серии сгенерируем по 20 изображений описанного ниже формата. На Tesla K80 GPU ушло около часа. При использовании такой модели эта видеокарта может генерировать до 50 изображений за раз без каких-либо проблем с памятью.

yield ([X_batch, create_inception_embedding(grayscaled_rgb)], Y_batch)

Это соответствует формату нашей модели colornet.

model = Model(inputs=[encoder_input, embed_input], outputs=decoder_output)

encoder_inputis передан в модель Encoder, её выходные данные потом объединяются в слое слияния с embed_inputin; выходные данные слияния подаются на вход модели Decoder, которая возвращает итоговые данные — decoder_output.

fusion_output = RepeatVector(32 * 32)(embed_input)
fusion_output = Reshape(([32, 32, 1000]))(fusion_output)
fusion_output = concatenate([fusion_output, encoder_output], axis=3)
fusion_output = Conv2D(256, (1, 1), activation='relu')(fusion_output)

В слое слияния мы сначала слой с 1000 категорий (1000 category layer) умножаем на 1024 (32 * 32). Так мы получаем из модели Inception 1024 ряда итогового слоя. Сетка 32 х 32 переводится из двухмерного в трёхмерное представление, с 1000 столбцов категорий (category pillars). Затем столбцы связываются с выходными данными модели кодировщика. Применяем свёрточную сеть с 254 фильтрами и ядром 1х1 к окончательным результатам слоя слияния.

Чему научились


  • Терминология в исследовательских работах была пугающей. Мы потратили три дня на поиски способа реализации «модели слияния» в Keras. Это звучит так сложно, что просто не хотелось браться за эту задачу, мы старались найти советы, которые облегчат нам работу.
  • Вопросы в сети. В Slack-канале Keras не нашлось ни единого комментария, а на Stack Overflow заданные вопросы были удалены. Но когда мы начали разбирать проблему публично в поисках простого ответа, нам стало понятнее, как решать эту задачу
  • Рассылка писем. На форумах вас могут проигнорировать, но если обратиться к людям напрямую, они будут отзывчивее. Нас воодушевили обсуждения работы с цветовыми пространствами с исследователями по Skype!
  • После затруднений с решением задачи слияния, мы решили сначала написать все компоненты, а потом объединить их друг с другом. Вот несколько экспериментов по разбиению слоя слияния.
  • Если казалось, что какой-то компонент должен теперь работать, то уверенности в этом не было. Мы знали, что с основной логикой полный порядок, но не верили, что она будет работать. После чая с лимоном и долгой прогулки решились запустить. На первой же строке нашей модели появилась ошибка. Но спустя четыре дня, несколько сотен багов и несколько тысяч запросов в Google, при работе модели появилось заветное “Epoch 1/22”.

Что дальше

Раскрашивание изображений — это очень интересная задача. Здесь приходится заниматься и наукой, и творчеством. Возможно, эта статья поможет вам сэкономить время. С чего вы могли бы начать:

  • Реализовать другую заранее обученную модель.
  • Попробовать другой датасет.
  • Использовать больше картинок, чтобы увеличить точность работы нейросети.
  • Написать усилитель (amplifier) для цветового пространства RGB. Создайте аналогичную модель для раскрашивающей сети, которая берёт на вход очень насыщенные цветные изображения, а на выходе получаются картинки с корректными цветами.
  • Реализуйте взвешенную классификацию.
  • Примените нейросеть к видео. Уделите внимание не точности раскрашивания, а стабильности переходов между отдельными кадрами. Или можете собирать большие изображения из мелких «лоскутков».

Можете раскрасить свои чёрно-белые изображения с помощью всех трёх описанных версий нейросети на FloydHub.

  • Для применения альфа-версии просто замените файл woman.jpg на свой файл с тем же названием (размером 400×400 пикселей).
  • Для бета-версии и полной версии добавьте свои картинки в папку Test, а потом выполните FloydHub-команду. Или можете загрузить их напрямую в Notebook в папку Test, прямо во время работы. Эти изображения должны быть строго 256×256 пикселей. Все тестовые картинки можете загрузить в цвете, они всё равно будут автоматически преобразованы в чёрно-белые.

Черно белая свадьба | Фото оформления свадьбы в черно-белом стиле и цвете

 


 

Фото: Артем Виндриевский

Свадьбы московского агентства «Карамель» сочетают в себе смелость, нежность и утонченность. Каждую деталь на их торжествах всегда хочется рассматривать отдельно, потому что из них состоит история, несущая глубокий смысл. И вовсе не обязательно смешивать самые яркие краски, чтобы его передать. Достаточно использовать всего два цвета — черный и белый, которыми, на первый взгляд, сложно удивить.  Но именно это и сделали декоратор Юлия Шакирова и организаторы Алевтина и Алексей Шолоховы на свадьбе Дарьи и Аскара.

Пара

Алексей и Алевтина признаются, что им очень повезло с парой — с Дарьей и Аскаром, и их семьей. Мама невесты, как и она сама, хорошо разбирается в моде и дизайне интерьеров, и это в разы упростило разработку концепции. Организаторам удалось найти идеальную локацию для своей смелой задумки — загородный ресторан «Вилла Ротонда». Именно там прошел свадебный ужин и торжественная церемония в лучах солнца.

 


 

Фото: Михаил Мун

Стиль оформления

Вместе с командой Юлии Шакировой организаторы взяли за основу классический светлый интерьер в стиле особняков Ralph Lauren.

Алексей и Алевтина Шолоховы, руководители агентства «Карамель»:

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

 


 

Юлия Шакирова, декоратор:

«Концепция мероприятия — это черно-белая стильная свадьба, при этом черный цвет используется очень аккуратно, лишь по контуру. Важную роль в декоре играла флористика — столы мы украсили белоснежными цветами фаленопсиса, которые обеспечили пространство объемом и легкостью. Мы хотели сделать оформление воздушным и непринужденным, поэтому использовали очень много элементов из стекла: стеклянными были колбы для свечей, цилиндрические вазы».

 


 

Фото: Артем Виндриевский

Главные акценты

В оформлении организаторы вместе с Юлией акцентировали особое внимание на столах. Они были декорированы в четырех вариантах и визуально отличались друг от друга благодаря изящным элементам декора — свечам и большим 25-ти рожковым канделябрам на подставках. Но главным акцентом оформления свадьбы стали пушистые белые деревья, которые покорили всех гостей.

Фото: Артем Виндриевский

Впечатление

Такой декор покорил даже ведущего Александра Белова, который за время своей карьеры видел очень много необычных свадеб.

Александр Белов, ведущий:

«Мы привыкли видеть свадьбы в розовых, бежевых оттенках, поэтому черно-белая концепция показалась мне очень стильной. Отсутствие ярких цветов отнюдь не испортило визуальную составляющую — черный идеально контрастировал с белым, создавая презентабельный и стильный вид. Готов поспорить, что мы еще увидим немало мероприятий, которые декораторы будут пытаться оформлять «как у Юлии Шакировой на той самой свадьбе с белыми деревьями». Это, определенно, будущий тренд. Я видел много работ Юлии и, казалось бы, должен был привыкнуть к красоте и масштабу декора. Но зайдя в зал перед началом торжества, я задал вопрос: «Как?! Юля, как это все пришло тебе в голову? О чем ты думала в тот момент, когда решила, что в банкетном зале из центра огромных столов будут расти гигантские белые деревья?»»

Александр Белов, ведущий:

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

 


 

Фото: Артем Виндриевский

 Алексей и Алевтина Шолоховы, руководители агентства «Карамель»:

«Несмотря на то, что мы использовали всего два цвета, у нас получилось действительно яркое и запоминающееся торжество. При этом очень элегантное и выдержанное в каждом моменте».

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

Фото: Михаил Мун

Организация:
свадебное агентство «Карамель»
Декор: Юлия Шакирова
Фото: Михаил Мун, Артем Виндриевский
Ведущий: Александр Белов
Площадка: «Вилла Ротонда»

 

Еще больше полезной информации о подготовке к свадьбе и свадебных трендах можно посмотреть в наших гайдах.

Black And White Fashion — Bilder und Stockfotos

719.765Bilder

  • Bilder
  • Fotos
  • Grafiken
  • Vektoren
  • Videos
AlleEssentials

Niedrigster Preis

Signature

Beste Qualität

Durchstöbern Sie 719.765

black and white мода Фото и фотографии. Oder suchen Sie nach hipster, um noch mehr faszinierende Stock-Bilder zu entdecken.

vektor-set-vorlage von mannlichen футболки — черно-белые модные стоковые графики, -клипарт, -мультфильмы и -символ

Vektor-Set-Vorlage из мужских футболок

комплект с портретами. einfache, минималистская векторная иллюстрация eines schönen frauengesichts. стрихцейхнунг. — черно-белая графика, -клипарт, -мультфильмы и -символы

Set von sechs Porträts. Einfache, minimalistische…

белоснежная женская футболка с изображением руки в руке — черно-белая мода сток-фотографии и фотографии графика, -клипарт, -мультфильмы и -символ

Футболка Leere schwarze Vektor für Vorlage

grunge-textur. alte zerkratzte kulisse. проблемная накладка oberfläche. Urbaner Rauer Hintergrund mit Staubefekt. beschädigtes винтажный материал. ретро кассета. векторная иллюстрация — черно-белая модная графика, клипарт, мультфильмы и символы

Grunge-Textur. Alte zerkratzte Kulisse. Состаренная накладка Oberflä

Eleganter junger mann im weißen Wintermantel — черно-белая мода стоковые фотографии и изображения

Eleganter junger Mann im weißen Wintermantel

weißes badezimmer mit dusche und badewanne — черно-белые стоковые фотографии и изображения моды

Weißes Badezimmer mit Dusche und Badewanne

line-art-frauen verschiedener rassen — черно-белые стоковые изображения моды, -клипарт, -мультфильмы и -символ

Line-Art-Frauen verschiedener Rassen

Frauen verschiedener Rassen stehen zusammen. Profilsilhouetten von drei weiblichen Charakteren mit unterschiedlichen Frisuren. Минималистская иллюстрация в художественном стиле. Konzept der feministischen Bewegung

abstrakte gewellte gekrümmte formen. schwarz und weiß geometrische nahtlose muster. natürliche organische formen abgerundete objekte nahtlose muster. — черно-белая графика моды, -клипарт, -мультфильмы и -символ

Abstrakte gewellte gekrümmte Formen. Schwarz und weiß…

jeder tag ist ein neuanfang — черно-белые стоковые фото и изображения моды

Jeder Tag ist ein Neuanfang

innenausstattung, moderne küche — черно-белые стоковые фото и изображения моды

Innenausstattung, Moderne Küche

белоснежная футболка vorlage. vorder- und rückseite — черно-белая модная графика, -клипарт, -мультфильмы и -символы

Leer weiße T-shirt Vorlage. Vorder- und Rückseite

mode-model-sitzstuhl in klassischen trausern und weißem hemd. stilvolle frau schönheit porträt im studio auf weißem hintergrund — черно-белая мода стоковые фото и фотографии

Mode-Model-Sitzstuhl in klassischen Trausern und weißem Hemd. … linie — черно-белая модная графика, -клипарт, -мультфильмы и -символ

Continuierliche Linie Gesicht Frauen nahtlose Muster — Vector… und bilder

Afrikanische Modefrau sitzt in Winterkleidung

Schöne schwarze Frau mit weißem Пуловеры, изолированные на кремовом фоне Hintergrund. Mittlere Erwachsene stilvolle Frau sitzt gegen hellgraue Wand. Reife modische Dame mit Rollkragenpullover, die mit der Hand am Kinn lächelt, während sie mit Kopierraum in die Kamera schaut.

staub kratzt schwarzehintergrund beunruhigt schicht — черно-белая мода stock-fotos und bilder Öffnen Schreien Mund auf einem gestreiften Hintergrund

Öffne den schreienden Mund auf einem gestreiften Hintergrund. Helle Vektorcollage mit universellen grafischen Elementen, geometrischen Formen, gepunktetem Halbtonobjekt for Ihr Design

geschenkkartenvorlage. — черно-белая модная графика, клипарт, мультфильмы и символы

Geschenkkartenvorlage.

Vektorvorlage for Design. Geschenkgutschein. Geschenkgutschein. Рабат-Гутшайн. Источник для текста. Vorlage im flachen Stil. Geschäftsvorlage. Sonderangebot für den Kunden. Вектор-Hintergrundgeschenke. Stock-Illustration

drücken sie die die kleidung dünne linie symbol. отожмите векторную иллюстрацию ручной работы, изолированную на белом фоне. твист gewebe mit tropfen umriss stil design, für web und app entwickelt. eps 10. — черно-белая модная графика, -клипарт, -мультфильмы и -символ

Drücken Sie die Kleidung dünne Line Symbol. Wring nass Handtuch…

Drücken Sie das Symbol für die dünne Line der Kleidung zusammen. Отжимные носы Handtuch Vektorillustration isoliert auf weiß. Twist Tissue mit Tropfen Outline Style Design, entworfen für Web und App. Eps 10

символ кепки dünne linie. бейсбол ледерхат. спортивный вектор-дизайн-концепт, умрис стиль пиктограммы на фоне Weißem Hintergrund, verwendung для Интернета и приложения. eps 10. — черно-белая модная графика, -клипарт, -мультфильмы и -символ

Cap dünne Linie Symbol. Бейсбол Ледерхат. Sport Vektor-Design-Kon

Symbol für die Kappe der dünnen Line. Бейсбол-Ледерхат. Sport-Vektor-Design-Konzept, Outline-Stil Piktogramm auf weißem Hintergrund, Verwendung für Web und App. Эпс 10

kreispfeil. schaltfläche weiter. png-symbol in der Rechten linie im vektor flach — черно-белая модная графика, -клипарт, -мультфильмы и -символ

Kreispfeil. Schaltfläche Weiter. Png-Symbol in der rechten Line…

Kreispfeil. Schaltfläche «Вейтер». PNG-символ для правой линии в векторном стиле.

nahtlose schwarze tupfen auf weißemhintergrund — black and white fashion stock-grafiken, -clipart, -cartoons und -symbole изображение

Молодой крутой рэпер с черным платьем Kapuzenpullover und Mütze…

Черно-белая рубашка Design Vorlage — черно-белая мода стоковые фотографии и изображения

Черно-белая рубашка Design Vorlage

schöne frau — Черно-белая мода стоковые фотографии и изображения

Schöne Frau

mockup vorlage, футболка männer schwarz kurzarm — черно-белая модная графика, клипарт, мультфильмы и символы -Vorlage mit kurzen Ärmeln und Rundhalsausschnitt. Макет футболки, Herrenbekleidung und Sportbekleidung, Vorder- und Rückansicht

Black And White Fashion Stock-Fotos und Bilder

  • CREATIVE
  • ОТ РЕДАКЦИИ
  • VIDEOS
  • Beste Übereinstimmung
  • Neuestes
  • Ältestes
  • Am beliebtesten

Alle Zeiträume24 Stunden48 Stunden72 Stunden7 Tage30 Tage12 MonateAngepasster Zeitraum

  • Lizenzfrei
  • Lizenzpflichtig
  • RF und RM

Lizenzfreie Kollektionen auswählen >Editorial -Kollektionen auswählen >

Bilder zum Einbetten

Durchstöbern Sie 571.501

черно-белая мода Фото и фотографии. Oder suchen Sie nach hipster, um noch mehr faszinierende Stock-Bilder zu entdecken. glückliche mädchen gehen zu einem konzert in mailand — черно-белая мода стоковые фотографии и фотографии от tätowierten junger mann — черно-белая мода стоковые фотографии и изображения элегантные старший мужчина — черно-белые стоковые фотографии моды и изображения две бизнесвумен — черно-белые стоковые фотографии моды и изображения из порошка. schöne ballett-tänzerin, mit pulver auf der bühne tanzen — черно-белые модные стоковые фото и фотографии портрет молодого человека с бритыми волосами и в очках в белой рубашке на белом фоне — черно-белые модные стоковые фото и бильярдные афроамериканские фотографии mann stehend im studio — черно-белые стоковые фотографии моды и изображения einer schönen frausuchen — черно-белые стоковые фотографии моды и изображения молодых девушек с руками в день рождения — черно-белые стоковые фотографии моды и изображения портретов стильной молодой пары в одежде подходящая одежда на белом фоне — черно-белая мода стоковые фотографии и изображенияабстрактный белый изогнутый архитектурный — черно-белые модные стоковые фотографии и изображения тег ist ein neuanfang — черно-белые модные стоковые фотографии и изображениягруппа веселых женщин с разными размер тела — черно-белые модные фото и фотографиибизнесвумен в элегантном костюме сидит на подпорной стене с солнцем свет и тень на заднем плане — черно-белые фотографии и фото молодой женщины на белом фоне — черно-белые фото и фотографии красивой молодой женщины, снятые в студии — черно-белые фото и фотографии моды bilderglitzer gold pinselstrich mit rahmen auf schwarzemhintergrund — черно-белая мода сток-график, -клипарт, -мультфильмы и символ портрет молодой спортсменки на фоне ясного голубого неба — черно-белая мода сток-фото и изображение смущенная девушка в белой футболке стесняется. — черно-белые стоковые фотографии моды и бильдермачо Манн — черно-белые стоковые фотографии моды и бильярдные абстракции schwarz und weiß gestreifte musterhintergrund — черно-белые стоковые графики моды, -клипарт, -мультфильмы и -символический портрет элегантной девушки в braunen kleidern, dunklenhintergrund — черно-белая мода стоковые фото и бильдеркноллинг портрет мужчина в окружении одежды с цветовой кодировкой шкаф — черно-белая мода стоковые фото и фотомолодая женщина в черном костюме сидит на полу перед бетонной стеной — черно-белая мода стоковые фотографии и изображения женской моды — junge ziemlich modische mädchen — черно-белая мода стоковые фотографии и изображения многонациональной группы молодежи — черно-белая мода . — черно-белые стоковые фотографии моды и изображения крутого зрелого мужчины, смотрящего в камеру — черно-белые стоковые фотографии моды и изображения вызывающей отвращение женщины, стоящей со сложенными руками — черно-белые стоковые фотографии моды и изображения с фотографиями — черно-белые стоковые фотографии и изображения стильной пары в черном веселятся на открытом воздухе — черно-белая мода стоковые фотографии и изображения черно-белый студийный портрет женской модели — черно-белые фотографии и изображения моды -grafiken, -clipart, -cartoons und -symbolemid вид женщин-моделей, идущих по белой пустыне через оконную раму mit kranz aus blumen — черно-белые стоковые фотографии моды и стильный мужской портрет — стоковое фото — черно-белые стоковые фотографии моды и б ilderfrau mit rosa gefärbten haaren, neon-make-up und sonnenbrille — черно-белая мода сток-фотографии и bilderherrenbekleidung und аксессуары — черно-белая мода сток-фотографии и bildermoderne luxus-wohnung im schwarzen stil mit ledersofa — черно-белая мода сток- fotos und bildermode mann — черно-белая мода stock-fotos und bilderyoung фотомодель позирует в студии, электрическое освещение позади нее — черно-белая мода stock-fotos und bilderfreunde machen die welt zu einem glücklicheren ort — черно-белая мода stock-fotos und bilderportrait женщины-спортсменки с руками на бедре, стоящей в солнечный день — черно-белая мода стоковые фото и фотографии модной одежды — черно-белая мода стоковые фото и фотографии молодые женщины, идущие через дверной косяк в пустыне — черно-белые стоковые фото моды und bilderschöne lächelnde mädchen mit lockigen frisur — черно-белая мода стоковые фотографии и бильярдная пара слушает наушники возле кирпича все — черно-белые стоковые фото и фотографии модычерно-белый портрет женщины на черном фоне — черно-белые стоковые фото и фотографии моды фон tätowierten junger mann mit schwarzen t-shirt — черно-белые стоковые фото и фотографии моды молодая женщина — черно-белая мода стоковые фотографии и фотографии уверенная в себе многоэтническая группа моделей в нижнем белье, сидящих у белой стены — черно-белая мода стоковые фотографии и фотографии junger frauen im dunkeln — черно-белая мода стоковые фотографии и фотографии улыбающиеся женщины, прислонившиеся к стене — черно-белые стоковые фото и бильдершёне фрау — черно-белые стоковые фото и бильярдные фотографии молодого человека в черной кожаной куртке с надписью «любовь» — черно-белые стоковые фото и бильдерпортрет einer schönen frausuchen — черно-белая мода стоковые фото и фотографии портрет спортсменок в спортивной одежде на фоне голубого неба — черно-белая мода стоковые фото и б ilderfull длина молодого человека, стоящего среди освещенных огней с отражением на полу в красной студии — черно-белые фото и фотографии моды моды. — черно-белые стоковые графики моды, -клипарты, -мультфильмы и -символы из 100

Когда и почему следует превращать изображения в черно-белые

Дом Образование Постобработка

15 комментариев

Для многих фотографов, особенно любителей, делать изображение черно-белым почти произвольно. Помню, в первые дни моей фотографии я был таким же. Я бормотал: «Интересно, будет ли это хорошо смотреться в черно-белом», а потом пробовал. Иногда это выглядело бы лучше, но обычно это было бы не так. Я полагал, что все это просто вкусовщина, но это не так. После многих лет чтения по теме и экспериментов я начал понимать, почему это работает, когда работает, и, наоборот, почему часто нет. Вот некоторые ключевые элементы, которые должны присутствовать в черно-белых изображениях, и почему.

Контрастность

Это первое в моем списке по уважительной причине: это главное соображение. Без цвета изображение имеет значительно меньше способов различения элементов, составляющих его композицию. Если вы сделаете изображение черно-белым, когда оно использует цвет, чтобы выделить объект или сцену, объект исчезнет в остальной части изображения, когда этот цвет будет удален. Для портретов вам нужно спросить себя, четко ли объект отличается от фона без использования цвета, и это всегда достигается за счет контраста.

Alex Ash by Robert K Baggs

Разница в экспозиции между объектом и фоном не должна быть огромной, чтобы работать; тонкие, но четкие различия, такие как пример выше, могут работать. Фон имеет более темный полутон, в отличие от тени, которую можно увидеть в бороде и волосах Алекса. Однако оттенок его кожи достаточно светлый, чтобы его обрамляли волосы, борода и фон, чтобы разделить изображение на слои так же, как это делает широкая апертура. Это также может быть достигнуто наоборот, когда фон засвечен (в приведенном ниже случае это большое окно), а объект экспонирован правильно, но при этом создается достаточный контраст, поэтому ему не нужен цвет (который был не так уж и много), чтобы сделать субъекта отличным от его окружения.

Joe Finnigan by Robert K Baggs

Это правило контраста можно довести до крайности с фантастическим эффектом. Например, силуэты людей в уличной фотографии и игра со светом — обычное дело и часть того, что делает этот жанр таким популярным.

Настроение

Следующие несколько причин, определяющих, предпочтительнее ли черно-белое изображение, чем цветное, гораздо более субъективны. Прежде всего, это настроение. Любой, кто хотя бы бегло взглянет на фотографию, поймет, какую силу имеет монохром, когда дело доходит до настроения. Нет никаких сомнений в том, что цвет тоже очень хорошо справляется с этим, но когда он не соответствует или просто не подходит, черно-белые преобразования могут, так сказать, изменить тон. Я считаю, что сила этого в создании более темного, более драматичного или более мрачного настроения.

Hanna Lyn Hughes by Robert K Baggs

Хотя черно-белые изображения лишены каких-либо выводов или предположений, которые может принести цвет, они также свободны от любых отвлекающих факторов, которые он также может принести. У фотографов, регулярно использующих силу черного и белого, есть общая черта — «простота». По какой-то причине простота и более мрачное настроение идут рука об руку, поэтому, если ваше изображение должно быть темным по настроению, подумайте о съемке с явным намерением преобразовать его в черно-белое.

Текстура

Подобно вышеупомянутой простоте, детали можно выделить, удалив отвлекающие факторы цвета. Изображение может стать очень перегруженным, если цветовая палитра не ограничена, что возможно только при большой предусмотрительности и стиле или удаче. Таким образом, если есть какая-то деталь, которую вы хотите запечатлеть, черно-белое преобразование может очень хорошо передать ее. На изображении ниже меня разрывало: с одной стороны, у субъекта были пронзительные голубые глаза, которые отлично смотрелись бы в цвете. С другой стороны, привлекательность субъекта заключалась в его коже и возрасте. Цветовая итерация этого изображения мне нравится, но для меня основное внимание уделяется цвету глаз. В черно-белом варианте светлые глаза по-прежнему очевидны, но текстура более заметна, но при этом не подавляется другими элементами.

Ronald by Robert K Baggs

Stylistic

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

Ли Айронс от Роберта К. Бэггса

Бонус: Нарушитель правил

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

Рэйчел Уилкинсон Роберта К. Бэггса

Как вы думаете, что делает или разрушает черно-белое изображение?

Темы: 

Образование

Fstoppers Originals

Постобработка

Роберт К. Бэггс — профессиональный портретный и коммерческий фотограф, педагог и консультант из Англии. Роберт имеет высшую степень по философии и степень магистра по исследованиям. В 2015 году работа Роберта о плагиате в фотографии была опубликована в рамках учебных программ нескольких университетов по фотографии.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *