Как работает Content-Aware fill? - PullRequest
27 голосов
/ 27 марта 2010

В следующей версии Photoshop есть функция под названием Content-Aware fill.

Эта функция заполняет выделение изображения на основе окружающего изображения - до такой степени, что оно может генерировать кусты и облака, в то же время сохраняя целостность с окружающим изображением.

См. http://www.youtube.com/watch?v=NH0aEp1oDOI для предварительного просмотра функции Photoshop, о которой я говорю.

Мой вопрос: Как эта функция работает алгоритмически?

Ответы [ 7 ]

34 голосов
/ 23 апреля 2014

Я являюсь соавтором статьи PatchMatch, упомянутой здесь ранее, и руководил разработкой оригинальной функции наполнения контентом в Photoshop вместе с Иваном Каверо Белонде и Эли Шехтманом в лаборатории творческих технологий и Джеффом Чиен в команде Photoshop.

Контентно-зависимая заливка в Photoshop использует высокооптимизированный многопоточный вариант алгоритма, описанного в документе PatchMatch, и более старый метод, называемый SpaceTime Video Completion. Обе статьи цитируются на следующей технологической странице для этой функции:

http://www.adobe.com/technology/projects/content-aware-fill.html

Подробнее о нас можно узнать на веб-страницах Adobe Research.

13 голосов
/ 28 марта 2010

Я предполагаю, что для более мелких отверстий они захватывают аналогично текстурированные участки, окружающие область, чтобы заполнить его. Это описано в статье под названием " PatchMatch: рандомизированный алгоритм соответствия для структурного редактирования изображений"Коннелли Барнсом и другими в SIGGRAPH 2009. Для больших отверстий они могут использовать большую базу данных изображений с похожей глобальной статистикой или текстурой, как описано в" Завершение сцены с использованием миллионов фотографий". Если бы они каким-то образом могли соединить их вместе, я думаю, что это должно работать как в видео.

8 голосов
/ 28 марта 2010

Существует очень похожий алгоритм для GIMP в течение довольно длительного времени. Он называется resynthesizer , и, вероятно, вы сможете найти его источник (возможно, на сайте проекта )

EDIT
Есть также источник, доступный в хранилище Ubuntu
И здесь вы можете увидеть обработку тех же изображений с GIMP: http://www.youtube.com/watch?v=0AoobQQBeVc&feature=related

4 голосов
/ 28 марта 2010

Ну, они не собираются рассказывать по очевидным причинам. Общее название для техники "inpainting", вы можете посмотреть это.

В частности, если вы посмотрите на то, что Криминиси делал в Microsoft http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.67.9407 и что сейчас делает Тодор Георгиев в Adobe http://www.tgeorgiev.net/Inpainting.html,, вы сможете сделать очень хорошее предположение. Я бы сказал, 90%, что должно быть достаточно.

2 голосов
/ 29 марта 2010

Я работаю над аналогичной проблемой. Из того, что я прочитал, они используют "PatchMatch" или "непараметрическую выборку патчей" в целом.

PatchMatch: рандомизированный алгоритм соответствия для структурного редактирования изображений

1 голос
/ 06 сентября 2010

Общий подход называется вырезанием шва. Группа Ариэля Шамира ответственна за основную работу здесь, которая была представлена ​​на SIGGRAPH 2007. См .: http://www.faculty.idc.ac.il/arik/site/subject-seam-carve.asp

0 голосов
/ 28 марта 2010

В качестве предположения (и это все, что было бы) я ожидал, что он выполняет некоторый частотный анализ (например, преобразование Фурье) изображения. Глядя только на изображение на краю выделения и игнорируя середину, оно может затем экстраполироваться обратно в середину. Если дизайнеры выбирают правильный цвет равнин, а что нет, они должны иметь возможность генерировать текстуру, которая плавно вписывается в изображение по краям.


редактировать: глядя на последний пример в видео; если вы посмотрите на верхнюю часть исходного изображения по обоим краям, то увидите, что линия выделения проходит вниз по «пробелу» в облаках и что прямо посередине происходит «выпуклость». Это те артефакты, которые я ожидаю увидеть, если мои предположения верны. (OTOH, я также ожидал бы увидеть их, если бы он использовал какое-то sudo-mirroring через границу выделения.)

...