| Operatoren |
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
u_t = div(g(|grad u|^2, c) grad u)
mit dem durch Image definierten Anfangswert u = u_0 zu einem Zeitpunkt t_0 = 0. Die Gleichung wird dabei Iterations mal in Zeitschritten der Länge Theta iteriert, so dass das Ausgabebild InpaintedImage die Grauwertfunktion zum Zeitpunkt Iterations * Theta 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:
g_1(x,c) = 1/sqrt( 1 + 2*x/c^2 )
Die Wahl der Funktion g_1, 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.
g_2(x,c) = 1/( 1 + (x/c^2) )
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 g_1, 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.
g_3(x,c) = 1-exp(-C*c^8/x^4)
Die von Weickert vorgeschlagene Wahl g_3 bei Mode='weickert' mit der Konstanten C=3.31488 ist eine Steigerung von g_2 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
u_t = -sgn(grad |grad u|) |grad u|
eingesetzt, der ebenso wie ein negativer Diffusionskoeffizient der Kantenschärfung dient, diese Schärfung aber unabhängig vom Absolutwert von |grad u| 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.
Eingabebild.
Inpaintingregion.
Ausgabebild.
Art des Kantenschärfungsalgorithmus.
Defaultwert: 'weickert'
Werteliste: 'parabolic', 'perona-malik', 'shock', 'weickert'
Kontrastparameter.
Defaultwert: 5.0
Wertevorschläge: 0.5, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0
Restriktion: Contrast > 0
Schrittweite.
Defaultwert: 0.5
Wertevorschläge: 0.5, 1.0, 5.0, 10.0, 30.0, 100.0
Restriktion: Theta > 0
Anzahl Iterationen.
Defaultwert: 10
Wertevorschläge: 1, 3, 10, 100, 500
Restriktion: Iterations >= 1
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
| Operatoren |