Комментарии 33
Вопрос к автору статьи: есть ли какие-либо автоматизированные программные методы для преобразования блендинга Пуассона? Или только это можно сделать только вручную в графическом редакторе?
Что вы имеете ввиду под автоматизированными программными методами?
В разделе «ссылки» два последних пункта — две программы, одна с исходниками.
В разделе «ссылки» два последних пункта — две программы, одна с исходниками.
Я имею в ввиду, что есть ли программа, которая делала бы всё это автоматически?
Автоматически вырезала бы акулу на одной фотке и лепила бы на другую?
Чтобы автоматически выделяла область на исходном изображении и позиционировала на целевом — таких я не встречал. А с остальным справляются две последние программы в разделе «ссылки».
А то, что здесь вычисляется — это действительно градиент? Формула выглядит больше похожей на лапласиан.
blendme.ru/
Комментарии там ну очень в стиле сайтов «бесплатно без смс».
Комментарии там ну очень в стиле сайтов «бесплатно без смс».
Мона Пит
Тайна улыбки Мона Лизы разгаданна.
Для склейки панорам, думаю, лучше всего подойдет. Так, как фото наиболее близки по оттенкам.
Для склейки панорам, думаю, лучше всего подойдет. Так, как фото наиболее близки по оттенкам.
Оригинальный метод копирования градиента в 99% случаев бесполезен, сам когда-то писал похожую программку исходя из оригинальной статьи «Poisson Image Editing», по крайней мере формулы у меня похожие получались. Без серьезной ручной коррекции там обычно вообще никак. Если кому-то интересна эта тема, погуглите «seamless cloning», можно найти более умные версии алгоритма.
Три года назад в GIMP хотели внедрить этот метод, но тогда от этой функции отказались. Ниже видео со специально подобранными картинками, но если вы возьмете любые другие случайные изображения, то скорее всего, у вас ничего не выйдет.
Три года назад в GIMP хотели внедрить этот метод, но тогда от этой функции отказались. Ниже видео со специально подобранными картинками, но если вы возьмете любые другие случайные изображения, то скорее всего, у вас ничего не выйдет.
> если вы возьмете любые другие случайные изображения, то скорее всего, у вас ничего не выйдет
Не соглашусь. Если взять 2 изображения со схожей текстурой и градиенты на границе изображений будут близкими по значению, то все будет замечательно. Почти во всех случаях хорошо вставляются изображения с прозрачной структурой. Попробуйте вставлять радугу или облака, результат в большинстве случаев будет радовать.
Не соглашусь. Если взять 2 изображения со схожей текстурой и градиенты на границе изображений будут близкими по значению, то все будет замечательно. Почти во всех случаях хорошо вставляются изображения с прозрачной структурой. Попробуйте вставлять радугу или облака, результат в большинстве случаев будет радовать.
Напомнило
Здравствуйте! Спасибо за статью, но разрешите немного критики:
Мне интересна тема и я был бы рад видеть чуть более подробно о том, что и откуда берется и какой в этом «физический смысл» для людей, которые чуть дальше от преобразования Пуассона, чем вы :-)
Самая первая же формула: вы определяете H как множество точек из A, которые принадлежат какой-то dB. Или я не прав? Что такое dB? Значек похож на частную производную, но что-то она сюда не клеится.
Далее градиент: если я правильно помню — это вектор частных производных, в данном случае функции B. Для извлечения частных производных вы использовали приближенные формулы. А потом, для нахождения длины вектора вы просто (?!) сложили его составляющие x и y вместо того, чтобы извлечь корень из суммы квадратов? Но, вероятно я чего-то не знаю…
Далее уравнение Пуассона: честно говоря, наверное, в универе я прогулял эту лекцию, пришлось курить Википедию. Некоторые мгновения смотрел сюда, но так и не смог понять, что и откуда вы взяли. Поясните, пожалуйста для несведущих: что, откуда, и главное — какой «физический смысл».
Спасибо!
Мне интересна тема и я был бы рад видеть чуть более подробно о том, что и откуда берется и какой в этом «физический смысл» для людей, которые чуть дальше от преобразования Пуассона, чем вы :-)
Самая первая же формула: вы определяете H как множество точек из A, которые принадлежат какой-то dB. Или я не прав? Что такое dB? Значек похож на частную производную, но что-то она сюда не клеится.
Далее градиент: если я правильно помню — это вектор частных производных, в данном случае функции B. Для извлечения частных производных вы использовали приближенные формулы. А потом, для нахождения длины вектора вы просто (?!) сложили его составляющие x и y вместо того, чтобы извлечь корень из суммы квадратов? Но, вероятно я чего-то не знаю…
Далее уравнение Пуассона: честно говоря, наверное, в универе я прогулял эту лекцию, пришлось курить Википедию. Некоторые мгновения смотрел сюда, но так и не смог понять, что и откуда вы взяли. Поясните, пожалуйста для несведущих: что, откуда, и главное — какой «физический смысл».
Спасибо!
В первой формуле dB означает дифференциал области B. Физический смысл означает границу области.
Смысл первой формулы — каждый пиксель изображения А, который лежит на границе B.
Далее градиент. В математики градиент это производная по направлению. В обработке изображений это по сути разность между пикселями, как правило градиент применяется для выделения границ. Способов вычисления градиента довольно много. Во второй формуле используется оператор Лапласа (по сути это сумма вторых производных).
Третья формула это уравнение для определенного пикселя, который нужно найти. Для каждого пикселя составляется уравнение и решается система. Если изображение B содержит 100x100 пикселей, то нам для восстановления картинки необходимо решить систему из 10000 уравнений. Физический смысл такой: у нас есть область из множества пикселей, известны значения пикселей на границе области и разность между соседними пикселями на всей области. Необходимо найти значения пикселей на всей области.
Смысл первой формулы — каждый пиксель изображения А, который лежит на границе B.
Далее градиент. В математики градиент это производная по направлению. В обработке изображений это по сути разность между пикселями, как правило градиент применяется для выделения границ. Способов вычисления градиента довольно много. Во второй формуле используется оператор Лапласа (по сути это сумма вторых производных).
Третья формула это уравнение для определенного пикселя, который нужно найти. Для каждого пикселя составляется уравнение и решается система. Если изображение B содержит 100x100 пикселей, то нам для восстановления картинки необходимо решить систему из 10000 уравнений. Физический смысл такой: у нас есть область из множества пикселей, известны значения пикселей на границе области и разность между соседними пикселями на всей области. Необходимо найти значения пикселей на всей области.
Есть сильное подозрение, что при попытке применения преобразования Пуассона к каждому каналу RGB (как предложено в статье), возникнут новые цвета (то есть те, которых даже близко не было в гаммах исходного и накладываемого изображений). Пример я приводил в комментариях к статье о фильтре Кувахара. К сожалению, с ходу картинки я не сгенерирую, но при зуме такие горячие пиксели должны быть заметны.
В качестве решения предлагаю применять преобразование, например, к HSV.
В качестве решения предлагаю применять преобразование, например, к HSV.
В случае с Кувахара вы были абсолютно правы. Однако, здесь я даже не могу представить каким образом они могут появиться. Восстановление идет по Лапласиану. т.е. Лапласианы до преобразования и после должны быть эквивалентны. В случае возникновения новых цветов в виде точечного шума, Лапласиан будет отличаться.
Насчет HSV, можно поэкспериментировать. На вскидку даже не скажу изменится изображение или нет.
Насчет HSV, можно поэкспериментировать. На вскидку даже не скажу изменится изображение или нет.
Что будет, если вклеить, скажем, яркое красное пятно с чёрной границей на равномерно зелёный фон? Насколько я понимаю, чёрный край станет зелёным, а красное пятно, соответственно, жёлтым. А если такое пятно вклеить в жёлтый фон, то в центре получится цвет 510:255:0 — красный окажется перенасыщенным.
Мда, погорячился я с HSV. Результат получается плохой что с RGB, что с HSV. Решатель СЛАУ справляется как может, но алгоритм принципиально не желает сохранять схожесть цветов внутри изображения (как Insty пишет выше). Более того, что меня совсем добивает, даже если объединить в одну систему уравнений RGB, чтобы минимизировать различия сразу по трём каналам, то это практически не улучшает результат.
Если с однородным фоном алгоритм справляется:
… то с неоднородным фоном цвет уползает в оттенки фона…
Вот получившийся код на Python (также там несколько вспомогательных изображений, для тех, кто хочет разобраться в алгоритме).
Может, на СЛАУ навесить ещё каких-нибудь ограничений? Или минимизировать какой-нибудь другой параметр, а не разницу в отдельных каналах?
Если с однородным фоном алгоритм справляется:
… то с неоднородным фоном цвет уползает в оттенки фона…
Вот получившийся код на Python (также там несколько вспомогательных изображений, для тех, кто хочет разобраться в алгоритме).
Может, на СЛАУ навесить ещё каких-нибудь ограничений? Или минимизировать какой-нибудь другой параметр, а не разницу в отдельных каналах?
По сути алгоритм так и должен работать. Если нужно сохранить цвета, то можно попробовать выделить внешний контур накладываемого изображения и решить СЛАУ для пикселей, находящихся вне контура. На самом контуре применить альфа-блендинг, а внутри контура цвета не менять. Но выделить внешний контур не так-то просто и не всегда возможно.
Вот тут пишут о применении преобразования Пуассона только на яркость (luminance), а затем минимизируют геодезическое (?) цветовое расстояние на границах. К сожалению, полной версии в открытом доступе нет, но я предполагаю, что можно минимизировать по одной из формул цветового отличия, например, градиентным спуском.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Применение преобразования Пуассона для бесшовного наложения изображений