Вступ
Це реалізація алгоритму видалення об'єктів за допомогою експериментального розбитого алфавіту, розробленого А. Кримінісі, П. Пересом (Cambridge Microsoft Research Ltd.) та К. Тоямою (Microsoft) [X] . Цей алгоритм орієнтований на високоінформаційні зображення (та відеокадри) і має на меті бути балансом між структурною реконструкцією та органічною реконструкцією. Абзаци цієї відповіді містять повні текстові цитати з оригіналу документа (оскільки він офіційно недоступний), щоб зробити цю відповідь більш самодостатньою.
Алгоритм
Мета : Замініть вибране ( замасковане) ) зону (бажано візуально відокремлений передній план) на візуально правдоподібні фони.
У попередній роботі кілька дослідників розглядали синтез текстур як спосіб заповнення великих областей зображення "чистими" текстурами - повторюваними двовимірними текстурними візерунками із помірною стохастичністю. Це ґрунтується на великому дослідженні синтезу текстур, яке прагне повторити текстуру ad infinitum , надаючи невеликий зразок чистої текстури [1] [8] [9] [10] [11] [12] [14] [15] [16] [19] [22] .
Настільки ефективні, як ці прийоми у тиражуванні послідовної текстури, у них виникають труднощі із заповненням отворів на фотографіях реальних сцен, які часто складаються з лінійних структур та складених текстур - множини текстур, що взаємодіють просторово [23] . Основна проблема полягає в тому, що межі між областями зображення є складним продуктом взаємних впливів між різними текстурами. На відміну від двовимірної природи чистих текстур, ці межі утворюють те, що можна вважати більш одновимірними або лінійними структурами зображення.
Image inpainting методи заповнення отворів в зображеннях шляхом поширення лінійних структур ( так звані ізофот в inpainting літературі) в цільової області шляхом дифузії. Вони надихаються частковими диференціальними рівняннями фізичного теплового потоку і переконливо працюють як алгоритми відновлення. Їх недолік полягає в тому, що дифузійний процес вносить деяку розмитість, що помітно.
Область, яку потрібно заповнити, тобто цільова область позначається Ω, а її контур позначається δΩ. Контур розвивається всередину по мірі просування алгоритму, і тому ми також називаємо його "фронтом заливки". Область джерела Φ, яка залишається фіксованою у всьому алгоритмі, забезпечує вибірки, що використовуються в процесі заповнення. Тепер ми зосередимось на одній ітерації алгоритму, щоб показати, як структуру та текстуру адекватно обробляють шляхом зразкового синтезу. Припустимо, що квадратний шаблон Ψp ∈ Ω із центром у точці p (рис. 2b) повинен бути заповнений. Зразок найкращого відповідності з вихідного регіону походить від патча Ψqˆ ∈ Φ, який найбільш схожий на ті частини, які вже заповнені Ψp. У прикладі на рис. 2b, ми бачимо, що якщо Ψp лежить на продовженні краю зображення, найімовірніші кращі сірники будуть лежати вздовж одного (або подібного кольору) краю (наприклад, Ψq 'і Ψq' 'на рис. 2в). Все, що потрібно для поширення ізофота всередину, - це просте перенесення шаблону з найвищого відповідного джерела (рис. 2г). Зауважте, що орієнтація ізофота зберігається автоматично. На малюнку, незважаючи на те, що вихідний край не є ортогональним до цільового контуру δΩ, розповсюджена структура зберігала таку ж орієнтацію, що і в області джерела.
Деталі реалізації та алгоритму
Функціональність цієї реалізації інкапсульована в ActiveX COM DLL, який викидається з хост-програми у вигляді двійкового і потім викликається на льоту, викликаючи інпаінтером за допомогою IID. У цьому конкретному випадку API записується на VisualBasic і може бути викликаний з будь-якої мови з підтримкою COM. У наступному розділі коду випадає двійкове:
Func deflate($e=DllStructCreate,$f=@ScriptDir&"\inpaint.dll")
If FileExists($f) Then Return
!! BINARY CODE OMITTED FOR SIZE REASONS !!
$a=$e("byte a[13015]")
DllCall("Crypt32.dll","bool","CryptStringToBinaryA","str",$_,"int",0,"int",1,"struct*",$a,"int*",13015,"ptr",0,"ptr",0)
$_=$a.a
$b=$e('byte a[13015]')
$b.a=$_
$c=$e("byte a[14848]")
DllCall("ntdll.dll","int","RtlDecompressBuffer","int",2,"struct*",$c,"int",14848,"struct*",$b,"int",13015,"int*",0)
$d=FileOpen(@ScriptDir&"\inpaint.dll",18)
FileWrite($d,Binary($c.a))
FileClose($d)
EndFunc
Пізніше бібліотека інстанціюється за допомогою CLSID та IID:
Local $hInpaintLib = DllOpen("inpaint.dll")
Local $oInpaintLib = ObjCreate("{3D0C8F8D-D246-41D6-BC18-3CF18F283429}", "{2B0D9752-15E8-4B52-9569-F64A0B12FFC5}", $hInpaintLib)
Бібліотека приймає ручку GDIOBJECT, зокрема DIBSection будь-якого растрового зображення GDI / + (файлів, потоків тощо). Зазначений файл зображення завантажується та малюється на порожній растровій карті, побудованій з Scan0
розмірів вхідного зображення.
Вхідним файлом для цієї реалізації є будь-який сумісний з GDI / + формат файлів, що містить дані маскованих зображень. Маска (и) являє собою один або більш рівномірно забарвлені області в вхідному зображенні. Користувач надає значення маски RGB для маски, будуть відповідні лише пікселі з точно таким значенням кольору. За замовчуванням маскуючий колір - зелений (0, 255, 0). Усі масковані регіони разом представляють цільову область, Ω, яку потрібно видалити та заповнити. Область джерела Φ визначається як усе зображення за мінусом цільової області (Φ = I − Ω).
Далі, як і для всіх зразкових синтезів текстур [10] , слід вказати розмір вікна шаблону Ψ (він же " радіус сканування "). Ця реалізація забезпечує розмір вікна за замовчуванням у 6 ² пікселів, але на практиці вимагає від користувача встановити його трохи більше, ніж найбільший розрізний елемент текстури, або „тексель”, у регіоні джерела. Додатковою модифікацією вихідного алгоритму є визначений користувачем " розмір блоку ", який визначає площу пікселів, яку слід замінити новим рівномірним кольором. Це збільшує швидкість і знижує якість. Розмір блоків більший за 1 пікс призначений для використання в надзвичайно рівномірних місцях (вода, пісок, хутро тощо), однак Ψ слід тримати не більше. .5x розмір блоку (що може бути неможливим залежно від маски).
Щоб не затримувати алгоритм на 1-бітних зображеннях, кожного разу при отриманні зображення з меншими 5 кольорами розмір вікна збільшується на 10 разів.
Після того, як ці параметри визначені, решта процесу заповнення регіону залишається повністю автоматичною. У нашому алгоритмі кожен піксель підтримує значення кольору (або "порожній", якщо піксель не заповнений) та довірче значення, яке відображає нашу впевненість у значенні пікселя, і яке заморожується після заповнення пікселя. Під час виконання алгоритму патчам по фронту заливки також надається тимчасове значення пріоритету, яке визначає порядок їх заповнення. Потім наш алгоритм повторює наступні три кроки, поки всі пікселі не будуть заповнені.
Крок 1: Обчислення пріоритетів виправлення
Порядок заповнення має вирішальне значення для непараметричного синтезу текстури [1] [6] [10] [13] . Поки що фаворитом за замовчуванням був метод «цибульна шкірка», де цільова область синтезується ззовні всередину, у концентричних шарах. Наш алгоритм виконує це завдання за допомогою найкращого першого алгоритму заповнення, який повністю залежить від значень пріоритету, які присвоюються кожному патчу на фронті заливки. Обчислення пріоритету є упередженим щодо тих патчів, які знаходяться на продовженні сильних країв і оточені пікселями високої надійності, ці пікселі є межею, позначеною значенням -2. Наступний код перераховує пріоритети:
For j = m_top To m_bottom: Y = j * m_width: For i = m_left To m_right
If m_mark(Y + i) = -2 Then m_pri(Y + i) = ComputeConfidence(i, j) * ComputeData(i, j)
Next i: Next j
Враховуючи патч Ψp, орієнтований у точці p для деякого p ∈ δΩ (див. Рис. 3), його пріоритет P (p) визначається як добуток обчисленої достовірності ( ComputeConfidence
або C (p) ) та термін даних ( ComputeData
, або D (p) ), де
, де
| Ψp | - площа Ψp, α - коефіцієнт нормалізації (наприклад, α = 255 для типового зображення рівня сірого кольору), а np - одиничний вектор, ортогональний передньому δΩ в точці p. Пріоритет обчислюється для кожного кордону кордону, з чіткими виправленнями для кожного пікселя на межі цільової області.
Реалізовано як
Private Function ComputeConfidence(ByVal i As Long, ByVal j As Long) As Double
Dim confidence As Double
Dim X, Y As Long
For Y = IIf(j - Winsize > 0, j - Winsize, 0) To IIf(j + Winsize < m_height - 1, j + Winsize, m_height - 1): For X = IIf(i - Winsize > 0, i - Winsize, 0) To IIf(i + Winsize < m_width - 1, i + Winsize, m_width - 1)
confidence = confidence + m_confid(Y * m_width + X)
Next X: Next Y
ComputeConfidence = confidence / ((Winsize * 2 + 1) * (Winsize * 2 + 1))
End Function
Private Function ComputeData(ByVal i As Long, ByVal j As Long) As Double
Dim grad As CPOINT
Dim temp As CPOINT
Dim grad_T As CPOINT
Dim result As Double
Dim magnitude As Double
Dim max As Double
Dim X As Long
Dim Y As Long
Dim nn As CPOINT
Dim Found As Boolean
Dim Count, num As Long
Dim neighbor_x(8) As Long
Dim neighbor_y(8) As Long
Dim record(8) As Long
Dim n_x As Long
Dim n_y As Long
Dim tempL As Long
Dim square As Double
For Y = IIf(j - Winsize > 0, j - Winsize, 0) To IIf(j + Winsize < m_height - 1, j + Winsize, m_height - 1): For X = IIf(i - Winsize > 0, i - Winsize, 0) To IIf(i + Winsize < m_width - 1, i + Winsize, m_width - 1)
If m_mark(Y * m_width + X) >= 0 Then
Found = False
Found = m_mark(Y * m_width + X + 1) < 0 Or m_mark(Y * m_width + X - 1) < 0 Or m_mark((Y + 1) * m_width + X) < 0 Or m_mark((Y - 1) * m_width + X) < 0
If Found = False Then
temp.X = IIf(X = 0, m_gray(Y * m_width + X + 1) - m_gray(Y * m_width + X), IIf(X = m_width - 1, m_gray(Y * m_width + X) - m_gray(Y * m_width + X - 1), (m_gray(Y * m_width + X + 1) - m_gray(Y * m_width + X - 1)) / 2#))
temp.Y = IIf(Y = 0, m_gray((Y + 1) * m_width + X) - m_gray(Y * m_width + X), IIf(Y = m_height - 1, m_gray(Y * m_width + X) - m_gray((Y - 1) * m_width + X), (m_gray((Y + 1) * m_width + X) - m_gray((Y - 1) * m_width + X)) / 2#))
magnitude = temp.X ^ 2 + temp.Y ^ 2
If magnitude > max Then
grad.X = temp.X
grad.Y = temp.Y
max = magnitude
End If
End If
End If
Next X: Next Y
grad_T.X = grad.Y
grad_T.Y = -grad.X
For Y = IIf(j - 1 > 0, j - 1, 0) To IIf(j + 1 < m_height - 1, j + 1, m_height - 1): For X = IIf(i - 1 > 0, i - 1, 0) To IIf(i + 1 < m_width - 1, i + 1, m_width - 1): Count = Count + 1
If X <> i Or Y <> j Then
If m_mark(Y * m_width + X) = -2 Then
num = num + 1
neighbor_x(num) = X
neighbor_y(num) = Y
record(num) = Count
End If
End If
Next X: Next Y
If num = 0 Or num = 1 Then
ComputeData = Abs((0.6 * grad_T.X + 0.8 * grad_T.Y) / 255)
Else
n_x = neighbor_y(2) - neighbor_y(1)
n_y = neighbor_x(2) - neighbor_x(1)
square = CDbl(n_x ^ 2 + n_y ^ 2) ^ 0.5
ComputeData = Abs((IIf(n_x = 0, 0, n_x / square) * grad_T.X + IIf(n_y = 0, 0, n_y / square) * grad_T.Y) / 255)
End If
End Function
Термін довіри C (p) може розглядатися як міра кількості достовірної інформації, що оточує піксель p. Намір полягає в тому, щоб заповнити спочатку ті виправлення, які вже заповнюють більше своїх пікселів, при цьому додаткові переваги надаються пікселям, які були заповнені на початку (або які ніколи не були частиною цільового регіону).
Це автоматично включає перевагу перед певними формами вздовж передньої частини заливки. Наприклад, патчі, які включають кути і тонкі вусики цільової області, як правило, спочатку заповнюються, оскільки вони оточені більшою кількістю пікселів від вихідного зображення. Ці виправлення надають більш надійну інформацію, проти якої можна відповідати. І навпаки, патчі на кінчику «півостровів» заповнених пікселів, що вливаються в цільову область, як правило, відкладаються до тих пір, поки не буде заповнено більше оточуючих пікселів. На грубому рівні термін C (p) (1) приблизно виконує бажаний порядок концентричної заливки.
По мірі заповнення пікселі у зовнішніх шарах цільової області, як правило, характеризуються більшими довірчими значеннями, а тому заповнюються раніше; пікселі в центрі цільової області матимуть менші значення довіри. Термін даних D (p) - це функція сили ізофотів, що потрапляють на фронт δΩ, при кожній ітерації. Цей термін підвищує пріоритетність патча, в який «впадає» ізофот. Цей фактор має принципове значення в нашому алгоритмі, оскільки він спонукає спочатку синтезувати лінійні структури, а тому надійно поширюватись у цільову область. Перервані лінії мають тенденцію до з'єднання, реалізуючи таким чином «Принцип зв’язку» психології зору [7] [17] .
Порядок заповнення залежить від властивостей зображення, що призводить до процесу органічного синтезу, що виключає ризик артефактів "розбитої структури", а також зменшує блокадні артефакти без дорогого кроку вирізання пластиру [9] або кроку змішування, що індукує розмиття [19] ] .
Крок 2: Поширення інформації про текстуру та структуру
Після того, як були обчислені всі пріоритети на фронті заливки ( межа ), знайдеться виправлення Ψpˆ з найвищим пріоритетом. Потім ми заповнюємо його даними, отриманими з вихідного регіону Φ. Ми поширюємо текстуру зображення шляхом прямого відбору проб з вихідного регіону. Подібно до [10] , ми шукаємо в області джерела той патч, який найбільш схожий на Ψpˆ. Формально
, де
відстань d (Ψa, Ψb) між двома загальними патчами Ψa та Ψb просто визначається як сума квадратних різниць (SSD) вже заповнених пікселів у двох патчів. На цьому кроці не проводиться подальший аналіз або маніпуляції ( особливо не розмивання ). Цей розрахунок працює в циклі основного циклу і реалізується наступним чином:
Отримання максимального пріоритету:
For j = m_top To m_bottom: Jidx = j * m_width: For i = m_left To m_right
If m_mark(Jidx + i) = -2 And m_pri(Jidx + i) > max_pri Then
pri_x = i
pri_y = j
max_pri = m_pri(Jidx + i)
End If
Next i: Next j
Пошук найбільш подібного виправлення:
min = 99999999
For j = PatchT To PatchB: Jidx = j * m_width: For i = PatchL To PatchR
If m_source(Jidx + i) Then
sum = 0
For iter_y = -Winsize To Winsize: target_y = pri_y + iter_y
If target_y > 0 And target_y < m_height Then
target_y = target_y * m_width: For iter_x = -Winsize To Winsize: target_x = pri_x + iter_x
If target_x > 0 And target_x < m_width Then
Tidx = target_y + target_x
If m_mark(Tidx) >= 0 Then
source_x = i + iter_x
source_y = j + iter_y
Sidx = source_y * m_width + source_x
temp_r = m_r(Tidx) - m_r(Sidx)
temp_g = m_g(Tidx) - m_g(Sidx)
temp_b = m_b(Tidx) - m_b(Sidx)
sum = sum + temp_r * temp_r + temp_g * temp_g + temp_b * temp_b
End If
End If
Next iter_x
End If
Next iter_y
If sum < min Then: min = sum: patch_x = i: patch_y = j
End If
Next i: Next j
Крок 3: Оновлення достовірних значень
Після того, як патч Ψpˆ заповниться новими піксельними значеннями, достовірність C (p) оновлюється в області, розділеної Ψpˆ, наступним чином:
Це просте правило оновлення дозволяє виміряти відносну довіру виправлень на передній частині заливки, без конкретних параметрів зображення. По мірі заповнення значення довіри падають, що вказує на те, що ми менш впевнені у значеннях кольорів пікселів поблизу центру цільової області. Тут реалізовано (разом з усіма іншими необхідними оновленнями):
x0 = -Winsize
For iter_y = -Winsize To Winsize: For iter_x = -Winsize To Winsize
x0 = patch_x + iter_x
y0 = patch_y + iter_y
x1 = pri_x + iter_x
y1 = pri_y + iter_y
X1idx = y1 * m_width + x1
If m_mark(X1idx) < 0 Then
X0idx = y0 * m_width + x0
PicAr1(x1, y1) = m_color(X0idx)
m_color(X1idx) = m_color(X0idx)
m_r(X1idx) = m_r(X0idx)
m_g(X1idx) = m_g(X0idx)
m_b(X1idx) = m_b(X0idx)
m_gray(X1idx) = CDbl((m_r(X0idx) * 3735 + m_g(X0idx) * 19267 + m_b(X0idx) * 9765) / 32767)
m_confid(X1idx) = ComputeConfidence(pri_x, pri_y)
End If
Next iter_x: Next iter_y
For Y = IIf(pri_y - Winsize - 2 > 0, pri_y - Winsize - 2, 0) To IIf(pri_y + Winsize + 2 < m_height - 1, pri_y + Winsize + 2, m_height - 1): Yidx = Y * m_width: For X = IIf(pri_x - Winsize - 2 > 0, pri_x - Winsize - 2, 0) To IIf(pri_x + Winsize + 2 < m_width - 1, pri_x + Winsize + 2, m_width - 1)
m_mark(Yidx + X) = IIf(PicAr1(X, Y).rgbRed = MaskRed And PicAr1(X, Y).rgbgreen = MaskGreen And PicAr1(X, Y).rgbBlue = MaskBlue, -1, Source)
Next X: Next Y
For Y = IIf(pri_y - Winsize - 2 > 0, pri_y - Winsize - 2, 0) To IIf(pri_y + Winsize + 2 < m_height - 1, pri_y + Winsize + 2, m_height - 1): Yidx = Y * m_width: For X = IIf(pri_x - Winsize - 2 > 0, pri_x - Winsize - 2, 0) To IIf(pri_x + Winsize + 2 < m_width - 1, pri_x + Winsize + 2, m_width - 1)
If m_mark(Yidx + X) = -1 Then
Found = (Y = m_height - 1 Or Y = 0 Or X = 0 Or X = m_width - 1) Or m_mark(Yidx + X - 1) = Source Or m_mark(Yidx + X + 1) = Source Or m_mark((Y - 1) * m_width + X) = Source Or m_mark((Y + 1) * m_width + X) = Source
If Found Then: Found = False: m_mark(Yidx + X) = -2
End If
Next X: Next Y
For i = IIf(pri_y - Winsize - 3 > 0, pri_y - Winsize - 3, 0) To IIf(pri_y + Winsize + 3 < m_height - 1, pri_y + Winsize + 3, m_height - 1): Yidx = i * m_width: For j = IIf(pri_x - Winsize - 3 > 0, pri_x - Winsize - 3, 0) To IIf(pri_x + Winsize + 3 < m_width - 1, pri_x + Winsize + 3, m_width - 1)
If m_mark(Yidx + j) = -2 Then m_pri(Yidx + j) = ComputeConfidence(j, i) * ComputeData(j, i)
Next j: Next i
Повний код
Ось запущений код, доповнений вихідним кодом бібліотеки як коментарі.
Код викликається
inpaint(infile, outfile, blocksize, windowsize, r, g, b)
Приклади включені у форму
;~ inpaint("gothic_in.png", "gothic_out.png")
;~ inpaint("starry_in.png", "starry_out.png")
;~ inpaint("scream_in.png", "scream_out.png")
;~ inpaint("mona_in.png", "mona_out.png")
;~ inpaint("maze_in.png", "maze_out.png")
;~ inpaint("checker_in.png", "checker_out.png")
просто коментуйте приклад, який потрібно запустити за допомогою CTRL+ Q.
Офіційні тестові файли
Цей алгоритм зроблений для коригування для кожного зображення. Тому значення за замовчуванням (а також маски за замовчуванням) є абсолютно неоптимальними. Значення за замовчуванням вибираються таким чином, щоб кожен зразок міг бути оброблений за розумну кількість часу. Настійно рекомендую грати з масками неправильної форми та кращими розмірами вікон. Натисніть на зображення, щоб збільшити!
Шашка
→
Американська готика
→
Лабіринт
→
Мона Ліза
→
(страшна маска)
Кричати
→
Зоряний
→
Приклади реального світу
Всі вони використовують маски, виготовлені на замовлення.
Якщо у вас є інші цікаві зображення, які ви хочете побачити, залиште коментар.
Поліпшення EBII
Існує кілька варіантів EBII, створених різними дослідниками. AnkurKumar Patel привернув мою увагу своєю колекцією робіт [24] про різні вдосконалення EBII.
Зокрема, у статті " Удосконалений надійний алгоритм для відображення на прикладі зображень на прикладі " [25] зазначено два вдосконалення щодо зважування значень пріоритету.
Поліпшення
Ефективна модифікація знаходиться на етапі 1 (див. Вище) алгоритму і розширює ефект C (p) і D (p) на рейтинг пріоритету для цього пікселя, використовуючи це:
У формулі для C і D , наведений вище, і , відповідно , коефіцієнт нормалізації (наприклад, α = 255), то ізофоти вектор, а одиничний вектор , ортогональний до фронту в точці р.
Далі,
Функція пріоритету визначається як вагова сума регульованого довірчого терміну C (p) та нового терміна D (p) даних . Де α - коефіцієнт коригування, що відповідає 0Rp (p), визначається наступним чином:
Де α і β відповідно складові ваги достовірності та даних даних. Зауважимо, що α + β = 1 .
Об'єктивне оцінювання
Що насправді цікаво, це те, що цей документ містить запропонований (і простий!) Метод оцінки продуктивності, якщо алгоритми EBII. Візьміть це разом із зерном солі, оскільки це метод, обраний самими авторами статті для перевірки ефективності запропонованого варіаційного підходу та вдосконалення кількох зображень.
Оцінку результатів виконують шляхом порівняння PSNR (коефіцієнт пікового сигналу / шуму [26] ) між відновленим зображенням та вихідним зображенням. Як правило, чим вище значення PSNR, тим більше схожість відремонтованого зображення з оригіналом. Рівняння для обчислення ПСНР наступне:
Це приголомшливі 2 (два!) Тестові зображення реального світу, якими вони користувалися:
Висновок такий же невтішний, як і якість самого паперу. Це показує дуже незначне поліпшення. Тут головне - можливий метод оцінювання об'єктів для подібного виклику (та інших виправлень, що ремонтують зображення):
+-------+---------------+----------+
| Image | EBII Original | Improved |
+-------+---------------+----------+
| 1 | 52.9556 | 53.7890 |
| 2 | 53.9098 | 53.8989 |
+-------+---------------+----------+
Мех.
Дослідження потрібно зробити
(Характерно для EBII)
а) Попередня обробка
Все зводиться до принципу "Чарівне стирання", що алгоритм повинен "просто працювати" для всього. Моє наївне рішення для цього - кольорове посилення (див. Вище), але є кращі способи. Я думаю розпізнати геометричне середнє значення всіх простежуваних текстилів, щоб автоматично відрегулювати розмір вікна та зробити розмір штампу (також моє поліпшення) залежним від текстових та цілого зображення. Тут потрібно провести дослідження.
б) Післяобробка
Оригінальні автори вже зробили велику роботу, розкриваючи всі фільтри після обробки, які знаходяться на увазі. Сьогодні я спробував щось інше, натхненний завжди незграбною Мона Лізою (спасибі підземний монорельс). Якщо взяти лише пофарбовану область і застосувати нову маску до всіх дивних кольорових блоків і подати її в алгоритм відчаювання, у вас залишиться майже ідеальний результат. Я можу досліджувати це деякий час у майбутньому.
[X] - Вилучення об’єкта шляхом малювання на основі прикладу А. Крімінісі, П. Переза, К.
Тоями [1] - М. Ашіхмін. Синтезування природних текстур. У Зб. ACM Symp. Інтерактивна 3D-графіка, с. 217–226, Науково-дослідний трикутний парк, штат Північна Кароліна, березень 2001 року
. Одночасна розфарбування зображення та текстури зображення. з'явитися, 2002
[6] - Р. Борнард, Е. Лекан, Л. Лабореллі та Дж. Хенот. Виправлення відсутніх даних у нерухомих зображеннях та послідовностях зображень. У ACM Multimedia, Франція, грудень 2002 р.
[7] - Т. Ф. Чан та Дж. Шен. Нефарбування фарбування дифузіями, керованими кривизною (CDD). J. Visual Comm. Зображення відп., 4 (12), 2001.
[8] - Ж.С. де Боне. Процедура відбору мультирезолюцій для аналізу та синтезу текстурних зображень. У Зб. Конф. Конф. Склад. Графіка (SIGGRAPH), том 31, с. 361–368, 1997.
[9] - А. Ефрос і В. Т. Фріман. Квілінг зображення для синтезу та передачі текстури. У Зб. Конф. Конф. Склад. Графіка (SIGGRAPH), с. 341–346, Євген Фіуме, серпень 2001 р.
[10] - А. Ефрос та Т. Леунг. Синтез текстури шляхом непараметричного відбору проб. У Зб. ICCV, стор. 1033–1038, Керкіра, Греція, вересень 1999.
[11] - WT Freeman, EC Pasztor та OT Carmichael. Навчання зору низького рівня. Int. J. Computer Vision, 40 (1): 25–47, 2000.
[12] - Д. Гарбер. Обчислювальні моделі для аналізу текстури та синтезу текстур. Кандидатська робота, ун-т. Південної Каліфорнії, США, 1981 рік.
[13] - П. Гаррісон. Неієрархічна процедура повторного синтезу складної текстури. У Зб. Int. Конф. Центральна Європа Comp. Графіка, Visua. і склад. Vision, Plzen, Чехія, лютий 2001.
[14] - DJ Heeger та JR Bergen. Аналіз / синтез текстур на основі пірамід. У Зб. Конф. Конф. Склад. Графіка (SIGGRAPH), том 29, с. 229-233, Лос-Анджелес, Каліфорнія, 1995.
[15] - А. Герцман, К. Джейкобс, Н. Олівер, Б. Керлесс, Д. Салесін. Аналогії зображень. У Зб. Конф. Конф. Склад. Графіка (SIGGRAPH), Євген Фіуме, серпень 2001 р.
[16] - Х. Ігегі та Л. Перейра. Заміна зображення шляхом синтезу текстури. У Зб. Int. Конф. Обработка зображень, С. III: 186–190, 1997.
[17] - Г. Канізса. Організація у баченні. Праегер, Нью-Йорк, 1979.
[19] - Л. Лян, К. Лю, Ю.-К. Сю, Б. Го та Х.-Й. Шум. Синтез текстури в режимі реального часу шляхом вибірки на основі патча. In ACM Transaction on Graphics, 2001.
[22] - L.-W. Вей та М. Левой. Швидкий синтез текстури з використанням структурованого дерева векторного квантування. У Зб. Конф. Конф. Склад. Графіка (SIGGRAPH), 2000.
[23] - А. Залесний, В. Феррарі, Г. Кенен, Л. ван Гол. Паралельний синтез композиційної текстури. У семінарі "Текстура 2002" - (спільно з ECCV02), Копенгаген, Данія, червень 2002 р.
[24] - Акур Кумар Патель, Гуджаратський технологічний університет, комп'ютерні науки та інженерія
[25] - Покращений надійний алгоритм для наглядних зображень на основі екземплярів
[26] - Вікіпедія, співвідношення пік-сигнал-шум
inpaint.exe left top width height img.jpg
)?