Image Inpainting
Scopri come l'impaginazione di immagini ripristina o rimuove contenuti usando maschere, segmentazione, OpenCV, YOLO26 e modelli generativi, oltre alle principali applicazioni e limitazioni.
L'image inpainting è una tecnica di visione artificiale che ricostruisce le regioni mancanti, danneggiate o intenzionalmente mascherate di un'immagine in modo che l'area completata si fonda con i dintorni. Invece di coprire semplicemente i pixel indesiderati, un sistema di inpainting stima contenuti sostitutivi plausibili dalla texture vicina, dalla struttura della scena e, nei sistemi generativi, dai pattern visivi appresi. Gli obiettivi comuni includono il ripristino di fotografie danneggiate, la rimozione di oggetti o testo e il riempimento di spazi vuoti creati durante la modifica delle immagini.
Come funziona l'Image Inpainting#
Un flusso di lavoro di inpainting ha solitamente due input: l'immagine originale e una maschera che identifica i pixel da sostituire. Il sistema preserva i pixel all'esterno della maschera sintetizzando o ricostruendo il contenuto all'interno di essa. Le convenzioni delle maschere variano a seconda dello strumento, quindi gli sviluppatori devono verificare se i pixel bianchi, neri, zero o non zero rappresentano la regione modificabile.
I metodi tradizionali di computer vision propagano colori, bordi e texture verso l'interno dal confine della maschera. Ad esempio, il OpenCV image inpainting workflow riempie le aree mascherate utilizzando i pixel vicini e offre algoritmi progettati per continuare le strutture circostanti. Questi approcci sono efficienti e spesso funzionano bene per graffi, polvere, testo sottile e piccoli fori. (docs.opencv.org)
I sistemi basati sull'apprendimento deducono un contesto di livello superiore. Un modello potrebbe riconoscere che un'area mascherata si trova su mattoni, erba, abbigliamento o sul volto di una persona e generare contenuti coerenti con tale interpretazione. Tuttavia, l'output è plausibile piuttosto che un recupero dei pixel originali sconosciuti.
Maschere e approcci dei modelli#
La qualità della maschera influisce fortemente sul risultato. Una maschera troppo piccola può lasciare dietro di sé bordi di oggetti o ombre, mentre una maschera sovradimensionata rimuove il contesto utile. Le maschere precise possono essere create manualmente o generate con la image segmentation. La Instance segmentation è particolarmente utile perché produce una maschera separata a livello di pixel per ogni oggetto.
La Ultralytics SAM 2 documentation descrive la segmentazione basata su punti e box per selezionare interattivamente un oggetto. Per classi di oggetti note, la Ultralytics YOLO segmentation task restituisce maschere di oggetti e coordinate dei poligoni. I team possono anche creare e perfezionare maschere poligonali con la Ultralytics Platform annotation editor, che supporta l'annotazione manuale, assistita da SAM e assistita da YOLO.
Diverse famiglie di modelli possono eseguire il riempimento effettivo:
- I metodi classici estendono pixel vicini, contorni o pattern di intensità uniformi. La scikit-image restoration API include l'inpainting biharmonico per le regioni mascherate.
- Le Generative adversarial networks imparano a produrre completamenti visivamente realistici attraverso la concorrenza tra reti generatrici e discriminatrici.
- I Diffusion models trasformano iterativamente il rumore all'interno della maschera in contenuto condizionato dall'immagine visibile e, facoltativamente, da un prompt testuale.
Image Inpainting vs Attività correlate#
L'inpainting è definito dalla sostituzione localizzata. Le attività correlate hanno obiettivi diversi:
- La rimozione degli oggetti è un'applicazione dell'inpainting: la segmentazione seleziona l'oggetto e l'inpainting riempie il buco risultante.
- La image segmentation identifica quali pixel appartengono a un oggetto o a una classe ma non li sostituisce.
- Il denoising riduce il rumore diffuso preservando generalmente il contenuto della scena.
- L'outpainting estende il contenuto oltre la tela originale anziché riparare una regione interna. La Google Cloud mask-based image editing guide distingue tra l'inserimento, la rimozione, l'espansione e la sostituzione di contenuti.
- La super-resolution aumenta la risoluzione e i dettagli dell'immagine invece di mirare a una maschera definita dall'utente.
La rimozione del testo segue lo stesso flusso di lavoro della rimozione degli oggetti. Il testo viene mascherato, quindi il sistema prevede lo sfondo oscurato. Se il testo copre un volto unico, un simbolo o un dettaglio del documento, le informazioni originali non possono essere recuperate in modo affidabile.
Applicazioni nel mondo reale#
Pulizia di immagini al dettaglio: Un venditore online può segmentare un cavo vagante, un riflesso, un supporto o un oggetto di sfondo da una fotografia di prodotto ed eseguire l'inpainting dell'area. I piccoli difetti possono essere adatti a Adobe Content-Aware Fill, mentre Adobe generative image editing può gestire regioni più grandi e semanticamente complesse. (helpx.adobe.com)
Ripristino delle immagini: Archivi e team di imaging possono mascherare graffi, punti di polvere, difetti del sensore o pixel mancanti in fotografie scansionate e fotogrammi di microscopia. Questo può migliorare la leggibilità e la presentazione, ma le aree ricostruite non dovrebbero essere trattate come prove osservate. Nelle immagini mediche, scientifiche o forensi, una struttura inventata potrebbe cambiare l'interpretazione e deve essere chiaramente documentata.
Flusso di lavoro pratico e limitazioni#
Il seguente esempio utilizza YOLO26 per creare una maschera di persona e OpenCV per riempire quella regione. Installa le dipendenze con 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)Questo combina la localizzazione degli oggetti con il pattern documentato per la building masks from segmentation contours. Il riempimento classico può avere difficoltà con oggetti grandi, geometria ripetitiva, ombre, riflessi o volti. I metodi generativi gestiscono un contesto più ampio ma possono introdurre dettagli fabbricati. Preserva l'originale, ispeziona i confini alla massima risoluzione e registra modifiche significative utilizzando meccanismi di provenienza come C2PA Content Credentials, soprattutto quando l'autenticità è importante. La NIST guidance on synthetic-content transparency sottolinea inoltre la provenienza e la etichettatura come importanti garanzie per i media significativamente alterati. (c2pa.org)






