Придание машинам способности к галлюцинациям.

Мы все были в сценарии, когда мы хотели реализовать некоторые визуальные трюки без использования Photoshop, избавиться от надоедливых водяных знаков, удалить кого-то, кто сфотографировал вашу идеальную фотографию, которая «могла бы быть», или отремонтировать старую изношенную фотографию. это вам очень дорого. Что, если бы я сказал вам, что вы можете достичь этих желаний с помощью Image Inpainting? Заинтригованы? Давайте приступим.

Что такое Inpainting изображения?

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

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

Здесь мы будем использовать OpenCV, библиотеку с открытым исходным кодом для компьютерного зрения, чтобы сделать то же самое.

В библиотеке OpenCV есть 2 алгоритма:

  1. cv2.INPAINT_TELEA
  2. cv2.INPAINT_NS
cv2.inpaint(src, inpaintMask, dst, inpaintRadius, flags)
1. src: Input 8-bit 1-channel or 3-channel image.
2. inpaintMask: Inpainting mask image
3. dst: Output image
4. inpaintRadius: Radius of a circular neighborhood of each point inpainted that is considered by the algorithm
5. flags: Algorithm to be used - INPAINT_TELEA or INPAINT_NS

Метод Telea основан на методе быстрого перехода, в котором алгоритм начинается с границы окрашиваемой области и идет внутрь области, постепенно заполняя ее сначала. Каждый новый создаваемый пиксель определяется нормализованной взвешенной суммой пикселей его окружения. Выбор весов важен, поскольку больший вес придается тем пикселям, которые находятся в непосредственной близости от точки, то есть рядом с границей. Как только пиксель окрашен, он перемещается к ближайшему пикселю с помощью метода быстрого перехода. Этот алгоритм работает как эвристическая операция, выполняемая вручную.

Метод быстрого марша

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

Этот метод используется для решения краевых задач уравнения Эйконала:

где F (x) - функция скорости в нормальном направлении в точке x на граничной кривой. T - время, в которое контур пересекает точку x, которая получается путем решения уравнения.

Метод Навье-Стокса (NS) основан на гидродинамике и использует уравнения в частных производных. Он перемещается по краям из известных регионов в неизвестные (потому что края должны быть непрерывными), тем самым восстанавливая новые возможные края. Он продолжает изофоты (линии, соединяющие точки с одинаковой интенсивностью, похожие на контуры), сопоставляя векторы градиента на границе области рисования. Для этого используются некоторые методы из гидродинамики. Как только они получены, они заполняются цветом, чтобы уменьшить минимальную дисперсию в этой области.

В этом методе необходимо удовлетворить два ограничения:

  1. Сохранить градиенты (элементы, похожие на края)
  2. Продолжайте распространять информацию о цвете в гладких областях

Чтобы алгоритм OpenCV работал, нам нужно предоставить два изображения:

  1. Входное изображение, которое нужно раскрасить
  2. Замаскируйте изображение того же размера, что и входное изображение, которое указывает местоположение поврежденной части (нулевые пиксели (темные) - это «нормальные», ненулевые пиксели (белые) - это область, которую нужно закрасить)

Я создал изображение маски вручную с помощью фоторедактора GIMP. Вы можете использовать любой фоторедактор.

Код

Результаты

Заключение

В этой статье я представил концепцию Inpainting и традиционную технику с использованием OpenCV. Несмотря на ручное вмешательство, требуемое OpenCV для создания изображения маски, оно служит введением в основы Inpainting, как это работает и какие результаты мы можем ожидать. Мы можем ожидать лучших результатов, используя подходы, основанные на глубоком обучении, такие как сверточные нейронные сети (CNN) и генеративные состязательные сети (GAN), которые могут привести к идеально окрашенным изображениям.

Пожалуйста, обратитесь к this для дальнейшего чтения.

Ссылки:



Не стесняйтесь вносить любые предложения!

Вы можете связаться со мной в LinkedIn.