Image Inpainting
Beim Bild-Inpainting werden maskierte, beschädigte oder entfernte Bildbereiche mit plausiblen Inhalten gefüllt. Zum Einsatz kommen klassische, patchbasierte, GAN- oder Diffusionsverfahren.
Bild-Inpainting ist die Aufgabe, einen maskierten Bereich eines Bildes mit Inhalt zu füllen, der sich in die Umgebung einfügt, etwa einen Kratzer, ein entferntes Objekt oder einen fehlenden Bildausschnitt. Jede Methode erhält zwei Eingaben: das Bild und eine binäre Maske, die die zu ersetzenden Pixel markiert. Alles außerhalb der Maske bleibt unverändert. Der Begriff stammt aus der Kunstrestaurierung, bei der Restaurierende beschädigte Gemälde retuschieren. Marcelo Bertalmío, Guillermo Sapiro, Vicent Caselles und Coloma Ballester übertrugen das Verfahren 2000 auf der SIGGRAPH in die digitale Computer Vision. Ihre Methode führte Linien gleicher Helligkeit vom Rand der Lücke in die Lücke hinein fort. Die Pixel unter der Maske sind unbekannt. Ein ausgefüllter Bereich ist daher immer eine plausible Erfindung und niemals eine Rekonstruktion dessen, was dort ursprünglich zu sehen war.
Klassische, patchbasierte und erlernte Methoden#
Klassische Verfahren breiten Farbe und Kanten von der Maskengrenze nach innen aus. OpenCV enthält zwei davon in seinem Inpainting-Modul: Alexandru Teleas Fast-Marching-Verfahren von 2004 (cv2.INPAINT_TELEA) und das Navier-Stokes-Verfahren von Bertalmío, Andrea Bertozzi und Sapiro aus dem Jahr 2001 (cv2.INPAINT_NS). Sie eignen sich gut für Staub, Kratzer und dünne Textüberlagerungen, erzeugen bei großen Löchern aber nur einen verschwommenen Schmierfleck. Das folgende Codebeispiel gibt Teleas Verfahren zweimal dieselbe Anzahl fehlender Pixel vor: einmal in Form dünner Kratzer und einmal als einzelnes Quadrat:
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")Es gibt einen mittleren Fehler von 9,1 Graustufen für 18.432 Kratzerpixel und 36,5 für einen Block mit 18.225 Pixeln aus. Jeder Kratzerpixel hat ein oder zwei Pixel entfernt bekannte Nachbarpixel, während die Mitte des Blocks 67 Pixel vom nächsten echten Pixel entfernt ist. Daher verursacht dieselbe Fehlfläche einen viermal so großen Fehler.
Patch-basierte Verfahren kopieren Texturen aus anderen Bildbereichen, statt sie zu glätten. Der exemplarbasierte Algorithmus von Antonio Criminisi, Patrick Pérez und Kentaro Toyama aus dem Jahr 2004 füllt ein Loch Patch für Patch, beginnend dort, wo starke Kanten hineinlaufen. Die PatchMatch-Suche nach ähnlichen Patches von Connelly Barnes und Kollegen (2009) machte den Ansatz schnell genug für die interaktive Nutzung; er bildet die Grundlage für Photoshops inhaltsbasierte Füllung. Patch-Verfahren eignen sich hervorragend für Gras, Ziegel und Himmel und versagen, wenn der fehlende Inhalt nirgendwo sonst im Bild vorkommt.
Gelerntes Modell erschließen Inhalte aus dem, was sie beim Training gesehen haben. Deepak Pathak und Kollegen trainierten mit den Context Encoders (CVPR 2016) ein neuronales Faltungsnetz mit einem adversarialen Loss, der von generativen adversarialen Netzwerken übernommen wurde, um einen maskierten mittleren Bildbereich zu ergänzen. LaMa von Samsung AI (WACV 2022) verwendet schnelle Fourier-Faltungen, deren rezeptives Feld bereits ab der ersten Schicht das gesamte Bild umfasst, und wird mit großen zufälligen Masken trainiert. Dadurch kann das Modell große Löcher und wiederkehrende Strukturen wie Zäune und Fenster ergänzen. Diffusionsmodelle füllen ein Loch, indem sie es anhand der sichtbaren Pixel und optional eines Prompts entrauschen. Inpainting-Checkpoints von Stable Diffusion geben dem U-Net fünf zusätzliche Eingabekanäle für die Maske und den latenten Raum des maskierten Bildes. RePaint von Andreas Lugmayr und Kollegen (CVPR 2022) verwendet ein unverändertes Diffusionsmodell und ersetzt den bekannten Bereich bei jedem Schritt durch eine verrauschte Kopie des Originals. Adobes Generative Fill führte 2023 promptgesteuertes Text-zu-Bild-Inpainting in Photoshop ein.
Masken und Objektentfernung#
Die Objektentfernung besteht aus Bildsegmentierung gefolgt von Inpainting: Eine Maske wählt das Objekt aus, und Inpainting füllt das dadurch entstandene Loch. Eng um ein Objekt gezogene Masken lassen dessen Randpixel, Schatten und Spiegelungen als Geisterbilder zurück. Daher erweitern Bildbearbeitungsprogramme die Maske um einige Pixel und beziehen den Schatten mit ein. Die Instanzsegmentierung erzeugt eine Maske pro Objekt und ist deshalb die übliche Quelle für Entfernungsmasken. Promptfähige Modelle wie Metas SAM 2 wandeln einen Klick in eine Maske für Objekte um, die nicht zu einer vorgegebenen Klassenliste gehören. YOLO26-Segmentierungsmodelle geben die Umrisse jedes Objekts als Polygon in result.masks.xy zurück. cv2.drawContours rasterisiert diese mit cv2.FILLED zu einer Inpainting-Maske – derselbe Schritt, den der Leitfaden zur Isolierung von Segmentierungsobjekten verwendet, um Objekte freizustellen.
Video-Inpainting bringt die zeitliche Dimension hinzu: Die Füllung muss über die Einzelbilder hinweg übereinstimmen, sonst flackert sie. Deshalb übertragen KI-Videobearbeitungs-Tools Masken mithilfe von Tracking und nutzen Hintergrundpixel, die durch die Bewegung der Kamera in benachbarten Einzelbildern sichtbar werden.
Verwandte Aufgaben#
- Outpainting: Verwendet dieselben Modelle, um ein Bild über seine ursprünglichen Ränder hinaus zu erweitern; der neue Bildbereich dient dabei als Maske.
- Superauflösung: Fügt dem gesamten Bild bei höherer Auflösung Details hinzu, ohne eine Maske zu verwenden.
- Entrauschen: Entfernt über alle Pixel verteiltes Rauschen, während die Szene erhalten bleibt – ebenfalls ohne Maske.
- Einzelbildinterpolation: Erzeugt aus den Einzelbildern auf beiden Seiten vollständige Zwischenbilder eines Videos.
Anwendungen und Herkunft#
Bei der Fotorestaurierung werden Risse, Staub und Sprünge in gescannten Abzügen maskiert. Bei der Filmrestaurierung geschieht dasselbe Einzelbild für Einzelbild, um Kratzer in Archivaufnahmen zu entfernen. Bei der Retusche und Produktfotografie werden störende Objekte, Stromleitungen und Makel entfernt. In der Satellitenbildanalyse ist das Schließen von Lücken ein klassisches Inpainting-Problem: Am 31. Mai 2003 fiel der Scan Line Corrector von Landsat 7 aus und hinterließ keilförmige Streifen, die etwa 22 Prozent jeder späteren Aufnahme bedecken.
Gelerntes Inpainting wird anhand zurückgehaltener Bilder mit synthetischen Masken bewertet. Für die Realitätsnähe wird die Fréchet-Inception-Distanz (FID) verwendet, denn eine gute Füllung kann sich von den Originalpixeln unterscheiden und trotzdem korrekt sein. Dieselbe Realitätsnähe macht Inpainting zu einem Werkzeug für Deepfakes und zum Entfernen von Wasserzeichen. In medizinischen, wissenschaftlichen oder forensischen Bildern kann eine erfundene Struktur eine Diagnose oder ein Urteil beeinflussen. Content Credentials halten solche Bearbeitungen in signierten Metadaten fest, und Adobe fügt sie Bildern hinzu, die mit Generative Fill bearbeitet wurden.










