Синтез текстур — это процесс алгоритмического построения большого цифрового изображения из небольшого цифрового образца изображения с использованием его структурного содержания. Он является объектом исследования в области компьютерной графики и используется во многих областях, среди прочего, в цифровом редактировании изображений , 3D-компьютерной графике и пост-продакшне фильмов .
Синтез текстур можно использовать для заполнения пробелов в изображениях (например, при закрашивании ), создания больших неповторяющихся фоновых изображений и расширения небольших изображений. [1]
Процедурные текстуры — это родственная техника, которая может синтезировать текстуры с нуля без исходного материала. Напротив, синтез текстур относится к техникам, где некоторое исходное изображение сопоставляется или расширяется.
« Текстура » — неоднозначное слово и в контексте синтеза текстур может иметь одно из следующих значений:
Текстуру можно расположить по спектру от регулярной до стохастической, соединенной плавным переходом: [2]
Алгоритмы синтеза текстур предназначены для создания выходного изображения , отвечающего следующим требованиям:
Как и большинство алгоритмов, синтез текстур должен быть эффективным с точки зрения времени вычислений и использования памяти.
Для синтеза текстур были исследованы или разработаны следующие методы и алгоритмы:
Самый простой способ создать большое изображение из образца изображения — это разбить его на плитки . Это означает, что несколько копий образца просто копируются и вставляются рядом. Результат редко бывает удовлетворительным. За исключением редких случаев, между плитками будут швы, и изображение будет сильно повторяться.
Методы стохастического синтеза текстур создают изображение путем случайного выбора значений цвета для каждого пикселя, на которые влияют только основные параметры, такие как минимальная яркость, средний цвет или максимальный контраст. Эти алгоритмы хорошо работают только со стохастическими текстурами, в противном случае они дают совершенно неудовлетворительные результаты, поскольку игнорируют любую структуру в образце изображения.
Алгоритмы этого семейства используют фиксированную процедуру для создания выходного изображения, т. е. они ограничены одним видом структурированной текстуры. Таким образом, эти алгоритмы могут применяться как только к структурированным текстурам, так и только к текстурам с очень похожей структурой. Например, алгоритм с одной целью может создавать высококачественные текстурные изображения каменных стен; однако маловероятно, что алгоритм создаст какой-либо жизнеспособный вывод, если дать образец изображения, на котором изображена галька.
Этот метод, предложенный группой Microsoft для интернет-графики, представляет собой усовершенствованную версию мозаики и выполняет следующие три шага:
Результатом является приемлемое изображение текстуры, которое не слишком повторяется и не содержит слишком много артефактов. Тем не менее, этот метод неудовлетворителен, поскольку сглаживание на шаге 3 делает выходное изображение размытым.
Эти методы, использующие поля Маркова, [3] непараметрическую выборку, [4] древовидную векторную квантизацию [5] и аналогии изображений [6], являются одними из самых простых и успешных общих алгоритмов синтеза текстур. Они обычно синтезируют текстуру в порядке скан-линии, находя и копируя пиксели с наиболее похожим локальным соседством, как синтетическая текстура. Эти методы очень полезны для завершения изображения. Они могут быть ограничены, как в аналогиях изображений , для выполнения многих интересных задач. Они обычно ускоряются с помощью некоторой формы метода приближенного ближайшего соседа, поскольку исчерпывающий поиск лучшего пикселя несколько медленный. Синтез также может быть выполнен в многоразрешении, например, с помощью некаузального непараметрического многомасштабного марковского случайного поля. [7]
Синтез текстур на основе патчей создает новую текстуру путем копирования и сшивания текстур с различными смещениями, аналогично использованию инструмента клонирования для ручного синтеза текстуры. Квилтинг изображений [8] и текстуры graphcut [9] являются наиболее известными алгоритмами синтеза текстур на основе патчей. Эти алгоритмы, как правило, более эффективны и быстры, чем методы синтеза текстур на основе пикселей.
Совсем недавно было показано, что методы глубокого обучения являются мощным, быстрым и управляемым данными параметрическим подходом к синтезу текстур. Работа Леона Гатиса [10] является важной вехой: он и его соавторы показали, что фильтры из дискриминационно обученной глубокой нейронной сети могут использоваться в качестве эффективных параметрических дескрипторов изображений, что привело к новому методу синтеза текстур.
Еще одной недавней разработкой является использование генеративных моделей для синтеза текстур. Метод Spatial GAN [11] впервые продемонстрировал использование полностью неконтролируемых GAN для синтеза текстур. В последующей работе [12] метод был расширен еще больше — PSGAN может изучать как периодические, так и непериодические изображения неконтролируемым образом из отдельных изображений или больших наборов данных изображений. Кроме того, гибкая выборка в пространстве шума позволяет создавать новые текстуры потенциально бесконечного выходного размера и плавно переходить между ними. Это делает PSGAN уникальным в отношении типов изображений, которые может создавать метод синтеза текстур.
Некоторые реализации синтеза текстур существуют в виде плагинов для бесплатного редактора изображений Gimp :
Реализация синтеза текстур на основе пикселей:
Синтез текстур на основе патчей:
Глубокий генеративный синтез текстур с помощью PSGAN, реализованный на Python с помощью Lasagne + Theano:
Некоторые из самых ранних и наиболее цитируемых работ в этой области включают в себя:
хотя были и более ранние работы на эту тему, такие как
(Последний алгоритм имеет некоторое сходство с подходом Chaos Mosaic).
Непараметрический подход сэмплирования Эфроса-Люнга является первым подходом, который может легко синтезировать большинство типов текстур, и он вдохновил буквально сотни последующих работ по компьютерной графике. С тех пор область синтеза текстур быстро расширилась с появлением карт 3D-графики для персональных компьютеров. Однако оказывается, что Скотт Дрейвс первым опубликовал версию этой техники на основе патчей вместе с кодом GPL в 1993 году, согласно Эфросу.