128
правок
Изменения
м
Рис сделать рисунком
==Блендинг Пуассона==
[[Файл:Poisson int1.png|thumb|right|300px|Рис. Рисунок $1.1$: Пример перепада яркости при простой вставке<ref name='ZWS20'/>]][[Файл:Poisson int2.png|thumb|right|300px|Рис. Рисунок $1.2$: Результат применения блендинга Пуассона<ref name='ZWS20'/>]]
Простая вставка одного изображения поверх другого нередко влечет заметный перепад яркости на границе вставки (рис. рисунок $1.1$). Метод Пуассона заключается в сглаживании этого перепада (рис. рисунок $1.2$) с целью сделать дефект менее заметным, используя градиент вставляемого изображения и значения пикселей фонового изображения на границе вставки.
'''Замечание:''' Для RGB изображений задача минимизации решается для каждого цветового канала отдельно.
==Глубокая гармонизация картин==
Для того чтобы вставить изображение в картину или рисунок нужно не только сделать бесшовный переход и изменить цвета, но ещё и изменить текстуру вставляемого изображения, например, сымитировать мазки кистью (Рис. рисунок $2$). Используем для этого комбинацию подходов из других статей<ref name="GEB16"/><ref name="JAFF16"/><ref name="WRB17"/>.
[[Файл:LPSB18_Figure_1.png|1000px|thumb|center|Рис. Рисунок $2$: Пример работы алгоритма ''Deep Image Analogy''<ref name="LYY*17">[https://arxiv.org/pdf/1705.01088.pdf Visual Attribute Transfer through Deep Image Analogy] Jing Liao, Yuan Yao, Lu Yuan, Gang Hua, Sing Bing Kang (2017)</ref> ($3$ картинка) и ''Deep Painterly Harmonization''<ref name="LPSB18"/> ($4$ картинка)]]
Алгоритм состоит из двух проходов. Первый проход делает грубую гармонизацию, а второй {{---}} более тщательную. Отличаются они '''стилевым маппингом''' и функциями потерь<ref name="LPSB18">https://arxiv.org/pdf/1804.03189.pdf Fujun Luan, Sylvain Paris, Eli Shechtman, Kavita Bala (2018)</ref>.
<div class="tright" style="clear:none">[[Файл:LPSB18_Figure_2c.png|250px|thumb|none|Рис. Рисунок $3.2$: Результаты после второго прохода<ref name="WRB17"/>]]</div><div class="tright" style="clear:none">[[Файл:LPSB18_Figure_2b.png|250px|thumb|none|Рис. Рисунок $3.1$: Результаты после первого прохода<ref name="WRB17"/>]]</div>
Первый проход делает грубую гармонизацию, но при этом он хорошо работает с любыми стилями (Рис. рисунок $3.1$). Здесь используется алгоритм $IndependentMapping$ для построения стилевого маппинга. Этот алгоритм для каждого столбца $j$ в $F_l[I]$ ищет столбец $p(j)$ в $F_l[S]$, такой что евклидово расстояние между патчем $F_l[I]$ с центром $j$ и патчем $F_l[S]$ с центром $p(j)$ минимально (метод ближайшего соседа).
<font size="3em">
===Второй проход===
[[Файл:LPSB18_Figure_5c.png|thumb|right|250px|Рис. Рисунок $4.1$: Только первый проход<ref name="WRB17"/>]][[Файл:LPSB18_Figure_5d.png|thumb|right|250px|Рис. Рисунок $4.2$: Только второй проход<ref name="WRB17"/>]][[Файл:LPSB18_Figure_5f.png|thumb|right|250px|Рис. Рисунок $4.3$: Результат с $\mathcal{L}_{style}$ вместо $\mathcal{L}_{s1}$<ref name="WRB17"/>]][[Файл:LPSB18_Figure_5g.png|thumb|right|250px|Рис. Рисунок $4.4$: Оба прохода<ref name="WRB17"/>]][[Файл:LPSB18_Figure_5h.png|thumb|right|250px|Рис. Рисунок $4.5$: Финальный результат<ref name="WRB17"/>]]
Второй проход делает более качественную гармонизацию после первого прохода (Рис. рисунок $3.2$). Здесь мы будем использовать более сложный алгоритм $ConsistentMapping$ построения стилевого маппинга и более сложную функцию потерь. Суть этого алгоритма в том, чтобы найти стилевой мапинг на некотором слое $l_{ref}$ и перенести этот маппинг на остальные слои. Также, мы будем предпочитать маппинги, в которых смежные патчи в $F_l[S]$ остаются смежными после мапинга, чтобы обеспечить пространсвенную согласованность (таким образом мы хотим переносить сложные текстуры более качественно, например, мазки кистью). Если применять второй проход сразу, то результаты получаются хуже (Рис. рисунок $4.2$).
<font size="3em">
</font>
При вычислении стилевого маппинга появляется очень много дублирующихся векторов, что даёт не очень хорошие результаты (Рис. рисунок $4.3$). Поэтому при вычислении матрицы Грама выкинем повторяющиеся векторы. Назовём функцию потерь с такой модификацией $\mathcal{L}_{s1}$.
$$\mathcal{L}_2(I, S, O, P) = \mathcal{L}_{content}(I, O) + w_{style}\mathcal{L}_{s1}(S, O, P) + w_{hist}\mathcal{L}_{hist}(S, O) + w_{tv}\mathcal{L}_{tv}(O),$$
{| class="wikitable" style="background-color:#FFF; text-align:center"
|-
| Рис. Рисунок $4.1$: Только первый проход<ref name="WRB17"/>| Рис. Рисунок $4.2$: Только второй проход<ref name="WRB17"/>| Рис. Рисунок $4.3$: Результат с $\mathcal{L}_{style}$ вместо $\mathcal{L}_{s1}$<ref name="WRB17"/>| Рис. Рисунок $4.4$: Оба прохода<ref name="WRB17"/>| Рис. Рисунок $4.5$: Финальный результат<ref name="WRB17"/>
|-
| [[Файл:LPSB18_Figure_5c.png|250px]]
===Постобработка===
[[Файл:LPSB18_Figure_6abc.png|400px|thumb|right|Рис. Рисунок $5$: Результат постобработки (без постобработки, после первой стадии, после второй стадии)<ref name="WRB17"/>]]
Описанный алгоритм даёт хорошие результаты в целом, но при ближайшем рассмотрении могут быть артефакты (Рис. рисунок $5$). Поэтому сделаем двухступенчатую постобработку (подробное описание есть в оригинальной статье<ref name="LPSB18"/>):
# Переведём изображение в цветовое пространство [https://en.wikipedia.org/wiki/CIELAB_color_space $L*\alpha*\beta$] и применим [https://en.wikipedia.org/wiki/Guided_filter Guided filter] для a и b каналов.
# С помощью алгоритма PatchMatch<ref name="BSFG09">https://www.researchgate.net/profile/Eli_Shechtman/publication/220184392_PatchMatch_A_Randomized_Correspondence_Algorithm_for_Structural_Image_Editing/links/02e7e520897b12bf0f000000.pdf Connelly Barnes, Eli Shechtman, Adam Finkelstein, Dan B Goldman (2009)</ref> и того же Guided filter делаем так, чтобы все патчи выходного изображения присутсвовали в стилевом (чтобы не было новых объектов или структур).
===Детали реализации===
[[Файл:LPSB18_Figure_4.png|400px|thumb|right|Рис. Рисунок $6$: Влияние $l_{ref}$ на результат<ref name="WRB17"/>]]
Возьмём $l_{ref}$ = conv4_1 (что будет если использовать другие слои видно на Рис. рисунке $6$).
Выберем следующие веса для слоёв:
|}
На рисунке $4.4$ результат алгоритма без подбора гиперпараметров. Видно, что самолёт ярче, чем остальное изображение. С подбором параметров получается более естественный результат (Рис. рисунок $4.5$).
===Примеры===
{{Определение
|definition =
'''Дискретный оператор Лапласа''' (фильтр Лапласа) $\mathbf{D}^2$ {{---}} аналог непрерывного оператора Лапласа $\nabla^2$, который позволяет выделять контуры изображения (Рис. рисунки $7.1$ и $7.2$).
$$\mathbf{D}^2=\begin{bmatrix}0 & 1 & 0\\1 & -4 & 1\\0 & 1 & 0\end{bmatrix}.$$ }}
{| class="wikitable" style="float:right; clear:right;"
!Рис. Рисунок $7.1$:<br>Исходное изображение<ref>https://en.wikipedia.org/wiki/Lenna#/media/File:Lenna_(test_image).png</ref>!Рис. Рисунок $7.2$:<br>Применение фильтра Лапласа
|-
| [[Файл:Lenna.png|220px]]