前書き
これは、A。Criminisi、P。Perez(Cambridge Microsoft Research Ltd.)およびK. Toyama(Microsoft)[X]によって開発された、Exemplarベースのインペインティングアルゴリズムによるオブジェクト削除の実装です。このアルゴリズムは、高情報画像(およびビデオフレーム)を対象としており、構造再構築と有機再構築のバランスを目指しています。この回答の段落には、この回答をより充実したものにするために、元の論文の全文引用が含まれています(公式には入手できなくなっているため)。
アルゴリズム
目標:選択された(マスクされた)領域(できれば視覚的に分離された前景オブジェクト)を視覚的にもっともらしい背景に置き換えます。
過去の研究で、いくつかの研究者は、テクスチャ合成を、大きな画像領域を「純粋な」テクスチャで埋める方法、つまり適度な確率を持つ2次元のテクスチャパターンであると考えてきました。これは、純粋なテクスチャ[1] [8] [9] [10] [11] [12] [14]の小さなソースサンプルが与えられたときに、テクスチャを無限に複製しようとするテクスチャ合成研究の大部分に基づいています。[15] [16] [19] [22]。
空間的に対話する複数のテクスチャ-これらの技術として有効で一貫性のあるテクスチャーを複製しているので、それらは困難しばしば線状構造および複合テクスチャで構成され、実世界のシーンの撮影の穴を、充填持っている[23] 。主な問題は、画像領域間の境界が異なるテクスチャ間の相互影響の複雑な積であるということです。純粋なテクスチャの2次元の性質とは対照的に、これらの境界は、より1次元または線形の画像構造と考えられるものを形成します。
画像修復テクニックは、拡散を介して線形構造(修復文学ではアイソフォートと呼ばれる)をターゲット領域に伝播することにより、画像の穴を埋めます。それらは物理的熱流の偏微分方程式に触発され、復元アルゴリズムとして説得力を持って機能します。それらの欠点は、拡散プロセスがいくらかのぼけをもたらすことであり、これは顕著です。
塗りつぶされる領域、つまりターゲット領域はbyで示され、その輪郭はδΩで示されます。輪郭はアルゴリズムが進むにつれて内側に進化するため、「塗りつぶし前線」とも呼ばれます。アルゴリズム全体を通して固定されたままのソース領域Φは、充填プロセスで使用されるサンプルを提供します。ここで、アルゴリズムの単一の反復に焦点を当て、構造とテクスチャが標本ベースの合成によって適切に処理される方法を示します。点pを中心とする正方形のテンプレートΨp∈Ω(図2b)が満たされると仮定します。ソース領域からの最適なサンプルは、パッチΨqˆ∈Φから取得されます。これは、すでにΨpで埋められている部分に最も類似しています。図の例では 2b、Ψpが画像エッジの連続にある場合、最も可能性の高い最良の一致は、同じ(または同様の色の)エッジ(たとえば、図2cのΨq 'およびΨq' ')に沿って存在します。isophoteを内側に伝播するために必要なのは、最適なソースパッチからパターンを単純に転送することだけです(図2d)。isophoteの向きは自動的に保持されることに注意してください。図では、元のエッジがターゲットの輪郭δΩに直交していないという事実にもかかわらず、伝播された構造はソース領域と同じ方向を維持しています。
実装とアルゴリズムの詳細
この実装の機能は、ホストプログラムからバイナリとしてドロップされたActiveX COM DLLにカプセル化され、IIDによってinpainterを呼び出すことでその場で呼び出されます。この特定のケースでは、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ハンドル、特にGDI / +ビットマップ(ファイル、ストリームなど)のDIBSectionを受け入れます。指定された画像ファイルが読み込まScan0
れ、入力画像の次元から構築された空のビットマップに描画されます。
この実装の入力ファイルは、マスクされた画像データを含むGDI / +互換のファイル形式です。マスク(S)は、入力画像内の1つ以上の均一に着色された領域です。ユーザーはマスクにRGBカラー値を指定します。正確にそのカラー値を持つピクセルのみが一致します。デフォルトのマスキング色は緑(0、255、0)です。マスクされたすべての領域は、一緒に削除および塗りつぶされるターゲット領域Ωを表します。ソース領域Φは、画像全体からターゲット領域を引いたものとして定義されます(Φ= I−Ω)。
次に、すべての標本ベースのテクスチャ合成[10]と同様に、テンプレートウィンドウのサイズΨ(別名「スキャン半径」)を指定する必要があります。この実装はデフォルトのウィンドウサイズ6²ピクセルを提供しますが、実際には、ソース領域の最大の識別可能なテクスチャ要素、つまり「テクセル」よりもわずかに大きく設定する必要があります。元のアルゴリズムに対する追加の変更は、ユーザー定義可能な「ブロックサイズ」であり、これにより、新しい均一な色で置き換えられるピクセルの領域が決定されます。これにより、速度が向上し、品質が低下します。1pxよりも大きいブロックサイズは、非常に均一な領域(水、砂、毛皮など)で使用することを意図していますが、Ψは最大に維持する必要があります。.5xブロックサイズ(マスクによっては不可能な場合があります)。
1ビット画像でアルゴリズムを停止させないために、5色未満の画像を受信するたびに、ウィンドウサイズが10倍に増幅されます。
これらのパラメータが決定されると、残りの領域充填プロセスは完全に自動化されます。このアルゴリズムでは、各ピクセルは色の値(または、ピクセルが塗りつぶされていない場合は「空」)と信頼値を維持します。信頼値は、ピクセル値に対する信頼を反映し、ピクセルが塗りつぶされると固定されます。アルゴリズムの過程で、フィルフロントに沿ったパッチにも一時的な優先度の値が与えられます。これにより、パッチが満たされる順序が決まります。次に、すべてのピクセルが満たされるまで、次の3つのステップをアルゴリズムが繰り返します。
ステップ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∈δΩ(図3を参照)の点pを中心としたパッチΨpが与えられると、その優先度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を囲む信頼できる情報の量の尺度と考えることができます。意図は、ピクセルの多くが既に塗りつぶされているパッチを最初に塗りつぶすことであり、早期に塗りつぶされたピクセル(またはターゲット領域の一部ではなかったピクセル)が優先されます。
これにより、塗りつぶし前線に沿った特定の形状に対する設定が自動的に組み込まれます。たとえば、元の画像のより多くのピクセルに囲まれているため、ターゲット領域の角と細いthinを含むパッチが最初に塗りつぶされる傾向があります。これらのパッチは、一致する信頼性の高い情報を提供します。逆に、ターゲット領域に突き出ている塗りつぶされたピクセルの「半島」の先端にあるパッチは、周囲のピクセルがさらに塗りつぶされるまで脇に置かれる傾向があります。大まかなレベルでは、(1)望ましい同心円の充填順序を強制します。
塗りつぶしが進むと、ターゲット領域の外側のレイヤーのピクセルは、より高い信頼値によって特徴付けられる傾向があるため、より早く塗りつぶされます。ターゲット領域の中心にあるピクセルの信頼度は低くなります。データ項D(p)は、反復ごとにフロントδΩに当たるアイソフォテートの強度の関数です。この用語は、アイソフォアが「流れ込む」パッチの優先度を高めます。この要因は、線形構造を最初に合成し、ターゲット領域に安全に伝搬することを促進するため、アルゴリズムで基本的に重要です。破線は接続する傾向があるため、視覚心理学の「接続原理」を実現します[7] [17]。
塗りつぶしの順序は画像の特性に依存するため、「壊れた構造」のアーティファクトのリスクを排除し、高価なパッチカットステップ[9]またはブラー誘導ブレンディングステップ[19 ]。
ステップ2:テクスチャと構造の情報を伝播する
フィルフロント(境界)のすべての優先度が計算されると、最高の優先度を持つパッチΨpˆが見つかります。次に、ソース領域Φから抽出したデータを入力します。ソース領域の直接サンプリングにより画像テクスチャを伝播します。同様に[10] 、我々はΨpに最も類似しているパッチのソース領域に検索します。正式に、
、 どこ
2つの一般的なパッチΨaとΨbの間の距離d(Ψa、Ψb)は、2つのパッチの既に塗りつぶされたピクセルの差の平方和(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ˆが新しいピクセル値で満たされた後、次のように、Ψpˆで区切られた領域の信頼度C(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は、さまざまなEBIIの改善に関する論文集[24]に注目しました。
具体的には、論文「模範に基づく画像修復のためのロバストなアルゴリズムの改善」[25]は、優先度値の重み付けに関する2つの改善点に言及しています。
改善
効果的な変更はアルゴリズムのステップ1(上記を参照)にあり、これを使用してこのピクセルの優先度評価に対するC(p)およびD(p)効果を拡張します。
上記のCおよびDの式で、は、それぞれ正規化係数(たとえば、α= 255)、等値線ベクトル、および点pの正面に直交する単位ベクトルです。
さらに、
優先度関数は、正規化された信頼性項C(p)と新しいデータ項D(p)の重み合計として定義されます。αが調整係数である場合、0Rp(p)を満たすことは次のように定義されます。
ここで、αとβはそれぞれ信頼性とデータ項の成分の重みです。α+β= 1であることに注意してください。
客観的なスコアリング
しかし、本当に興味深いのは、このペーパーに、EBIIアルゴリズムのパフォーマンスを評価するための提案された(そして簡単な!)方法が含まれていることです。ただし、これは論文著者自身が選択した方法であり、提案された分散アプローチの有効性といくつかの画像の改善を検証するためのものです。
結果の評価は、復元された画像と元の画像のPSNR(ピーク信号対ノイズ比[26])を比較することにより実行されます。一般に、PSNR値が高いほど、修復された画像と元の画像の類似性が大きくなります。PSNRを計算する式は次のとおりです。
これらは、彼らが使用した驚異的な2(2!)実世界のテスト画像です。
結論は、論文自体の品質と同じくらい残念です。改善はほとんどありません。ここでの主なことは、この種の課題(およびその他の画像修復の課題)の可能なオブジェクトスコアリング方法です。
+-------+---------------+----------+
| Image | EBII Original | Improved |
+-------+---------------+----------+
| 1 | 52.9556 | 53.7890 |
| 2 | 53.9098 | 53.8989 |
+-------+---------------+----------+
えー
行われる研究
(EBIIに固有)
a)前処理
すべては、アルゴリズムがすべてに対して「機能する」という「Magic Erase」の原則に基づいています。これに対する私の素朴な解決策は色ベースの増幅です(上記参照)が、もっと良い方法があります。トレース可能なすべてのテクセルの幾何平均を認識してウィンドウサイズを自動調整し、スタンプサイズ(また、私の改善)をテクセルおよび画像全体の解像度に依存させることを考えています。ここで研究を行う必要があります。
b)後処理
オリジナルの著者は、頭に浮かんだすべての後処理フィルターを暴く素晴らしい仕事をすでにしました。今日、私はいつも不気味なモナリザにインスパイアされた他の何かを試しました(undergroundmonorailに感謝します)。ペイントされた領域だけを取り、すべての奇妙な色のブロックに新しいマスクを適用し、それをスペックル除去アルゴリズムに入力すると、ほぼ完璧な結果が残ります。将来的にはこれを検討するかもしれません。
[X] — A.クリミニシ、P。ペレス、K。富山による標本ベースのインペインティングによるオブジェクトの削除
[1] — M.アシクミン。自然な質感を合成します。Procで ACM Symp。on Interactive 3D Graphics、pp。217–226、Research Triangle Park、NC、2001
Mar. [5] — M. Bertalmio、L。Vese、G。Sapiro、およびS. Osher。構造とテクスチャ画像の同時修復。2002年
[6] — R. Bornard、E。Lecan、L。Laborelli、およびJH。シェノ。静止画像および画像シーケンスの欠落データ修正。ACMマルチメディア、フランス、12月2002年
[7] - TFチャン及びJ.シェン。曲率駆動拡散(CDD)による非テクスチャ修復。J.ビジュアル通信。Image Rep。、4(12)、2001
[8] — JS de Bonet。テクスチャ画像の分析と合成のための多重解像度サンプリング手順。Procで ACM設定 比較 グラフィックス(SIGGRAPH)、第31巻、361〜368、1997年。
[9] — A.エフロスとWTフリーマン。テクスチャの合成と転送のための画像キルティング。Procで。ACM設定 比較 グラフィックス(SIGGRAPH)、341〜346ページ、Eugene Fiume、2001年8月。
[10] — A. EfrosおよびT. Leung。ノンパラメトリックサンプリングによるテクスチャ合成。Procで ICCV、pp。1033-1038、ケルキラ、ギリシャ、1999年9月。
[11] — WTフリーマン、ECパスター、およびOTカーマイケル。低レベルの視覚の学習。Int。J.コンピュータービジョン、40(1):25–47、2000。
[12] — D.ガーバー。テクスチャ分析およびテクスチャ合成の計算モデル。博士論文、大学 米国、南カリフォルニア、1981年。
[13] — P.ハリソン。複雑なテクスチャの再合成のための非階層的な手順。Procで Int。確認 中央ヨーロッパコンプ。グラフィック、Visua。とコンプ。Vision、Plzen、チェコ共和国、2001年2月。
[14] — DJ HeegerとJR Bergen。ピラミッドベースのテクスチャ分析/合成。Procで ACM設定 比較 グラフィックス(SIGGRAPH)、第29巻、229〜233ページ、カリフォルニア州ロサンゼルス、1995年
。画像のアナロジー。Procで ACM設定 比較 グラフィックス(SIGGRAPH)、ユージンフィウメ、2001年8月。
[16] — H.イゲヒおよびL.ペレイラ。テクスチャ合成による画像置換。Procで Int。確認 画像処理、pp。III:186–190、1997。
[17] — G.カニツァ。ビジョンの組織。1979年、ニューヨークのPraeger。
[19] — L. Liang、C。Liu、Y.-Q。Xu、B。Guo、およびH.-Y. シャム。パッチベースのサンプリングによるリアルタイムテクスチャ合成。ACM Transactions on Graphics、2001。
[22] — L.-W. ウェイとM.レボイ。ツリー構造のベクトル量子化を使用した高速テクスチャ合成。Procで ACM設定 比較 グラフィックス(SIGGRAPH)、2000。
[23] — A.ザレスニー、V。フェラーリ、G。カーネン、およびL.ファングール。並列複合テクスチャ合成。(ECCV02と共に)、コペンハーゲン、デンマーク、6月2002 -テクスチャ2002のワークショップでは
、[24] - AkurKumarパテル、グジャラート州工科大学、コンピュータサイエンスとエンジニアリング
[25] - 模範ベースの画像インペインティングのための改良された堅牢なアルゴリズム
- [26] ウィキペディア、ピーク信号対ノイズ比
inpaint.exe left top width height img.jpg
か?