Придание машинам способности к галлюцинациям.
Мы все были в сценарии, когда мы хотели реализовать некоторые визуальные трюки без использования Photoshop, избавиться от надоедливых водяных знаков, удалить кого-то, кто сфотографировал вашу идеальную фотографию, которая «могла бы быть», или отремонтировать старую изношенную фотографию. это вам очень дорого. Что, если бы я сказал вам, что вы можете достичь этих желаний с помощью Image Inpainting? Заинтригованы? Давайте приступим.
Что такое Inpainting изображения?
Image Inpainting - это процесс сохранения изображений и восстановления изображений путем восстановления их поврежденных частей. Этот процесс обычно выполняется вручную в музеях профессиональными художниками, но с появлением современных методов глубокого обучения вполне возможно отремонтировать эти фотографии в цифровом виде. Кроме того, с помощью Image Inpainting также можно удалить ненужные объекты.
Есть много техник для выполнения перерисовки изображений. Традиционно для этого существует два подхода: на основе диффузии и на основе образцов. Подход, основанный на диффузии, распространяет локальные структуры на неизвестные части, в то время как подход на основе примеров строит недостающие пиксели по одному, сохраняя согласованность с пикселями соседства. Эти подходы терпят неудачу, когда размер недостающей части велик, отсюда необходимость в глубоких нейронных сетях для добавления дополнительного компонента, обеспечивающего правдоподобное воображение.
Здесь мы будем использовать OpenCV, библиотеку с открытым исходным кодом для компьютерного зрения, чтобы сделать то же самое.
В библиотеке OpenCV есть 2 алгоритма:
- cv2.INPAINT_TELEA
- 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) основан на гидродинамике и использует уравнения в частных производных. Он перемещается по краям из известных регионов в неизвестные (потому что края должны быть непрерывными), тем самым восстанавливая новые возможные края. Он продолжает изофоты (линии, соединяющие точки с одинаковой интенсивностью, похожие на контуры), сопоставляя векторы градиента на границе области рисования. Для этого используются некоторые методы из гидродинамики. Как только они получены, они заполняются цветом, чтобы уменьшить минимальную дисперсию в этой области.
В этом методе необходимо удовлетворить два ограничения:
- Сохранить градиенты (элементы, похожие на края)
- Продолжайте распространять информацию о цвете в гладких областях
Чтобы алгоритм OpenCV работал, нам нужно предоставить два изображения:
- Входное изображение, которое нужно раскрасить
- Замаскируйте изображение того же размера, что и входное изображение, которое указывает местоположение поврежденной части (нулевые пиксели (темные) - это «нормальные», ненулевые пиксели (белые) - это область, которую нужно закрасить)
Я создал изображение маски вручную с помощью фоторедактора GIMP. Вы можете использовать любой фоторедактор.
Код
Результаты
Заключение
В этой статье я представил концепцию Inpainting и традиционную технику с использованием OpenCV. Несмотря на ручное вмешательство, требуемое OpenCV для создания изображения маски, оно служит введением в основы Inpainting, как это работает и какие результаты мы можем ожидать. Мы можем ожидать лучших результатов, используя подходы, основанные на глубоком обучении, такие как сверточные нейронные сети (CNN) и генеративные состязательные сети (GAN), которые могут привести к идеально окрашенным изображениям.
Пожалуйста, обратитесь к this для дальнейшего чтения.
Ссылки:
Не стесняйтесь вносить любые предложения!
Вы можете связаться со мной в LinkedIn.