ebsynth
— универсальный инструмент для синтеза изображений по примерам. Его можно использовать для различных задач синтеза изображений, включая управляемый синтез текстур, передачу художественного стиля, рисование с учетом содержимого и суперразрешение.
Основное внимание в ebsynth
уделяется сохранению точности исходного материала. В отличие от других недавних подходов, ebsynth
не полагается на нейронные сети. Вместо этого он использует современную реализацию алгоритмов непараметрического синтеза текстур. Благодаря своей природе патчей, ebsynth
дает четкие результаты, сохраняющие все мелкие детали, присутствующие в исходном изображении.
ebsynth -style -guide -output
-style
-guide
-weight
-uniformity
-patchsize
-pyramidlevels
-searchvoteiters
-patchmatchiters
-extrapass3x3
-backend [cpu|cuda]
Готовый двоичный файл Windows можно скачать здесь: http://jamriska.cz/ebsynth/ebsynth-win64.zip.
В первом примере показано, как выполнить базовый управляемый синтез текстур с помощью ebsynth
. Этот вариант использования был впервые предложен в оригинальной статье Image Analogies [1], где он был назван «текстурой по числам». Начнем с фотографии естественной сцены вместе с ее сегментацией (например, скала окрашена в зеленый цвет, небо — в синий):
ebsynth -style source_photo.png -guide source_segment.png target_segment.png -output output.png
Затем мы вручную рисуем целевую сегментацию и просим ebsynth
создать новую «фотографию», которая будет соответствовать ей. Говоря языком переноса стилей: мы хотим перенести стиль исходной фотографии на целевую сегментацию таким образом, чтобы учитывались отдельные сегменты. Сегментация действует как руководство для синтеза.
В этом примере показано, как добиться нефотореалистичного рендеринга с помощью ebsynth
. Он основан на работе Фишера и др. [7]. Цель состоит в том, чтобы визуализировать 3D-модель так, как это сделал бы художник. В частности, мы хотим показать, как художник передает различные эффекты освещения, такие как блики, контактные тени и непрямые отражения. Для этого мы создали простую эталонную сцену с освещенным шаром и позволили художнику нарисовать ее в своем стиле. Мы используем готовый трассировщик пути для создания отдельных проходов рендеринга, например, полного глобального освещения, только компонента прямого рассеяния, только косвенного отражения и т. д. Затем мы визуализируем тот же набор проходов для целевой 3D-модели. и используйте их в качестве руководства для ebsynth
.
ebsynth -style source_style.png
-guide source_fullgi.png target_fullgi.png -weight 0.66
-guide source_dirdif.png target_dirdif.png -weight 0.66
-guide source_indirb.png target_indirb.png -weight 0.66
-output output.png
По сравнению с текстурой по номерам, основное отличие здесь в том, что теперь у нас есть несколько направляющих каналов. Обратите внимание, что руководства всегда идут парами: сначала исходное руководство, затем целевое руководство. Для достижения лучших результатов мы могли бы захотеть увеличить вклад руководств по отношению к стилю. В приведенном выше примере стиль имеет вес по умолчанию 1,0, а направляющие каналы имеют вес 0,66 каждый. В сумме общий вес направляющей составляет 2,0, что дает соотношение направляющей к стилю 2:1.
Этот пример демонстрирует, как можно использовать ebsynth
для переноса стиля портретной картины на фотографию другого человека. Он основан на работе Фишера и др. [8]. Цель состоит в том, чтобы воспроизвести тонкие нюансы исходной картины, сохраняя при этом личность целевого человека. Т.е. мы хотим, чтобы после синтеза человек все еще был узнаваем.
В отличие от StyLit, в этом случае у нас нет эталонной 3D-геометрии, которую можно было бы использовать в качестве ориентира. Однако мы можем воспользоваться тем фактом, что и исходная картина, и целевая фотография содержат человеческое лицо, имеющее четко выраженную структуру. Мы будем использовать эту структуру, чтобы получить необходимую направляющую информацию.
ebsynth -style source_painting.png
-guide source_Gapp.png target_Gapp.png -weight 2.0
-guide source_Gseg.png target_Gseg.png -weight 1.5
-guide source_Gpos.png target_Gpos.png -weight 1.5
-output output.png
В частности, мы обнаруживаем ориентиры лица как на целевом, так и на исходном изображениях и используем их для создания мягкой направляющей сегментации Gseg
и позиционной направляющей Gpos
, которая по сути представляет собой плотное поле деформации, которое сопоставляет каждый целевой пиксель с соответствующей позицией в источнике. . Чтобы сохранить личность человека, мы используем руководство по внешнему виду Gapp
, которое представляет собой версию целевой фотографии в оттенках серого, выровненную в соответствии с яркостью исходной картины.
Код выложен в общественное достояние. Вы можете делать с ним все, что захотите.
Однако следует знать, что в коде реализован алгоритм PatchMatch, запатентованный Adobe (патент США 8 861 869). Другие методы также могут быть запатентованы. Вы несете ответственность за то, чтобы убедиться, что вы не нарушаете права владельцев патентов, используя этот код.
Если вы найдете этот код полезным для вашего исследования, укажите:
@misc{Jamriska2018,
author = {Jamriska, Ondrej},
title = {Ebsynth: Fast Example-based Image Synthesis and Style Transfer},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/jamriska/ebsynth}},
}