Image Inpainting
La complétion d’image remplit les régions masquées, endommagées ou supprimées d’une image avec un contenu plausible, à l’aide de méthodes classiques, fondées sur des patches, des GAN ou la diffusion.
La restauration d’image consiste à remplir une région masquée d’une image, comme une rayure, un objet supprimé ou une zone manquante, avec du contenu qui se fond dans son environnement. Chaque méthode utilise deux entrées, l’image et un masque binaire indiquant les pixels à remplacer, et laisse inchangé tout ce qui se trouve à l’extérieur du masque. Le terme vient de la conservation de l’art, où les restaurateurs retouchent les peintures endommagées. Marcelo Bertalmío, Guillermo Sapiro, Vicent Caselles et Coloma Ballester ont transposé cette notion à la vision par ordinateur numérique à SIGGRAPH 2000, avec une méthode qui prolonge dans le trou les lignes d’égale luminosité depuis ses bords. Les pixels sous le masque étant inconnus, toute région restaurée est une invention plausible, jamais la récupération de ce qui s’y trouvait.
Méthodes classiques, fondées sur des patches et apprises#
Les méthodes classiques propagent la couleur et les contours vers l’intérieur à partir du bord du masque. OpenCV en propose deux dans son module d’inpainting : la méthode rapide de propagation frontale d’Alexandru Telea (2004) (cv2.INPAINT_TELEA) et la méthode de Navier-Stokes de Bertalmío, Andrea Bertozzi et Sapiro (2001) (cv2.INPAINT_NS). Elles fonctionnent bien pour la poussière, les rayures et les superpositions de texte fines, mais produisent un flou étalé dans les grandes zones vides. L’extrait ci-dessous fait traiter à la méthode de Telea deux fois le même nombre de pixels manquants, d’abord sous forme de fines rayures, puis sous forme d’un seul carré :
import cv2
import numpy as np
from skimage import data
image = cv2.cvtColor(data.astronaut(), cv2.COLOR_RGB2BGR) # 512x512 sample photo
# Two masks with about the same pixel count: thin scratches and one solid block
scratches = np.zeros(image.shape[:2], np.uint8)
for y in range(40, 512, 40):
cv2.line(scratches, (0, y), (511, y + 30), 255, thickness=2)
block = np.zeros_like(scratches)
side = int(np.sqrt(np.count_nonzero(scratches)))
block[200 : 200 + side, 200 : 200 + side] = 255
for name, mask in [("scratches", scratches), ("block", block)]:
restored = cv2.inpaint(image, mask, 3, cv2.INPAINT_TELEA)
# Mean error inside the mask, where every pixel was reconstructed
error = np.abs(restored.astype(int) - image.astype(int))[mask > 0].mean()
print(f"{name}: {np.count_nonzero(mask)} masked pixels, mean error {error:.1f} gray levels")Le programme affiche une erreur moyenne de 9,1 niveaux de gris pour 18 432 pixels de rayures et de 36,5 pour un bloc de 18 225 pixels. Chaque pixel rayé a des voisins connus à un ou deux pixels de distance, tandis que le centre du bloc se trouve à 67 pixels du pixel réel le plus proche : une même surface manquante entraîne donc une erreur quatre fois plus élevée.
Les méthodes par patch copient la texture d’une autre zone de l’image au lieu de la lisser. L’algorithme par exemplaires d’Antonio Criminisi, Patrick Pérez et Kentaro Toyama (2004) comble une zone vide patch par patch, en commençant là où des contours marqués la pénètrent. La recherche de patchs les plus proches PatchMatch, mise au point par Connelly Barnes et ses collègues (2009), a rendu cette approche suffisamment rapide pour une utilisation interactive ; elle est à la base du remplissage d’après le contenu de Photoshop. Les méthodes par patch excellent pour l’herbe, la brique et le ciel, mais échouent lorsque le contenu manquant n’apparaît nulle part ailleurs dans l’image.
Les modèles entraînés déduisent le contenu à partir de ce qu’ils ont vu pendant l’entraînement. Les Context Encoders de Deepak Pathak et ses collègues (CVPR 2016) ont entraîné un réseau neuronal convolutif avec une perte adversariale, empruntée aux réseaux antagonistes génératifs, pour compléter une région centrale masquée. LaMa de Samsung AI (WACV 2022) utilise des convolutions de Fourier rapides, dont le champ réceptif couvre toute l’image dès la première couche, et s’entraîne sur de grands masques aléatoires : il complète donc les grands trous et les structures répétitives comme les clôtures et les fenêtres. Les modèles de diffusion comblent un trou en le débruitant à partir des pixels visibles et, éventuellement, d’une invite : les points de contrôle d’inpainting de Stable Diffusion ajoutent cinq canaux d’entrée au U-Net pour le masque et le latent de l’image masquée, tandis que RePaint d’Andreas Lugmayr et ses collègues (CVPR 2022) utilise un modèle de diffusion non modifié et remplace, à chaque étape, la région connue par une copie bruitée de l’original. Generative Fill d’Adobe a intégré l’inpainting texte-vers-image guidé par invite à Photoshop en 2023.
Masques et suppression d’objets#
La suppression d’objets consiste à effectuer une segmentation d’image, puis un inpainting : un masque sélectionne l’objet et l’inpainting remplit le trou laissé par l’objet. Les masques tracés au plus près des objets laissent derrière eux leurs pixels de bord, leur ombre et leur reflet, qui forment un fantôme ; les éditeurs dilatent donc le masque de quelques pixels et l’étendent sur l’ombre. La segmentation d’instances produit un masque par objet, ce qui en fait la source habituelle des masques de suppression. Les modèles interrogeables par invite, comme SAM 2 de Meta, transforment un clic en masque pour les objets absents de toute liste de classes. Les modèles de segmentation YOLO26 renvoient le contour de chaque objet sous forme de polygone dans result.masks.xy ; cv2.drawContours le rasterise avec cv2.FILLED pour créer un masque d’inpainting, comme dans le guide d’isolement des objets par segmentation.
L’inpainting vidéo ajoute la dimension temporelle : le remplissage doit rester cohérent d’une image à l’autre, sinon il scintille. Les outils de montage vidéo par IA propagent donc les masques par suivi et récupèrent les pixels d’arrière-plan révélés dans les images voisines lorsque la caméra bouge.
Tâches associées#
- Outpainting : Utilise les mêmes modèles pour étendre une image au-delà de ses bordures d’origine, la nouvelle zone du canevas servant de masque.
- Super-résolution : Ajoute des détails à l’ensemble de l’image en augmentant sa résolution, sans masque.
- Débruitage : Supprime le bruit réparti sur chaque pixel tout en préservant la scène, là encore sans masque.
- Interpolation d’images : Synthétise des images intermédiaires complètes d’une vidéo à partir des images qui les précèdent et les suivent.
Applications et provenance#
La restauration de photos masque les fissures, la poussière et les déchirures des tirages numérisés ; la restauration de films fait de même image par image pour les rayures sur les séquences d’archives. La retouche et la photographie de produits suppriment les objets parasites, les lignes électriques et les imperfections. En analyse d’images satellite, le comblement des lacunes est un problème classique d’inpainting : le correcteur de lignes de balayage de Landsat 7 est tombé en panne le 31 mai 2003, laissant des bandes en forme de coin qui couvrent environ 22 % de chaque scène ultérieure.
L’inpainting par apprentissage est évalué sur des images mises de côté avec des masques synthétiques, à l’aide de la distance de Fréchet Inception (FID) pour mesurer le réalisme, car un bon remplissage peut différer des pixels d’origine tout en restant correct. Ce même réalisme fait de l’inpainting un outil pour les hypertrucages et la suppression de filigranes ; dans les images médicales, scientifiques ou médico-légales, une structure inventée peut modifier un diagnostic ou un verdict. Les Content Credentials consignent ces retouches dans des métadonnées signées, et Adobe les associe aux images modifiées avec Generative Fill.










