inpainting_ct
— Inpainting eines Bildbereiches mittels Kohärenztransport.
inpainting_ct(Image, Region : InpaintedImage : Epsilon, Kappa, Sigma, Rho, ChannelCoefficients : )
Der Operator inpainting_ct
führt ein Inpainting auf der
Region Region
im Bild Image
durch, indem
Bildinformation vom Rand dieser Region entlang der Kohärenzrichtung
in das Innere transportiert wird.
Das grundlegende Konzept dieses Operators ist Inpainting durch
Fortsetzten unterbrochener Höhenlinien. Somit müssen der Bildinhalt
und die Inpaintingregion so beschaffen sein, dass diese Idee
anwendbar ist. Das heißt, wenn eine Höhenlinie die Inpaintingregion
beim Pixel p trifft, dann sollte es einen gegenüberliegenden Punkt
q geben, an dem diese Höhenlinie weiterläuft so, dass die
Fortsetzung Höhenlinie von zwei gegenüberliegenden Seiten
funktioniert. In Fällen, in denen das Bild wenig Geometrie besitzt,
kann ein diffusionsbasierter Inpainter, z.B.,
harmonic_interpolation
bessere Ergebnisse liefern.
Alternativ kann Kappa
auf 0 gesetzt werden. Ein
Extremfall mit geringen globalen Geometrien sind reine Texturen.
Dann wird die Idee hinter diesem Operator keine guten Ergenisse
produzieren (man denke z.B. an ein Schachbrettmuster mit einer
großen Inpaintingregion relativ zu den Schachfeldern). Für diesen
Typ Bild ist ein texturbasiertes Inpaiting, wie z.B.
inpainting_texture
, zu empfehlen.
The Operator verwendet ein sogenanntes Upwind-Schema, um den fehlenden Pixeln Grauwerte zuzuweisen, d.h.,:
Die Reihenfolge der zu bearbeitenden Pixel ist durch deren euklidischen Abstand zum Rand der Inpaintingregion gegeben.
Ein neuer Wert wird als ein gewichtetes Mittel von
bereits bekannten Werten , die innerhalb einer
Kreisscheibe vom Radius Epsilon
um das aktuelle Pixel
liegen, berechnet. Diese Kreisscheibe ist beschränkt auf
bereits bekannte Pixel.
Die Maskengröße dieses Schemas hängt von Epsilon
ab.
Die anfänglich verwendeten Bilddaten stammen aus einem Streifen der
Dicke Epsilon
um die Inpaintingregion. Damit das Schema
funktioniert, muss Epsilon
mindestens 1 sein, sollte aber
größer gewählt werden. Der maximale Wert für Epsilon
hängt
von den Grauwerten, die die in die Region transportiert werden
sollen, ab. Eine Wahl von Epsilon
= 5 ist in
vielen Fällen anwendbar.
Da das Ziel ist, unterbrochene Höhenlinien zu schließen, muss deren
Richtung geschätzt und als Gewicht verwendet werden. Die geschätzte
Richtung heißt Kohärenzrichtung, und wird mit Hilfe des
Strukturtensors S berechnet.
und
wobei * die Faltung, u das Grauwertbild , D die
Ableitung und G Gaußkerne mit Standardabweichungen
bzw. bezeichnen. Diese
Standardabweichungen werden in den Parametern Sigma
und
Rho
des Operators übergeben. Sigma
sollte von der
Größenordung des Rauschens oder unwichtiger kleiner Objekte sein,
welche dann durch durch das Vorglätten im Schätzschritt nicht mehr
berücksichtigt werden. Rho
legt die Größe des Fensters
fest, welches um einen Pixel zur Richtungsschätzung gelegt wird.
Die Kohärenzrichtung c ist die Eigenrichtung von S zum minimalen
Eigenwert , d.h.
Zur Bearbeitung von Mehrkanal- oder Farbbildern wird das obige
Schema auf jeden Kanal separat angewendet. Die Gewichte aber müssen
für alle Kanäle gleich sein, um die Information in allen Kanälen in
die gleiche Richtung zu propagieren. Wegen der Abhängigkeit der
Gewichte von der Kohärenzrichtung wird hier die gemeinsame Richtung
als Eigenrichtung eines zusammengesetzten Strukturtensors berechnet.
Wenn nun die n Kanäle des Bildes
bezeichnen, so werden die Kanalstrukturtensoren
berechnet und wie folgt zum
zusammengesetzten Strukturtensor S kombiniert.
Die Koeffizienten werden im Parameter
ChannelCoefficients
übergeben.
ChannelCoefficients
ist dabei ein Tupel der Länge n oder
der Länge 1. Falls die Tupellänge 1 ist, wird das arithmetische
Mittel verwendet, d.h. . Ist die
Tupellänge genau die Anzahl der Kanäle, so werden die Koeffizienten
auf
gestzt, um eine gültige Konvexkombination zu erhalten. Deswegen
müssen die ChannelCoefficients
selbst größer gleich Null
sein und deren Summe größer als Null. Sollte die Tupellänge weder 1
noch gleich der Anzahl der Kanäle sein, oder die Vorraussetzung an
die Koeffizienten verletzt, so gibt der Operator eine Fehlermeldung
aus.
Der Zweck, andere ChannelCoefficients
als das arithmetische
Mittel zu benutzen, besteht darin, verschiedene Farbcodes zu
adaptieren. Die Kohärenzrichtung ist eine geometrische Information
des zusammengesetzten Bildes, welche durch starke Kontraste, wie
z.B. Kanten, gegeben ist. Je kontrastreicher ein Kanal ist, desto
mehr geometrische Information enthält er. Folglich sollte dessen
Koeffizient, relativ zu den anderen, größer gewählt werden. Für
RGB-Bilder ist [0.299, 0.587, 0.114] eine gute Wahl.
Das Gewicht in obigem Schema ist das Produkt einer
Richtungskomponente und einer Distanzkomponente. Bezeichne p den
2D-Koordinatenvektor des aktuell zu beabeitenden Pixels und q den
2D-Koordinatenvektor eines Pixels in der Nachbarschaft (die
Kreisscheibe beschränkt auf bereits bekannte Pixel). Dann misst die
Richtungskomponente die Abweichung des Differenzvektors p-q von
der Kohärenzrichtung. Falls die Abweichung, exponentiell skaliert
mit , groß ist, wird eine kleine
Richtungskomponente zugewiesen. Ansonsten wird eine große
Richtungskomponente zugewiesen. wird gesteuert
durch Kappa
(in Prozent):
Kappa
definiert, wie wichtig es ist, Information entlang
der Kohärenzrichtung zu propagieren, d.h. ein großer Wert für
Kappa
bewirkt scharfe Kanten, während ein kleines
Kappa
mehr Diffusion erlaubt.
Ein Sonderfall ist Kappa
gleich Null: In dieser Situation
ist die Richtungskomponente konstant (1). Die Richtungsschätzung
wird dabei übersprugen, um Laufzeit zu sparen, und die Parameter
Sigma
, Rho
, ChannelCoefficients
werden in
diesem Fall bedeutungslos, d.h. die Propagation von Information
basiert nicht mehr auf den im Bild sichtbaren Strukturen.
Die Distanzkomponente ist 1/|p-q|. Folglich wird, wenn q weit entfernt von p liegt, eine kleine Distanzkomponente zugewiesen, andernfalls, wenn q nahe bei p liegt, eine große Distanzkomponente.
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) (multichannel-)image(-array) →
object (byte / uint2 / real)
Ausgabebild.
Epsilon
(input_control) number →
(real)
Radius der Pixelnachbarschaft.
Defaultwert: 5.0
Typischer Wertebereich: 1.0
≤
Epsilon
≤
20.0
Minimale Schrittweite: 1.0
Empfohlene Schrittweite: 1.0
Kappa
(input_control) number →
(real)
Schärfeparameter in Prozent.
Defaultwert: 25.0
Typischer Wertebereich: 0.0
≤
Kappa
≤
100.0
Minimale Schrittweite: 1.0
Empfohlene Schrittweite: 1.0
Sigma
(input_control) number →
(real)
Vorglättungsparmeter.
Defaultwert: 1.41
Typischer Wertebereich: 0.0
≤
Sigma
≤
20.0
Minimale Schrittweite: 0.001
Empfohlene Schrittweite: 0.01
Rho
(input_control) number →
(real)
Glättungsparameter für die Richtungsschätzung.
Defaultwert: 4.0
Typischer Wertebereich: 0.001
≤
Rho
≤
20.0
Minimale Schrittweite: 0.001
Empfohlene Schrittweite: 0.01
ChannelCoefficients
(input_control) number(-array) →
(real)
Kanalgewichte.
Defaultwert: 1
read_image (Image, 'claudia') gen_circle (Circle, 333, 164, 35) inpainting_ct (Image, Circle, InpaintedImage, 15, 25, 1.5, 3,1.0)
harmonic_interpolation
,
inpainting_aniso
,
inpainting_mcf
,
inpainting_ced
,
inpainting_texture
Folkmar Bornemann, Tom März: „Fast Image Inpainting Based On Coherence Transport“; Journal of Mathematical Imaging and Vision; vol. 28, no. 3; pp. 259-278; 2007.
Foundation