Image Inpainting
Görüntü iç boyama, klasik, yama tabanlı, GAN veya difüzyon yöntemleriyle görüntünün maskelenmiş, hasarlı ya da kaldırılmış bölgelerini makul içeriklerle doldurur.
Görüntü içi tamamlama, çizik, kaldırılmış nesne veya eksik bir parça gibi görüntünün maskelenmiş bir bölgesini çevresiyle uyumlu içerikle doldurma işlemidir. Her yöntem iki girdi alır: görüntü ve değiştirilecek pikselleri işaretleyen ikili bir maske; maskenin dışındaki her şeyi olduğu gibi bırakır. Terim, restoratörlerin hasarlı tabloları rötuşladığı sanat koruma alanından gelir. Marcelo Bertalmío, Guillermo Sapiro, Vicent Caselles ve Coloma Ballester, 2000 SIGGRAPH'ta deliğin kenarındaki eş parlaklık çizgilerini deliğin içine doğru uzatan bir yöntemle bu kavramı dijital bilgisayarlı görü alanına taşıdı. Maskenin altındaki pikseller bilinmediğinden, tamamlanan bölge her zaman makul bir uydurmadır; orada ne bulunduğunun geri kazanımı değildir.
Klasik, Parça Tabanlı ve Öğrenilmiş Yöntemler#
Klasik yöntemler, rengi ve kenarları maskenin sınırından içeri doğru yayar. OpenCV, boyama modülünde bunlardan ikisini sunar: Alexandru Telea'nın 2004 tarihli hızlı ilerleme yöntemi (cv2.INPAINT_TELEA) ve Bertalmío, Andrea Bertozzi ve Sapiro'nun 2001 tarihli Navier-Stokes yöntemi (cv2.INPAINT_NS). Bu yöntemler toz, çizik ve ince metin katmanlarında iyi sonuç verir; büyük boşluklarda ise bulanık bir lekeye dönüşür. Aşağıdaki kod parçası, Telea'nın yöntemine iki kez aynı sayıda eksik piksel verir: birinde ince çizikler, diğerinde tek bir kare:
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")18.432 çizik pikseli için ortalama 9,1 gri düzey, 18.225 piksellik bir blok içinse 36,5 hata yazdırır. Her çizik pikselinin bir iki piksel uzaklıkta bilinen komşuları varken bloğun merkezi en yakın gerçek piksele 67 piksel uzaktadır; bu nedenle aynı büyüklükteki eksik alan dört kat hata oluşturur.
Yama tabanlı yöntemler, dokuyu yumuşatmak yerine görüntünün başka bir yerinden kopyalar. Antonio Criminisi, Patrick Pérez ve Kentaro Toyama'nın 2004 tarihli örnek tabanlı algoritması, güçlü kenarların boşluğa girdiği noktadan başlayarak boşluğu yama yama doldurur. Connelly Barnes ve çalışma arkadaşlarının 2009'da geliştirdiği PatchMatch en yakın yama araması ise bu yaklaşımı etkileşimli kullanım için yeterince hızlı hâle getirdi; bu yaklaşım Photoshop'un İçeriğe Duyarlı Dolgu özelliğinin temelini oluşturur. Yama yöntemleri çimen, tuğla ve gökyüzünde başarılıdır; eksik içerik görüntünün başka hiçbir yerinde yoksa başarısız olur.
Öğrenilmiş modeller, eğitim sırasında gördüklerinden yola çıkarak içeriği çıkarımlar. Deepak Pathak ve çalışma arkadaşlarının Context Encoders (CVPR 2016) çalışması, maskelenmiş merkez bölgeyi tamamlamak için evrişimli bir sinir ağını üretici çekişmeli ağlardan alınan çekişmeli bir kayıpla eğitti. Samsung AI'ın LaMa modeli (WACV 2022), alıcı alanı ilk katmandan itibaren tüm görüntüyü kapsayan hızlı Fourier evrişimlerini kullanır ve büyük rastgele maskelerle eğitilir; bu sayede büyük boşlukları ve çitler ile pencereler gibi yinelenen yapıları tamamlar. Difüzyon modelleri, görünür piksellere ve isteğe bağlı olarak bir isteme koşullandırılmış gürültü giderme yoluyla boşluğu doldurur: Stable Diffusion boyama kontrol noktaları, maske ve maskelenmiş görüntünün gizil temsili için U-Net'e beş ek giriş kanalı verir; Andreas Lugmayr ve çalışma arkadaşlarının RePaint modeli (CVPR 2022) ise değiştirilmemiş bir difüzyon modeli kullanır ve her adımda bilinen bölgeyi orijinal görüntünün gürültü eklenmiş bir kopyasıyla değiştirir. Adobe'un Generative Fill özelliği, istemle yönlendirilen metinden görüntüye boyamayı 2023'te Photoshop'a getirdi.
Maskeler ve Nesne Kaldırma#
Nesne kaldırma, görüntü segmentasyonunun ardından boyama yapmaktır: maske nesneyi seçer, boyama ise geride kalan boşluğu doldurur. Bir nesnenin çevresine sıkı biçimde çizilen maskeler, kenar piksellerini, gölgesini ve yansımasını hayalet gibi geride bırakır; bu nedenle düzenleyiciler maskeyi birkaç piksel genişletir ve gölgeyi de kapsayacak şekilde uzatır. Örnek segmentasyonu her nesne için ayrı bir maske üretir; bu da onu kaldırma maskelerinin yaygın kaynağı hâline getirir. Meta'nın SAM 2 gibi istemle yönlendirilebilen modeller, sınıf listesinde olmayan nesneler için bir tıklamayı maskeye dönüştürür. YOLO26 segmentasyon modelleri, her nesnenin dış hatlarını result.masks.xy içinde çokgen olarak döndürür; cv2.drawContours, bu çokgenleri cv2.FILLED ile boyama maskesine dönüştürür. Segmentasyon nesnelerini ayırma kılavuzu da nesneleri kesip çıkarmak için aynı adımı kullanır.
Video boyama zamansal bir boyut ekler: dolgu kareler arasında tutarlı olmalıdır, yoksa titreme oluşur. Bu nedenle AI video düzenleme araçları maskeleri izlemeyle yayar ve kamera hareket ettikçe komşu karelerde ortaya çıkan arka plan piksellerinden yararlanır.
İlgili Görevler#
- Dışa doğru genişletme: Görüntüyü özgün sınırlarının ötesine genişletmek için aynı modelleri kullanır; yeni tuval alanı maske olarak belirlenir.
- Süper çözünürlük: Maske kullanmadan, görüntünün tamamına daha yüksek çözünürlükte ayrıntı ekler.
- Gürültü giderme: Yine maske kullanmadan, sahneyi koruyarak her piksele yayılmış gürültüyü kaldırır.
- Kare enterpolasyonu: Videonun ara karelerini, her birinin iki yanındaki karelerden yararlanarak sentezler.
Uygulamalar ve Köken#
Fotoğraf restorasyonu, taranmış baskılardaki çatlakları, tozu ve yırtıkları maskeler; film restorasyonu da arşiv görüntülerindeki çizikler için aynı işlemi kare kare yapar. Rötuş ve ürün fotoğrafçılığı, istenmeyen nesneleri, elektrik hatlarını ve kusurları kaldırır. Uydu görüntüsü analizinde boşluk doldurma, klasik bir boyama problemidir: Landsat 7'deki tarama çizgisi düzelticisi 31 Mayıs 2003'te arızalandı ve sonraki her görüntünün yaklaşık yüzde 22'sini kaplayan kama biçimli çizgiler bıraktı.
Öğrenilmiş boyama, sentetik maskelerle gizli tutulan görüntüler üzerinde gerçekçilik için Fréchet Inception Uzaklığı (FID) kullanılarak değerlendirilir; çünkü iyi bir dolgu, özgün piksellerden farklı olsa da doğru olabilir. Aynı gerçekçilik, boyamayı deepfake üretmek ve filigranları kaldırmak için de bir araca dönüştürür; tıbbi, bilimsel veya adli görüntülerde uydurulmuş bir yapıysa teşhisi ya da kararı değiştirebilir. İçerik Kimlik Bilgileri bu tür düzenlemeleri imzalı meta verilerde kaydeder; Adobe, Generative Fill ile düzenlenen görüntülere bu bilgileri ekler.










