inpainting_texture
— Inpainting eines Bildbereiches durch Texturfortsetzung.
inpainting_texture(Image, Region : InpaintedImage : MaskSize, SearchSize, Anisotropy, PostIteration, Smoothness : )
Der Operator inpainting_texture
dient zur Entfernung
größerer Objekte oder Bildstörungen aus der Region
Region
des Eingabebildes Image
. Dazu werden
Bildblöcke der Kantenlänge MaskSize
aus dem intakten Teil
des Bildes an den Rand des Rechengebietes angefügt, bis dieses
vollständig mit neuen Grauwerten gefüllt ist. Dieser Vorgang wird
als Image Inpainting bezeichnet. Das Rechengebiet heißt daher auch
Inpaintinggebiet, und wird ausgehend von Region
mit jedem
eingefügten Rechteck verkleinert. Der Mittelpunkt des aktuell zu
bearbeitenden Blockes befinde sich an einer Stelle x. Da x immer
auf dem Rand des Inpaintinggebietes gewählt wird, überlappt dieser
aktuelle Block mit den bekannten oder bereits eingefügten
Grauwerten. Welcher andere Bildblock an die Stelle x passt, wird
über seine Grauwertkorrelation mit den Grauwerten im
Überlappungsbereich des aktuellen Blocks bestimmt. Als Korrelation
wird die Summe der Quadrate der Grauwertdifferenzen verwendet. Die
Bildblöcke, die für die Korrelation herangezogen werden und als
Kandidaten für die Datenquelle des nächsten Inpaintingschrittes
dienen, bezeichen wir als Vergleichsblöcke. Der Suchbereich für
geeignete Grauwertmuster ist auf ein Quadrat der Kantenlänge
2* SearchSize
um den Punkt x beschränkt,
in dem sich die Mittelpunkte der Vergleichsblöcke befinden müssen.
Die Reihenfolge, in der die Pixel von Region
aufgefüllt
werden, hängt zum einen von der Größe des Überlappungsbereiches
und damit von der Anzahl der für die Grauwertkorrelation zur
Verfügung stehenden Pixel und zum anderen vom Betrag der Ableitung
der Grauwertfunktion tangential zum Rand des Rechengebietes ab. Je
größer der Wert des Parameters Anisotropy
ist, desto
stärker werden Punkte, an denen die Ableitung groß ist,
bevorzugt. Dadurch wird z.B. erreicht, dass gerade Kanten, die durch
den hohen Gradienten repräsentiert werden, durch das gesamte
Rechengebiet hindurch fortgesetzt werden können, ohne bei kleiner
werdendem Inpaintinggebiet durch das Inpainting von Bildstrukturen
von anderen Teilen des Randes unterbrochen zu werden. Auf der
anderen Seite führt ein größer Wert von Anisotropy
aber
auch dazu, dass eventuelle Scheinkanten, also während des
Inpaintings zufällig entstandene unerwünschte Strukturen,
ebenfalls propagiert und Störungen so vergrößert werden können.
Um die Bildung solcher Artefakte einzudämmen, kann der
ursprüngliche Algorithmus um eine Nachiteration erweitert werden,
bei der glatte oder unscheinbare Bildbereiche als Datenquellen für
das Inpainting bevorzugt werden. Setzt man den Parameter
PostIteration
auf den Wert 'min_grad' , so wird die
Summe der Quadrate der Grauwertgradienten über die
Vergleichsblöcke minimiert, setzt man ihn auf
'min_range_extension' , so minimiert man das Anwachsen des
Grauwertintervalls der Vergleichsblöcke gegenüber dem
Referenzrechteck um den Punkt x. Hat PostIteration
den
Wert 'none' , wird keine Nachiteration durchgeführt. Welche
Blöcke für die nachträgliche Minimierung zulässig sind, wird
durch den Parameter Smoothness
festgelegt. Dieser bestimmt,
wieviel größer die mittlere absolute Abweichung der Grauwerte in
den zulässigen Vergleichsblöcken gegenüber der vom
Ursprungsalgorithmus bestimmten minimalen Abweichung ausfallen
darf. Mit zunehmendem Wert von Smoothness
wird das
Inpaintingergebnis daher glatter und Strukturen verschwinden. Die
Passgenauigkeit der gewählten Vergleichsblöcke nimmt dabei
ab. Wird Smoothness
auf 0 gesetzt, so
berücksichtigt die Nachiteration nur Vergleichsblöcke mit gleich
starker Korrelation zum Referenzblock.
Kann das Inpainting nicht vollständig durchgeführt werden, weil
Punkte x existieren, für die kein vollständiger Block mit
intakten Grauwertinformationen im Suchbereich der Größe
SearchSize
vorhanden ist, so behalten die verbleibenden
Pixel ihren ursprünglichen Grauwert und die ROI des Ausgabebildes
InpaintedImage
wird um den unbearbeiteten Bereich
reduziert. Ist die Strukturgröße der ROI von Image
oder
des Rechengebietes Region
kleiner als MaskSize
, so
kann die Laufzeit des Algorithmus extrem anwachsen. Es sollten daher
nur klar strukturierte Eingaberegionen verwendet werden.
Beachten Sie, dass Filteroperatoren eventuell unerwartete Resultate ausgeben, wenn ein Bild mit einer reduzierten Domäne als Input übergeben wird. Weitere Informationen können im Kapitel Filter gefunden werden.
Image
(input_object) (multichannel-)image(-array) →
object (byte / uint2 / real)
Eingabebild.
Region
(input_object) region →
object
Inpaintingregion.
InpaintedImage
(output_object) image(-array) →
object (byte / uint2 / real)
Ausgabebild.
MaskSize
(input_control) integer →
(integer)
Größe der Inpaintingblöcke.
Defaultwert: 9
Wertevorschläge: 7, 9, 11, 15, 21
Restriktion: MaskSize >= 3 && odd(MaskSize)
SearchSize
(input_control) integer →
(integer)
Größe des Suchfensters.
Defaultwert: 30
Wertevorschläge: 15, 30, 50, 100, 1000
Restriktion: 2 * SearchSize > MaskSize
Anisotropy
(input_control) real →
(real)
Einfluss der Kantenstärke auf die Inpaintingreihenfolge.
Defaultwert: 1.0
Wertevorschläge: 0.0, 0.01, 0.1, 0.5, 1.0, 10.0
Restriktion: Anisotropy >= 0
PostIteration
(input_control) string →
(string)
Nachiteration zur Artefaktreduzierung.
Defaultwert: 'none'
Werteliste: 'min_grad' , 'min_range_extension' , 'none'
Smoothness
(input_control) real →
(real)
Grauwerttoleranz für Nachiteration.
Defaultwert: 1.0
Wertevorschläge: 0.0, 0.1, 0.2, 0.5, 1.0
Restriktion: Smoothness >= 0
Foundation