Image Inpainting
Узнай, как дорисовывание изображений восстанавливает или удаляет контент с помощью масок, сегментации, OpenCV, YOLO26 и генеративных моделей, а также изучи ключевые сценарии применения и ограничения.
Дорисовка изображений — это метод компьютерного зрения, который восстанавливает пропущенные, поврежденные или намеренно замаскированные участки изображения так, чтобы заполненная область сочеталась с ее окружением. Вместо того чтобы просто закрывать ненужные пиксели, система дорисовки оценивает правдоподобный заменяющий контент по соседней текстуре, структуре сцены и, в генеративных системах, изученным визуальным паттернам. Распространенные цели включают восстановление поврежденных фотографий, удаление объектов или текста и заполнение пробелов, созданных при редактировании изображений.
Как работает дорисовка изображений#
Рабочий процесс дорисовки обычно имеет два входных параметра: исходное изображение и маску, определяющую пиксели для замены. Система сохраняет пиксели за пределами маски, синтезируя или восстанавливая контент внутри нее. Соглашения о масках различаются в зависимости от инструмента, поэтому разработчики должны убедиться, представляют ли белые, черные, нулевые или ненулевые пиксели редактируемую область.
Традиционные методы компьютерного зрения распространяют цвета, границы и текстуры внутрь от границы маски. Например, рабочий процесс дорисовки изображений OpenCV заполняет замаскированные области с помощью соседних пикселей и предлагает алгоритмы, предназначенные для продолжения окружающих структур. Эти подходы эффективны и часто хорошо работают для царапин, пыли, тонкого текста и небольших отверстий. (docs.opencv.org)
Системы на основе обучения выводят контекст более высокого уровня. Модель может распознать, что замаскированная область находится на кирпичной кладке, траве, одежде или лице человека, и сгенерировать контент, соответствующий этой интерпретации. Однако результат является правдоподобным, а не восстановлением неизвестных исходных пикселей.
Маски и подходы моделей#
Качество маски сильно влияет на результат. Слишком маленькая маска может оставить края объектов или тени, в то время как слишком большая маска удаляет полезный контекст. Точные маски можно создавать вручную или генерировать с помощью сегментации изображений. Сегментация экземпляров особенно полезна, так как она создает отдельную маску на уровне пикселей для каждого объекта.
Документация Ultralytics SAM 2 описывает сегментацию по точкам и боксам для интерактивного выбора объекта. Для известных классов объектов задача сегментации Ultralytics YOLO возвращает маски объектов и координаты многоугольников. Команды также могут создавать и уточнять маски многоугольников с помощью редактора аннотаций платформы Ultralytics, который поддерживает ручную аннотацию, а также аннотацию с помощью SAM и YOLO.
Несколько семейств моделей могут выполнять фактическое заполнение:
- Классические методы расширяют соседние пиксели, контуры или плавные паттерны интенсивности. API восстановления scikit-image включает бигармоническую дорисовку для замаскированных областей.
- Генеративно-состязательные сети учатся создавать визуально реалистичные завершения посредством конкуренции между сетями генератора и дискриминатора.
- Диффузионные модели итеративно преобразуют шум внутри маски в контент, обусловленный видимым изображением и, опционально, текстовым промптом.
Дорисовка изображений в сравнении со связанными задачами#
Дорисовка определяется локализованной заменой. Связанные задачи имеют другие цели:
- Удаление объектов — это приложение дорисовки: сегментация выбирает объект, а дорисовка заполняет образовавшееся отверстие.
- Сегментация изображений определяет, какие пиксели принадлежат объекту или классу, но не заменяет их.
- Удаление шума уменьшает распространенный шум, при этом в целом сохраняя контент сцены.
- Внешняя дорисовка расширяет контент за пределы исходного холста, а не восстанавливает внутреннюю область. Руководство по редактированию изображений на основе масок Google Cloud различает вставку, удаление, расширение и замену контента.
- Сверхразрешение увеличивает разрешение и детализацию изображения вместо нацеливания на определяемую пользователем маску.
Удаление текста следует тому же рабочему процессу, что и удаление объектов. Текст маскируется, после чего система предсказывает скрытый фон. Если текст закрывает уникальное лицо, символ или деталь документа, исходную информацию невозможно надежно восстановить.
Практические применения#
Очистка изображений товаров в розничной торговле: Онлайн-продавец может сегментировать случайный кабель, отражение, опорную стойку или фоновый объект с фотографии продукта и дорисовать эту область. Небольшие дефекты могут подойти для функции заливки с учетом содержимого Adobe, в то время как инструменты генеративного редактирования изображений Adobe могут обрабатывать более крупные и семантически сложные регионы. (helpx.adobe.com)
Восстановление изображений: Архивы и команды по работе с изображениями могут маскировать царапины, пылевые пятна, дефекты датчиков или пропущенные пиксели на отсканированных фотографиях и кадрах микроскопии. Это может улучшить читаемость и презентабельность, но реконструированные области не следует рассматривать как наблюдаемые свидетельства. На медицинских, научных или криминалистических изображениях вымышленная структура может изменить интерпретацию и должна быть четко задокументирована.
Практический рабочий процесс и ограничения#
Следующий пример использует YOLO26 для создания маски человека и OpenCV для заполнения этой области. Установите зависимости с помощью pip install ultralytics opencv-python numpy.
import cv2
import numpy as np
from ultralytics import YOLO
model = YOLO("yolo26n-seg.pt")
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
# Select the first detected person and convert its polygon to a mask.
class_ids = result.boxes.cls.cpu().numpy().astype(int)
person_index = next(i for i, class_id in enumerate(class_ids) if class_id == 0)
contour = result.masks.xy[person_index].astype(np.int32)
contour = contour.reshape(-1, 1, 2)
image = result.orig_img.copy()
mask = np.zeros(image.shape[:2], dtype=np.uint8)
cv2.drawContours(mask, [contour], -1, 255, cv2.FILLED)
inpainted = cv2.inpaint(image, mask, 3, cv2.INPAINT_TELEA)
cv2.imwrite("inpainted.jpg", inpainted)Это сочетает локализацию объектов с задокументированным паттерном для создания масок из контуров сегментации. Классическое заполнение может испытывать трудности с большими объектами, повторяющейся геометрией, тенями, отражениями или лицами. Генеративные методы справляются с более широким контекстом, но могут привносить вымышленные детали. Сохраняйте оригинал, проверяйте границы в полном разрешении и записывайте значительные изменения с помощью механизмов происхождения, таких как учетные данные содержимого C2PA, особенно когда важна подлинность. Руководство NIST по прозрачности синтетического контента также подчеркивает происхождение и маркировку как важные средства защиты для значимо измененных медиафайлов. (c2pa.org)






