Изменения

Перейти к: навигация, поиск

Блендинг изображений

157 байт добавлено, 13:58, 9 января 2021
/Блендинг Пуассона: тех формул и немного описание
|}
Пусть $p$ {{---}} координаты пикселя двухмерного изображения (т.е. $(x, y)$). За $Img_p$ обозначим значение пикселя с координатами $p$ изображения $Img$. Пусть $\Omega$ {= \{---}} множество координат $p$, что $\;|\;M_p = 1\}$. Тогда $\partial \Omega$ {{---}} координаты границы вставляемой области, а $int(\Omega)$ {{---}} внутренность области.
Пусть $N_p$ {{---}} множество соседей $p$ (максимум четыре пикселя, имеющих общую границу с $p$, т.е. пиксели со следующими координатами: $(x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)$). Для всех пар $(p, q)$ таких, что $q \in N_p$, введем $v_{pq} = I_p - I_q$
Обозначим результат блендинга за $O$. Так как мы хотим сделать результат бесшовным, пиксели $O_p$, где $p \in \partial\Omega$, сделаем равными $S_p$. Для $p, q$ из внутренней части $\in int(\Omega),\; q \in N_p$ постараемся найти такие значения, чтобы их разность была близка к $v_{pq}$. Для этого решим задачу минимизации:
$$\underset{f_p,\; p \in \Omega}{\mathrm{min}}\; \underset{p, q \in \Omega}{\sum}\; (O_p - O_q - v_{pq})^2$, \text{где $} O_p = S_p$ для $, p \in \partial \Omega$$
Заметим, что функция, которую мы хотим минимизировать, квадратична относительно переменных $O_p, p \in int(\Omega)$. Для решения задачи минимизации вычислим частные производные по этим переменным и найдем значения переменных, при которых частные производные будут равны нулю. Для $p \in \Omega$:  $\frac{\partial{\underset{p, q \in \Omega}{\sum}\; (O_p - O_q - v_{pq})^2}}{\partial O_p} = \underset{q \in N_p}{\sum} 2 (O_p - O_q - v_{pq}) - \underset{q \in N_p}{\sum} 2 (O_q - O_p - v_{qp}) = 2 \underset{q \in N_p}{\sum} 2 (O_p - O_q - v_{pq})$$.
Приравнивая к нулю, получаем: $|N_p| O_p - \underset{q \in N_p}{\sum} O_q = \underset{q \in N_p}{\sum} v_{pq}$.
Для точек, граничащих с $\partial \Omega$: $\;|N_p| O_p - \underset{q \in N_p \cap \Omega}{\sum} O_q = \underset{q \in N_p \cap \partial \Omega}{\sum} S_q + \underset{q \in N_p}{\sum} v_{pq}$.
Решаем систему уравнений и получаем значения $O_p$ для пикселей $p$ из внутренности $\Omega$. Для решения систем уравнений такого вида могут быть использованы итеративные алгоритмы Gauss-Seidel и V-cycle multigrid<ref name="PGB03"/>. Получаем значения пикселей $O_p$, $p \in int(\Omega)$. Тогда результат $B$ блендинга Пуассона будет следующим: $$B_p =\begin{cases}O_p,\; \text{если } p \in int(\Omega) \\S_p,\; \text{иначе } \end{cases}$$
Mетод Пуассона сдвигает цвета накладываемого изображения, сохраняя свойства градиента (то т.е. если пиксель $I_{p1}$ был меньше $I_{p2}$, то после преобразования $I_{p1}$ не станет больше $I_{p2}$), однако само значение само градиета может получиться другим.<ref name='clear_poisson'>https://erkaman.github.io/posts/poisson_blending.html Poisson blending для самых маленьких</ref>
==Трансфер стиля==
128
правок

Навигация