| Operatoren |
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 u_i wird als ein gewichtetes Mittel von bereits bekannten Werten u_i, 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.
T
S = G * Dv Dv
rho
und
v = G * u
sigma
wobei * die Faltung, u das Grauwertbild , D die Ableitung und G Gaußkerne mit Standardabweichungen sigma bzw. rho 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 lambda , d.h.
S c = lambda c , |c|=1
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 u_1,...,u_n die n Kanäle des Bildes bezeichnen, so werden die Kanalstrukturtensoren S_1,...,S_n berechnet und wie folgt zum zusammengesetzten Strukturtensor S kombiniert.
n
----
\
S = / a S
---- i i
i=1
Die Koeffizienten a_i 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. a_i = 1/n. Ist die Tupellänge genau die Anzahl der Kanäle, so werden die Koeffizienten a_i auf
ChannelCoefficients[i]
a = -----------------------------
i n
----
\
/ ChannelCoefficients[i]
----
i=1
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 beta, groß ist, wird eine kleine Richtungskomponente zugewiesen. Ansonsten wird eine große Richtungskomponente zugewiesen. beta wird gesteuert durch Kappa (in Prozent):
beta = 20 * Epsilon * Kappa / 100
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.
Eingabebild.
Inpaintingregion.
Ausgabebild.
Radius der Pixelnachbarschaft.
Defaultwert: 5.0
Typischer Wertebereich: 1.0 ≤ Epsilon ≤ 20.0
Minimale Schrittweite: 1.0
Empfohlene Schrittweite: 1.0
Schärfeparameter in Prozent.
Defaultwert: 25.0
Typischer Wertebereich: 0.0 ≤ Kappa ≤ 100.0
Minimale Schrittweite: 1.0
Empfohlene Schrittweite: 1.0
Vorglättungsparmeter.
Defaultwert: 1.41
Typischer Wertebereich: 0.0 ≤ Sigma ≤ 20.0
Minimale Schrittweite: 0.001
Empfohlene Schrittweite: 0.01
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
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
| Operatoren |