inpainting_aniso
— Inpainting eines Bildbereiches durch anisotrope Diffusion.
inpainting_aniso(Image, Region : InpaintedImage : Mode, Contrast, Theta, Iterations, Rho : )
Der Operator inpainting_aniso
nutzt die anisotrope Diffusion
von Grauwerten nach dem Modell von Perona und Malik, um an die
Bildregion Region
des Eingabebildes Image
angrenzende Bildkanten in Region
hinein fortzusetzen und zu
verbinden.
Dadurch kann die Struktur der Bildkanten in Region
konsistent zur umgebenden Bildmatrix gemacht werden, so dass eine
Überdeckung von Fehlstellen oder Störobjekten im Eingabebild, ein
sogenanntes Inpainting, für einen menschlichen Beobachter
schwächer in Erscheinung tritt, da keine auffälligen Artefakte
oder Schmiereffekte zurückbleiben.
Ordnet man dem Bild eine Grauwertfunktion u zu, so ist der
Algorithmus eine Diskretisierung der partiellen
Differentialgleichung
mit dem durch Image
definierten Anfangswert zu einem Zeitpunkt . Die Gleichung
wird dabei Iterations
mal in Zeitschritten der Länge
Theta
iteriert, so dass das Ausgabebild
InpaintedImage
die Grauwertfunktion zum Zeitpunkt
enthält.
Ziel der anisotropen Diffusion, die auch als nichtlinear isotrope
Diffusion bezeichnet wird, ist es ursprünglich, in flächigen
Bildbereichen Bildstörungen wie Rauschen zu eliminieren, ohne dabei
Bildkanten zu verwischen. Die Unterscheidung zwischen Kanten und
Flächen wird durch den Schwellwert Contrast
für die
Größe der Grauwertdifferenz zwischen benachbarten Pixeln
getroffen. Contrast
wird auch als Kontrastparameter
bezeichnet und mit c abgekürzt. Wird die Kanteninformation durch
Glättung der Kantenamplitude in der Umgebung der bereits
vorhandenen Kanten ausgebreitet, so ist es darüber hinaus möglich,
die Kanten in das Rechengebiet Region
hinein
fortzusetzen. Die Standardabweichung dieses Glättungsvorganges wird
durch den Parameter Rho
bestimmt.
Der verwendete Algorithmus entspricht im Wesentlichen dem im
anisotropen Diffusionsfilter anisotropic_diffusion
,
allerdings geschieht hier keine Randbehandlung durch Spiegelung der
Grauwerte am Rand von Region
. Stattdessen ist dieses
Verfahren nur auf Regionen anwendbar, die einen Abstand von
mindestens 3 Pixeln zum Rand der Bildmatrix von Image
einhalten, da die Grauwerte auf diesem Streifen um Region
genutzt werden, um Randwerte für die verwendete
Differentialgleichung zu definieren und so die Konsistenz zur
Umgebung von Region
herzustellen. Dabei ist zu beachten,
dass der Inpaintingvorgang sich auf diejenigen Pixel beschränkt,
die innerhalb der ROI des Eingabebildes Image
liegen. Umfasst diese nicht die gesamte Region Region
, so
wird ein Streifen um die Schnittmenge aus Region
und der
ROI verwendet, um die Randwerte zu definieren.
Das Ergebnis des Diffusionsvorganges ist auch hier abhängig von den
Grauwerten im Rechengebiet des Eingabebildes Image
. Es ist
zu beachten, dass bereits vorhandene Bildkanten dort erhalten
werden. Dies gilt insbesondere auch für Grauwertsprünge am Rand
von Region
, die etwa durch Inpainting mit einem konstanten
Grauwert entstehen. Soll das Verfahren zum Inpainting verwendet
werden, empfiehlt es sich, zuvor den Operator
harmonic_interpolation
anzuwenden, um sämtliche störenden
Kanten aus dem Rechengebiet zu entfernen und die maximale
Grauwertdifferenz zwischen Nachbarpixeln zu minimieren, es sei denn
das ursprüngliche Bild enthält in Region
bereits
Informationen, die erhalten werden sollen.
Der variable Diffusionskoeffizient g der Differentialgleichung
kann verschiedenen monoton fallenden Funktionen mit Werten zwischen
0 und 1 folgen und bestimmt das Antwortverhalten
des Diffusionsvorganges auf eine Kante. Über den Parameter
Mode
stehen die folgenden Funktionen zur Verfügung:
Die Wahl der Funktion , wenn Mode
auf
'parabolic' gesetzt wird, garantiert, dass die zugehörige
Differentialgleichung parabolisch ist, so dass eine
Wohlgestelltheitstheorie für das Problem existiert und das
Verfahren für beliebige Schrittweiten Theta
stabil ist. In
diesem Falle bleibt es aber bei einer leichten Diffusion auch über
Kanten hinweg, deren Stärke c übersteigt.
Die in der Veröffentlichung von Perona und Malik verwendete
Funktion bei Wahl von 'perona-malik' für Mode
besitzt nicht die theoretischen Eigenschaften von ,
hat sich in der Praxis aber dennoch als ausreichend stabil
erwiesen. Die theoretische Instabilität zeigt sich in einer
leichten Schärfung von starken Kanten.
Die von Weickert vorgeschlagene Wahl bei
Mode
='weickert' mit der Konstanten C=3.31488 ist
eine Steigerung von im Bezug auf die
Kantenschärfe. Der Übergang zwischen Glättung und Schärfung
erfolgt hier sehr abrupt an der Stelle x = c^2.
Darüber hinaus ist für Mode
noch der Wert
'shock' möglich, durch den eine kontrastinvariante
Abwandlung der anisotropen Diffusion gewählt wird. In dieser
Variante wird die Erzeugung von Kanten nicht durch die Variation des
Diffusionskoeffizienten g erreicht, sondern ein konstanter
Koeffizient g=1 und damit isotrope Diffusion
verwendet. Zusätzlich wird ein Schockfilter vom Typ
eingesetzt, der ebenso wie ein negativer Diffusionskoeffizient der
Kantenschärfung dient, diese Schärfung aber unabhängig vom
Absolutwert von bewirkt. In diesem Modus
hat Contrast
nicht die Bedeutung eines Kontrastparameters,
sondern bestimmt das Verhältnis zwischen Diffusions- und
Schockfilteranteil in jedem Iterationsschritt. Der Wert 0
entspräche demnach reiner isotroper Diffusion, wie sie im Operator
isotropic_diffusion
verwendet wird. Der Parameter ist so
skaliert, dass sich Diffusion und Schärfung für
Contrast
=1 gerade aufheben. Ein Wert
Contrast
>1 sollte nicht verwendet werden, da das
Verfahren dadurch instabil wird.
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.
Mode
(input_control) string →
(string)
Art des Kantenschärfungsalgorithmus.
Defaultwert: 'weickert'
Werteliste: 'parabolic' , 'perona-malik' , 'shock' , 'weickert'
Contrast
(input_control) real →
(real)
Kontrastparameter.
Defaultwert: 5.0
Wertevorschläge: 0.5, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0
Restriktion: Contrast > 0
Theta
(input_control) real →
(real)
Schrittweite.
Defaultwert: 0.5
Wertevorschläge: 0.5, 1.0, 5.0, 10.0, 30.0, 100.0
Restriktion: Theta > 0
Iterations
(input_control) integer →
(integer)
Anzahl Iterationen.
Defaultwert: 10
Wertevorschläge: 1, 3, 10, 100, 500
Restriktion: Iterations >= 1
Rho
(input_control) real →
(real)
Glättungkoeffizient für Kanteninformation.
Defaultwert: 3.0
Wertevorschläge: 0.0, 0.1, 0.5, 1.0, 3.0, 10.0
Restriktion: Rho >= 0
read_image (Image, 'fabrik') gen_rectangle1 (Rectangle, 270, 180, 320, 230) harmonic_interpolation (Image, Rectangle, InpaintedImage, 0.01) inpainting_aniso (InpaintedImage, Rectangle, InpaintedImage2, \ 'perona-malik', 5.0, 100, 50, 0.5) dev_display(InpaintedImage2)
harmonic_interpolation
,
inpainting_ct
,
inpainting_mcf
,
inpainting_texture
,
inpainting_ced
J. Weickert; „Anisotropic Diffusion in Image Processing“; PhD
Thesis; Fachbereich Mathematik, Universität Kaiserslautern; 1996.
P. Perona, J. Malik; „Scale-space and edge detection using
anisotropic diffusion“; Transactions on Pattern Analysis and
Machine Intelligence 12(7), pp. 629-639; IEEE; 1990.
G. Aubert, P. Kornprobst; „Mathematical Problems in Image
Processing“; Applied Mathematical Sciences 147; Springer, New
York; 2002.
Foundation