В популярном программном обеспечении для редактирования изображений есть функция, которая исправляет (термин, используемый при обработке изображения, обозначает, что @ mınxomaτ указывает) выбранную область изображения, основываясь на информации вне этого исправления. И это делает неплохую работу, учитывая, что это просто программа. Как человек, вы можете иногда видеть, что что-то не так, но если вы сжимаете глаза или просто смотрите коротко, патч, кажется, заполняет пробел довольно хорошо.
Вызов
Учитывая изображение и маску, которая задает прямоугольную область изображения, должны быть исправлены (также как изображение, или любой другой предпочтительный формат), ваша программа должна попытаться заполнить указанную область исправлением, которое пытается смешаться с остальными изображение. Программа не может использовать информацию исходного изображения, которая была в указанной области.
Вы можете предположить, что патч всегда имеет по крайней мере ширину от сторон и высоту от верха и низа изображения. Это означает, что максимальная площадь патча составляет 1/9 от всего изображения.
Пожалуйста, добавьте краткое описание того, как работает ваш алгоритм.
голосование
Избирателей просят судить, насколько хорошо работают алгоритмы, и голосовать соответственно.
Несколько советов о том, как судить: (Опять же, спасибо @ mınxomaτ за еще несколько критериев.)
- Если вы косите глаза и картинка выглядит хорошо?
- Вы можете точно сказать, где патч?
- Насколько хорошо сохраняются структуры и текстуры от фона изображения и окружающей области?
- Сколько ложных цветных пикселей содержит отредактированная область?
- Есть ли какие-либо однородно окрашенные капли / блоки в этой области, которые, кажется, там не принадлежат?
- Имеет ли редактируемая область какие-либо резкие изменения цвета / контраста или яркости по сравнению с остальной частью изображения?
Критерий достоверности
Для того чтобы отправка была действительной, выходное изображение должно точно соответствовать входному изображению за пределами указанной области.
Прецедент
Слева исходное изображение, справа соответствующая маска:
inpaint.exe left top width height img.jpg
)?Ответы:
AutoIt , VB
Введение
Это реализация алгоритма удаления объектов с помощью наглядного примера , разработанного А. Криминиси, П. Пересом (Cambridge Microsoft Research Ltd.) и К. Тоямой (Microsoft) [X] . Этот алгоритм предназначен для высокоинформативных изображений (и видеокадров) и призван обеспечить баланс между структурной реконструкцией и органической реконструкцией. Параграфы этого ответа содержат полнотекстовые цитаты из оригинального документа (поскольку он больше не является официально доступным), чтобы сделать этот ответ более автономным.
Алгоритм
Цель : заменить выбранную ( замаскированную ) область (предпочтительно визуально отделенный объект переднего плана) визуально правдоподобными фонами.
В предыдущей работе несколько исследователей рассматривали синтез текстур как способ заполнения больших областей изображения «чистыми» текстурами - повторяющимися двумерными текстурными узорами с умеренной стохастичностью. Это основано на большом количестве исследований по синтезу текстур, которые стремятся воспроизвести текстуру до бесконечности , учитывая небольшой исходный образец чистой текстуры [1] [8] [9] [10] [11] [12] [14] [15] [16] [19] [22] .
Как бы ни были эффективны эти методы в воспроизведении непротиворечивой текстуры, им трудно заполнить дыры в фотографиях реальных сцен, которые часто состоят из линейных структур и составных текстур - множественных текстур, взаимодействующих пространственно [23] . Основная проблема заключается в том, что границы между областями изображения являются сложным продуктом взаимного влияния различных текстур. В отличие от двумерной природы чистых текстур, эти границы образуют то, что можно рассматривать как более одномерные или линейные структуры изображения.
Image inpainting методы заполнения отверстий в изображениях путем распространения линейных структур ( так называемые изофот в inpainting литературе) в целевой области путем диффузии. Они основаны на дифференциальных уравнениях в частных производных физического теплового потока и убедительно работают как алгоритмы восстановления. Их недостаток в том, что процесс диффузии вносит некоторое размытие, что заметно.
Заполняемая область, т. Е. Целевая область, обозначена как Ω, а ее контур обозначен как δΩ. Контур эволюционирует внутрь по мере продвижения алгоритма, поэтому мы также называем его «фронтом заполнения». Исходная область Φ, которая остается фиксированной на протяжении всего алгоритма, предоставляет образцы, используемые в процессе заполнения. Теперь мы сосредоточимся на одной итерации алгоритма, чтобы показать, как структура и текстура адекватно обрабатываются при синтезе на основе примеров. Предположим, что квадратный шаблон Ψp ∈ Ω с центром в точке p (рис. 2b) должен быть заполнен. Образец с наилучшим соответствием из области источника получен из патча Ψqˆ ∈ Φ, который наиболее похож на те части, которые уже заполнены в Ψp. В примере на рис. 2б, мы видим, что если liesp лежит на продолжении края изображения, наиболее вероятные наилучшие совпадения будут лежать вдоль одного и того же (или одинаково окрашенного) края (например, Ψq 'и Ψq' 'на рис. 2c). Все, что требуется для распространения изофоты внутрь, - это простая передача паттерна из исходного патча с наилучшим соответствием (рис. 2d). Обратите внимание, что ориентация изофот автоматически сохраняется. На рисунке, несмотря на то, что исходное ребро не ортогонально целевому контуру δΩ, распространяющаяся структура сохранила ту же ориентацию, что и в исходной области.
Детали реализации и алгоритма
Функциональность этой реализации заключена в ActiveX COM DLL, которая отбрасывается из основной программы в виде двоичного файла, а затем вызывается на лету, вызывая inpainter по IID. В этом конкретном случае API написан на VisualBasic и может вызываться с любого языка с поддержкой COM. Следующий раздел кода удаляет двоичный файл:
Позже библиотека создается с использованием CLSID и IID:
Библиотека принимает дескриптор GDIOBJECT, в частности DIBSection любой битовой карты GDI / + (файлы, потоки и т. Д.). Указанный файл изображения загружается и рисуется на пустом растровом изображении, построенном из
Scan0
размеров входного изображения.Входным файлом для этой реализации является любой совместимый с GDI / + формат файла, содержащий данные маскированного изображения. Маска (ы) представляет собой один или более равномерно окрашенные области в входном изображении. Пользователь предоставляет значение цвета RGB для маски, только пиксели с точно таким значением цвета будут сопоставлены. Цвет маскирования по умолчанию - зеленый (0, 255, 0). Все замаскированные области вместе представляют целевую область, Ω, которая будет удалена и заполнена. Исходная область Φ определяется как все изображение за вычетом целевой области (Φ = I − Ω).
Далее, как и для всех примеров синтеза текстур на основе примеров [10] , необходимо указать размер окна шаблона Ψ (он же « радиус сканирования »). Эта реализация обеспечивает размер окна по умолчанию 6² пикселей, но на практике пользователь должен установить, чтобы он был немного больше, чем самый крупный различимый элемент текстуры, или «texel», в исходной области. Дополнительной модификацией исходного алгоритма является определяемый пользователем « размер блока », который определяет область пикселей, подлежащих замене новым однородным цветом. Это увеличивает скорость и снижает качество. Размеры блоков, превышающие 1px, предназначены для использования с чрезвычайно однородными участками (вода, песок, мех и т. Д.), Однако Ψ следует поддерживать на макс. .5x размер блока (который может быть невозможен в зависимости от маски).
Чтобы не останавливать алгоритм на 1-битных изображениях, каждый раз, когда принимается изображение с менее чем 5 цветами, размер окна увеличивается в 10 раз.
Как только эти параметры определены, оставшаяся часть процесса заполнения области полностью автоматическая. В нашем алгоритме каждый пиксель поддерживает значение цвета (или «пусто», если пиксель не заполнен) и значение достоверности, которое отражает нашу уверенность в значении пикселя и которое замораживается после заполнения пикселя. В ходе алгоритма патчам вдоль фронта заливки также присваивается временное значение приоритета, которое определяет порядок их заполнения. Затем наш алгоритм повторяет следующие три шага, пока все пиксели не будут заполнены.
Шаг 1: Вычисление приоритетов патчей
Порядок заполнения имеет решающее значение для непараметрического синтеза текстуры [1] [6] [10] [13] . До сих пор фаворитом по умолчанию был метод «луковой кожуры», где целевая область синтезируется снаружи внутрь в концентрических слоях. Наш алгоритм выполняет эту задачу с помощью алгоритма наилучшего заполнения, который полностью зависит от значений приоритета, назначенных каждому патчу на фронте заполнения. Вычисление приоритета смещено к тем участкам, которые находятся на продолжении сильных краев и которые окружены пикселями высокой достоверности, эти пиксели являются границей, отмеченной значением -2. Следующий код пересчитывает приоритеты:
Для данного участка Ψp с центром в точке p для некоторого p ∈ δΩ (см. Рис. 3) его приоритет P (p) определяется как произведение вычисленной достоверности (
ComputeConfidence
или C (p) ) и члена данных (ComputeData
, или D (p) ), где, где
| Фр | - площадь Ψp, α - коэффициент нормализации (например, α = 255 для типичного изображения уровня серого), а np - единичный вектор, ортогональный фронту δΩ в точке p. Приоритет вычисляется для каждого патча границы с различными патчами для каждого пикселя на границе целевой области.
Реализовано как
Доверительный член C (p) можно рассматривать как меру количества надежной информации, окружающей пиксель p. Намерение состоит в том, чтобы сначала заполнить те патчи, у которых больше пикселей уже заполнено, с дополнительным предпочтением отдается пикселям, которые были заполнены рано (или которые никогда не были частью целевой области).
Это автоматически включает предпочтения определенных форм вдоль фронта заливки. Например, пятна, которые включают в себя углы и тонкие усики целевой области, будут иметь тенденцию заполняться первыми, так как они окружены большим количеством пикселей от исходного изображения. Эти патчи предоставляют более надежную информацию для сравнения. И наоборот, пятна на кончиках «полуостровов» заполненных пикселей, выступающих в целевой области, будут иметь тенденцию откладываться до тех пор, пока не будет заполнено больше окружающих пикселей. На приблизительном уровне термин C (p) of (1) приблизительно обеспечивает желательный порядок концентрического заполнения.
По мере заполнения пиксели во внешних слоях целевой области будут иметь тенденцию характеризоваться более высокими значениями достоверности и, следовательно, будут заполняться раньше; пиксели в центре целевой области будут иметь меньшие значения достоверности. Член данных D (p) является функцией силы изофот, ударяющих фронт δΩ на каждой итерации. Этот термин повышает приоритет патча, в который «перетекает» изофот. Этот фактор имеет фундаментальное значение в нашем алгоритме, потому что он стимулирует сначала синтезировать линейные структуры и, следовательно, безопасно распространяться в целевой области. Прерывистые линии имеют тенденцию соединяться, таким образом реализуя «Принцип связности» психологии зрения [7] [17] .
Порядок заполнения зависит от свойств изображения, что приводит к процессу органического синтеза, который устраняет риск появления артефактов с «нарушенной структурой», а также уменьшает блочные артефакты без дорогостоящего этапа обрезки пятен [9] или этапа смешивания с размытием [19]. ] .
Шаг 2: Распространение информации о структуре и структуре
Как только все приоритеты на фронте заливки ( границе ) были вычислены, найден патч Ψpˆ с наивысшим приоритетом. Затем мы заполняем его данными, извлеченными из области источника Φ. Мы распространяем текстуру изображения путем прямой выборки исходного региона. Подобно [10] , мы ищем в области источника тот патч, который наиболее похож на Ψpˆ. Формально,
, где
расстояние d (Ψa, Ψb) между двумя общими участками Ψa и Ψb просто определяется как сумма квадратов разностей (SSD) уже заполненных пикселей в двух участках. На этом этапе не проводится никакого дальнейшего анализа или манипуляций ( особенно без размытия ). Этот расчет выполняется в цикле основного цикла и реализуется следующим образом:
Получение максимального приоритета:
Нахождение самого похожего патча:
Шаг 3: Обновление значений достоверности
После того, как патч Ψpˆ заполнен новыми значениями пикселей, достоверность C (p) обновляется в области, ограниченной bypˆ, следующим образом:
Это простое правило обновления позволяет нам измерять относительную достоверность исправлений на фронте заливки без параметров, специфичных для изображения. По мере заполнения значения достоверности уменьшаются, что указывает на то, что мы менее уверены в цветовых значениях пикселей вблизи центра целевой области. Реализовано здесь (вместе со всеми другими необходимыми обновлениями):
Полный код
Вот исполняемый код, дополненный исходным кодом библиотек в качестве комментариев.
Код вызывается
Примеры включены в виде
просто раскомментируйте пример, который вы хотите запустить, используя CTRL+ Q.
Официальные тестовые файлы
Этот алгоритм сделан , чтобы быть отрегулирован для каждого изображения. Поэтому значения по умолчанию (а также маски по умолчанию) полностью неоптимальны. Значения по умолчанию выбираются таким образом, чтобы каждая выборка могла быть обработана за разумное количество времени. Я настоятельно рекомендую играть с масками неправильной формы и с лучшими размерами окон. Нажмите на изображение, чтобы увеличить!
шахматная доска
→
американская готика
→
Лабиринт
→
Мона Лиза
→
(ужасная маска)
Крик
→
звездный
→
Примеры из реального мира
Все они используют пользовательские нарисованные от руки маски.
Если у вас есть другие интересные изображения, которые вы хотели бы видеть включенными, оставьте комментарий.
EBII Улучшения
Существует множество вариантов EBII, созданных разными исследователями. AnkurKumar Patel привлек мое внимание своим сборником работ [24] по различным улучшениям EBII.
В частности, в статье « Улучшенный робастный алгоритм для наложения изображений на основе примеров » [25] упоминаются два улучшения взвешивания значений приоритетов.
Улучшение
Эффективная модификация находится на шаге 1 (см. Выше) алгоритма и расширяет эффект C (p) и D (p) на рейтинг приоритетов для этого пикселя, используя это:
В формуле для C и D , приведенный выше, и , соответственно , коэффициент нормализации (например, α = 255), то изофоте вектор, а единичный вектор , ортогональный к фронту в точке р.
В дальнейшем,
Функция приоритета определяется как весовая сумма регуляризованного доверительного члена C (p) и нового члена данных D (p) . Где α - поправочный коэффициент, удовлетворяющий 0Rp (p), определяется следующим образом:
Где α и β - соответственно веса компонентов доверительной вероятности и членов данных. Обратите внимание, что α + β = 1 .
Объективная оценка
Что действительно интересно, так это то, что эта статья содержит предложенный (и простой!) Метод оценки производительности алгоритмов EBII. Примите это с некоторой долей соли, поскольку этот метод выбран самими авторами статьи для проверки эффективности предложенного дисперсионного подхода и улучшения на нескольких изображениях.
Оценка результата выполняется путем сравнения PSNR (пикового отношения сигнал / шум [26] ) между восстановленным изображением и исходным изображением. Как правило, чем выше значение PSNR, тем больше сходство восстановленного изображения с оригиналом. Уравнение для расчета PSNR выглядит следующим образом:
Это потрясающие 2 (два!) Реальных тестовых изображения, которые они использовали:
Вывод столь же разочаровывающий, как и качество самой бумаги. Это показывает очень небольшое улучшение. Главное здесь - это возможный метод оценки объекта для такой задачи (и других задач по восстановлению изображения):
Мех.
Исследование должно быть сделано
(Специфично для EBII)
а) Предварительная обработка
Все сводится к принципу «волшебного стирания», согласно которому алгоритм должен «просто работать» для всего. Мое наивное решение для этого - усиление на основе цвета (см. Выше), но есть и лучшие способы. Я имею в виду распознавание среднего геометрического значения всех отслеживаемых текселей для автоматической настройки размера окна и зависимости размера штампа (а также моего улучшения) от разрешения текселей и целого изображения. Исследование должно быть сделано здесь.
б) постобработка
Первоначальные авторы уже проделали большую работу по устранению всех фильтров пост-обработки, которые приходят на ум. Сегодня я попробовал кое-что еще, вдохновленный всегда сверхъестественной Моной Лизой (спасибо подземный монорельс). Если вы возьмете только неокрашенную область и примените новую маску ко всем странным цветным блокам и добавите ее в алгоритм удаления пятен, вы получите почти идеальный результат. Я могу исследовать это когда-нибудь в будущем.
[X] - Удаление объектов путем рисования на основе образцов А. Криминиси, П. Перес, К. Тояма
[1] - М. Ашихмин. Синтез натуральных текстур. В учеб. ACM Symp. «Интерактивная трехмерная графика», стр. 217–226, Research Triangle Park, Северная Каролина, март 2001 г.
[5] - М. Бертальмио, Л. Весе, Г. Сапиро и С. Ошер. Одновременная структура и текстура изображения. появиться в 2002 году
[6] - Р. Борнард, Э. Лекан, Л. Лаборелли и Дж. Х. Шено. Отсутствует коррекция данных в неподвижных изображениях и последовательностях изображений. В ACM Multimedia, Франция, декабрь 2002 г.
[7] - Т. Ф. Чан и Дж. Шен. Нетекстурное окрашивание диффузиями, обусловленными искривлением (CDD). J. Visual Comm. Изображение Реп., 4 (12), 2001.
[8] - JS де Бонет. Процедура многократного отбора проб для анализа и синтеза текстурных изображений. В учеб. ACM Conf. Комп. Графика (SIGGRAPH), том 31, с. 361–368, 1997.
[9] - A. Efros и WT Freeman. Стегание изображений для синтеза и передачи текстур. В учеб. ACM Conf. Комп. Графика (SIGGRAPH), с. 341–346, Юджин Фиуме, август 2001 г.
[10] - А. Эфрос и Т. Люн. Синтез текстуры непараметрической выборкой. В учеб. ICCV, pp. 1033–1038, Kerkyra, Greece, Sep 1999.
[11] - WT Freeman, EC Pasztor и OT Carmichael. Изучение низкого уровня зрения. Int. J. Computer Vision, 40 (1): 25–47, 2000.
[12] - D. Garber. Вычислительные модели для анализа текстур и синтеза текстур. Кандидатская диссертация, Univ. Южной Калифорнии, США, 1981.
[13] - П. Харрисон. Неиерархическая процедура повторного синтеза сложной текстуры. В учеб. Int. Conf. Центральная Европа Comp. Графика, Visua. и комп. Видение, Пльзень, Чешская Республика, февраль 2001 г.
[14] - DJ Heeger и JR Bergen. Анализ / синтез текстур на основе пирамид. В учеб. ACM Conf. Комп. Графика (SIGGRAPH), том 29, с. 229-233, Лос-Анджелес, Калифорния, 1995.
[15] - А. Герцманн, К. Джейкобс, Н. Оливер, Б. Керлесс и Д. Салесин. Изображение аналогии. В учеб. ACM Conf. Комп. Графика (SIGGRAPH), Eugene Fiume, август 2001 г.
[16] - H. Igehy и L. Pereira. Замена изображения посредством синтеза текстур. В учеб. Int. Conf. Обработка изображений, с. III: 186–190, 1997.
[17] - Г. Канижа. Организация в Vision. Прегер, Нью-Йорк, 1979.
[19] - Л. Лян, К. Лю, Ю.-К. Сюй, Б. Го и Х.-Ю. Shum. Синтез текстур в реальном времени с помощью патч-сэмплирования. В ACM Транзакции на графике, 2001.
[22] - Л.-В. Вей и М. Левой. Быстрый синтез текстур с использованием древовидного векторного квантования. В учеб. ACM Conf. Комп. Графика (SIGGRAPH), 2000.
[23] - А. Залесный, В. Феррари, Г. Канен, Л. Ван Гул. Параллельный синтез композитных текстур. В текстурном семинаре 2002 года - (совместно с ECCV02), Копенгаген, Дания, июнь 2002 года.
[24] - AkurKumar Patel, Технологический университет Гуджарата, компьютерные науки и инженерия
[25] - Улучшенный надежный алгоритм для наглядного наложения изображений
[26] - Википедия, отношение пикового сигнала к шуму
источник
Matlab
Это простой интерполяционный подход. Идея состоит в том, чтобы сначала отразить то, что находится на каждой стороне патча. Затем эти пиксели зеркального отображения интерполируются по тому, насколько близко они находятся к соответствующему краю:
Сложно было найти хорошие интерполяционные веса. После некоторой игры я придумал рациональную функцию, которая равна нулю на всех гранях, кроме той, на которую мы отразили зеркальное отражение. Затем он преобразуется полиномом третьей степени для некоторого сглаживания:
Этот простой подход на удивление хорошо работает на «естественных» изображениях, но как только вы столкнетесь с острыми краями, игра закончится. В американском готическом примере шипы вилки сена хорошо сочетаются с пиксельной сеткой, что делает его довольно красивым, но в противном случае было бы намного хуже.
Итак, вот результаты:
И, наконец, код:
источник
Mathematica
Это использует
Inpaint
функцию Mathematica . Поскольку Mathematica сама выполняет всю тяжелую работу, это вики-сообщество.inPaint
(ниже) это простая адаптацияInpaint
. Для цветных картин / фотографий используется настройка по умолчанию «TextureSynthesis». Если он обнаруживает, что изображение является черно-белым (поскольку данные изображения изображения совпадают с данными изображения двоичной формы изображения), он затем преобразовывает изображение в двоичную форму и применяет исправление «TotalVariation».If
Пункт либо относитсяBinarize
илиIdentity
к изображению. (Identity
Функция возвращает свой аргумент без изменений.)Изображение и маска вводятся в качестве аргументов
inPaint
.Partition
иGrid
только для форматирования.Выходы были исправлены. После этого не было никакой ретуши изображений
inPaint
.источник
Inpaint
похоже, ищет симметрию по всему черно-белому изображению. - DavidC 9 часов назадPython 2 и PIL
Эта программа смешивает копии областей Север, Юг, Восток и Запад для создания замещающих пикселей, которые используют цвета, текстуры и штриховку из локальной области изображения.
Пример вывода:
Код сначала находит ограничивающую рамку для патча. Затем для каждого пикселя, который должен быть сгенерирован, он вычисляет цвет каждого канала (RGB) на основе взвешенной суммы 4 окружающих областей.
источник
Python 3, PIL
Эта программа использует оператор sobel и на этом основании рисует линии на изображении.
Оператор sobel находит угол каждого ребра, поэтому любые ребра, выталкиваемые в неизвестную область, должны продолжаться.
Между тем, вот примеры изображений.
Мона Лиза Мона Лиза Ḿ͠o̾̇a ̾̇Лиза Ḿ͠o̢̎̓̀ǹ̰͎̣aͧ̈ͤ ̣̖̠̮̘̹̠̾̇ͣЛиза Ḿ̳̜͇͓͠o̢̎̓̀ǹ̰͎̣͙a̤̩̖̞̝ͧ̈ͤͤ ̣̖̠̮̘̹̠̾̇ͣL͉̻̭͌i̛̥͕̱͋͌ş̠͔̏̋̀ạ̫͕͎ͨͮͪ̐͡ͅ
Область на изображении выше гладкая, как кактус
Это не очень хорошо с постоянным цветом.
источник
Python 2
Простой скрипт Python, который создает патч, используя значения из пикселей за пределами промежутка. Он берет значения цвета из конца строки и столбца пикселей и вычисляет средневзвешенное значение, используя расстояние от этих пикселей.
Вывод не такой красивый, но это искусство .
А затем код:
источник
Mathematica
Просто так получилось, что в Mathematica есть встроенная функция, которая выполняет именно эту задачу, и я имею в виду именно :
По умолчанию он использует «наилучший метод синтеза текстур с использованием случайной выборки», который дает хорошие результаты на рисунках, но плохие результаты для лабиринта и шахматной доски:
Игра с настройками не принесла мне увеличения качества по всем изображениям, поэтому я просто использовал значения по умолчанию (для сохранения байтов - это в
codegolf.se
конце концов!).источник
Binarize
(для устранения серых пятен). Попробуйте это:methods = {"TextureSynthesis", "Diffusion", "FastMarching", "NavierStokes", "TotalVariation"};g[pic_, mask_] := Join[{Labeled[Framed@pic, "Original"]}, Labeled[ Binarize@Inpaint[pic, mask, Method -> #], #] & /@ methods]
TextureSynthesis
хорошо смотрится на картинах; и я не думаю, что нам разрешено настраивать наши настройки для каждого отдельного теста. (Если бы мы могли, тогда мы могли бы тривиально представить недостающую часть как «сеттинг».)inPaint[picture_, mask_] := If[bw = ImageData@Rasterize[Binarize[picture]] == ImageData[picture], Binarize, Identity]@ Inpaint[picture, mask, Method -> If[bw, "TotalVariation", "TextureSynthesis"]]
python3
Этот ответ реализует идею в статье «Deep Image Prior» Ульянова и соавт. (CVPR 2018) В этой статье они исследовали идею о том, что хорошо спроектированные нейронные сети для обработки изображений тесно отражают нашу идею о том, как должно выглядеть естественное изображение («предыдущее» распределение).
Они предложили метод, который можно использовать для рисования, а также для удаления шума и артефактов, который просто использует данное изображение без обучения другим данным. Реальная концепция довольно проста: сеть обучается выводить желаемое изображение (для некоторого фиксированного случайного шума в качестве входных данных), штрафуя только ошибки за пределами заданной маски. Если вы хотите убрать шум, вам просто не нужно ничего маскировать, просто остановитесь на ранней стадии тренировки.
Для окрашивания вы маскируете часть, которую хотите закрасить, и обучаете до схождения. Это, конечно, не современное состояние, но я все еще хотел опубликовать, попробовать и опубликовать его здесь из-за простоты идеи и все еще замечательной производительности. В моих экспериментах рисование больших патчей не получалось так хорошо, но для небольших сегментов результаты могут быть намного более убедительными.
Я реализовал это, используя популярную архитектуру U-Net от jaxony на github . Код для обучения и обработки изображений можно найти ниже.
Тренировка
Это визуализация тренировочного процесса. Каждый кадр - это состояние определенного количества итераций:
Примеры
Код
Обратите внимание, что на процессоре для запуска одного изображения может потребоваться несколько часов, в то время как для хорошего gpu с поддержкой cuda может потребоваться намного меньше времени.
источник
Python с OpenCV
В OpenCV есть функция inpaint. Используются два типа рисования, я буду использовать метод быстрого марширования. Согласно документации, алгоритм работает так:
Вот код *:
Обратите внимание, как я конвертирую BGR в RGB для построения графиков. Кроме того, я вращаю его. Вот результаты:
Мона Лиза возвращается!
Как видите, я не лучший из двух цветовых.
источник
Ява
Подход усреднения цвета. Возможно, может быть улучшено.
Результаты:
источник